Reference: agent configuration schema

July 28, 2026 · View on GitHub

An Agent is serialized to an agentConfig JSON object and sent to the server, which compiles it into a Conductor WorkflowDef. This page documents that wire format; agent-schema.json is the machine-readable version.

Inspect what your agent actually compiles to with a dry run:

var workflowDef = await runtime.PlanAsync(agent);   // JsonNode?

Top-level fields

FieldTypeSource
namestringAgent.Name
modelstringAgent.Model
instructionsstringAgent.Instructions / InstructionsFn
instructionstringGoogle ADK adapter (singular)
promptobjectPromptTemplateInstructions{name, variables}
toolsarrayAgent.Tools
agentsarraySub-agents, recursively agentConfig-shaped
strategystringhandoff, sequential, parallel, router, round_robin, random, swarm, manual, plan_execute
routerobjectStrategy.Router classifier
maxTurns / maxTokens / temperature / timeoutSecondsnumber
guardrailsarray
terminationobject
handoffsarraySwarm triggers
gateobject{text, caseSensitive}
allowedTransitionsobjectname -> [names]
callbacksarrayPositions: before_agent, after_agent, before_model, after_model, before_tool, after_tool
outputType / outputSchemaobjectStructured output
statefulboolDomain-routed workers
enablePlanningboolPrompt preamble only
planner / fallback / fallbackMaxTurnsStrategy.PlanExecute slots
externalbool
framework / configstring / objectSet by framework adapters (openai, google_adk)
metadataobject
reasoningEffort / thinkingConfigPer-run LLM controls
includeContents / introduction / requiredTools
sessionId / media / inputRun-time inputs, not part of the definition
version / rawConfig

Tool objects

Each entry in tools carries name, description, inputSchema, toolType, and the execution knobs approvalRequired, external, timeoutSeconds, credentials, stateful, retryCount, retryDelaySeconds, retryPolicy (fixed, linear_backoff, exponential_backoff), plus an optional nested guardrails.

toolType selects the server-side handler — worker (a local [Tool] method), agent_tool, human, skill, and the built-in factories. Type-specific payloads appear alongside: cliConfig (allowedCommands, allowShell, workingDir, timeout), codeExecution (allowedLanguages, language, code), taskName, workerNames, className, arguments, optional.

Termination objects

termination is a tree. Leaves carry a type:

typeFields
text_mentiontext, caseSensitive
stop_messagestopMessage
max_messagemaxMessages
token_usagemaxTotalTokens, maxPromptTokens, maxCompletionTokens

Composites use and / or with a conditions array.

Handoff objects

typeFields
on_text_mentiontext, target
on_tool_resulttoolName, target, resultContains
on_conditiontarget (the predicate stays client-side)

Guardrail objects

Every guardrail carries name, guardrailType, position (input / output), onFail (retry, raise, fix, human — default raise), and maxRetries. guardrailType selects how the server evaluates it, and determines which additional fields appear:

guardrailTypeExtra fieldsEvaluated by
regexpatterns, mode (block/allow), messageServer, as an inline script
llmmodel, policy, maxTokensServer, calling the model itself
customtaskName = {scope}_output_guardrailYour combined per-scope worker
externalA remote worker, by name

Only custom guardrails involve a worker in your process. Sensitive values may be listed in maskedFields.

Maintenance

This schema is maintained by hand against AgentConfigSerializer and AgentDef. Unlike the Java SDK — which verifies its equivalent in CI with a schema generator — this repo has no automated check that the schema stays in step with the serializer. Treat a discrepancy as a documentation bug and prefer PlanAsync output as the ground truth.