Skip to main content
Flat reference of every field the composer accepts in an orx.yaml. Kept short and grep-friendly — each row links back to the matching narrative section in Composer when you want context.
The canonical source is orxhestra/composer/schema.py. If this page ever drifts from the code, the code wins — file an issue so we can fix the doc.

ComposeSpec (root)

FieldTypeDefaultNotes
versionstrcurrent package versionForward-compat stamp. No runtime effect today.
defaultsDefaultsConfig{}Inherited by every agent.
modelsdict[str, ModelConfig]{}Named LLM configs.
toolsdict[str, ToolDef]{}Named tool definitions.
skillsdict[str, SkillItemDef]{}Named skills (progressive disclosure).
agentsdict[str, AgentDef]requiredAll agents keyed by name.
main_agentstrrequiredEntry-point agent name. Must exist in agents.
runnerRunnerConfigNoneEnables runner_from_yaml().
serverServerConfigNoneEnables server_from_yaml() (A2A).
identityIdentityConfigNoneEd25519 signing identity.
trustTrustConfigNoneSignature verification policy.
attestationAttestationConfigNoneAudit + claim-issuance provider.

DefaultsConfig

FieldTypeDefaultNotes
modelModelConfigNoneDefault LLM for agents that don’t override.
max_iterationsint10Tool-loop cap; loop agents also inherit this.

ModelConfig

FieldTypeDefaultNotes
providerstr"anthropic"openai, anthropic, google, or a dotted import path.
namestr"claude-opus-4-7"Provider-specific model id.
temperaturefloat | NoneNoneSampling temperature.
**extradictAny extra keys (max_tokens, api_key, base_url, …) are forwarded to the LangChain constructor.

ToolDef

Exactly one of function / mcp / builtin / agent / transfer / custom must be set.
FieldTypeDefaultNotes
functionstr | NoneNoneDotted import path to a Python callable.
mcpMCPConfig | NoneNoneMCP server connection.
builtinstr | NoneNoneRegistered built-in name (filesystem, shell, …).
agentstr | NoneNoneName of an agent to wrap as an AgentTool.
transferTransferConfig | NoneNoneTransfer-routing targets.
customdict[str, Any] | NoneNoneEscape hatch; must carry "type" key matching a resolver registered via register_tool_resolver.
skip_summarizationboolFalseSkip LLM summarization of the tool’s result.
namestr | NoneNoneOverride the tool name exposed to the LLM.
descriptionstr | NoneNoneOverride the tool description.

MCPConfig

FieldTypeDefaultNotes
urlstr | NoneNoneHTTP(S) URL of the MCP server.
serverstr | NoneNoneDotted import path to an in-memory FastMCP server.
Exactly one of url / server must be set.

TransferConfig

FieldTypeDefaultNotes
targetslist[str]requiredAgent names that can be transferred to.

AgentDef

Shared shape — per-type required fields are enforced by the schema validator.
FieldTypeDefaultApplies toNotes
type"llm" | "react" | "sequential" | "parallel" | "loop" | "a2a""llm"allAgent kind. Custom types register via register_builder.
descriptionstr""allUsed by routers and LLM transfer decisions.
urlstr | NoneNonea2a (required)Remote A2A server URL.
modelModelConfig | str | NoneNonellm, reactInline config or name ref to models.
instructionsstr | NoneNonellm, reactSystem instructions.
toolslist[str | ToolDef] | NoneNonellm, reactNamed refs or inline.
skillslist[str][]llm, reactProgressive-disclosure skill refs.
agentslist[str] | NoneNonecomposites (required)Sub-agent names for sequential / parallel / loop.
plannerPlannerDef | NoneNonellm, reactPlanning strategy.
output_keystr | NoneNonellm, reactSession-state key for final output.
output_schemastr | NoneNonellm, reactDotted import path to a Pydantic model.
include_contents"default" | "none" | NoneNonellm, reactContent inclusion mode.
max_iterationsint | NoneNonellm, react, loopTool-loop / iteration cap.
should_continuestr | NoneNoneloopDotted import path to a continuation callable.
Fields set on an agent type that ignores them (e.g. tools on a sequential agent) emit a warnings.warn at schema time. Run with -W error to turn those into hard failures.

PlannerDef

FieldTypeDefaultNotes
type"plan_react" | "task""plan_react"Planner strategy.
taskslist[dict] | NoneNonePre-defined tasks for task planner; ignored for plan_react.

SkillItemDef

Exactly one of content / mcp / directory must be set.
FieldTypeDefaultNotes
namestrrequiredSkill name (used by the agent’s load_skill tool).
descriptionstr""Shown to the LLM during skill selection.
contentstr | NoneNoneInline Markdown content.
mcpMCPConfig | NoneNoneFetch from a FastMCP server at build time.
directorystr | NoneNonePath to an Agent Skills Protocol directory.

RunnerConfig

FieldTypeDefaultNotes
app_namestr"agent-app"Session namespace.
session_service"memory" | "database" | <dotted>"memory"Session backend selector.
artifact_service"memory" | "file" | NoneNoneArtifact backend.
compactionCompactionConfigDef | NoneNoneAuto-compaction.
configRunConfigDef | NoneNoneLangChain RunnableConfig for every call.

CompactionConfigDef

FieldTypeDefaultNotes
char_thresholdint100_000~25k tokens; compact past this.
retention_charsint20_000~5k tokens; always kept raw.

RunConfigDef

FieldTypeDefaultNotes
callbackslist[str][]Dotted import paths to LangChain callback handlers.
tagslist[str][]Tags propagated to every call.
metadatadict[str, str]{}Run metadata.

ServerConfig

FieldTypeDefaultNotes
app_namestr"agent-app"A2A card name.
versionstr"1.0.0"A2A card version.
urlstr"http://localhost:8000"Public URL.
skillslist[A2ASkillDef][]Advertised skills.

IdentityConfig

FieldTypeDefaultNotes
signing_keystrrequiredPath to a JSON key file. Created via orx identity init. Supports ${VAR} expansion.
encryption_passwordstr | NoneNonePassword for Fernet-wrapped key files. Supports ${VAR} expansion.
did_method"key" | "web""key""key" derives the DID from the public key; "web" requires an explicit did.
didstr | NoneNoneExplicit DID. Required when did_method="web".

TrustConfig

FieldTypeDefaultNotes
mode"strict" | "permissive""permissive"Strict drops failing events; permissive annotates them.
trusted_didslist[str][]Allowlist. Empty means “any valid signer”.
denied_didslist[str][]Denylist. Takes precedence over allowlist.
require_chainboolFalseEnforce hash-chain continuity per branch.
allow_unsignedboolTrueWhen False, every event must be signed.
Only installed when an identity: block is also present (verification requires keys).

AttestationConfig

FieldTypeDefaultNotes
provider"noop" | "local" | <dotted>"noop"Provider selector.
pathstr | NoneNoneRequired when provider="local".
Dotted paths must resolve to a class implementing the AttestationProvider protocol.

Environment-variable expansion

Any string in identity.signing_key, identity.encryption_password, and attestation.path goes through os.path.expandvars, so ${ORX_SIGNING_KEY} / $HOME/.orx/... work. Other fields are taken literally; interpolate with YAML anchors or templating if you need more than three spots.

See also