Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Anatomy of an agent

An agent is configured as a single [agents.<alias>] block. Every field is either a reference to something configured elsewhere or a per-agent override. The table below is generated from the config schema, so it always matches the running build. Click a field to expand it; click again to see how to set it.

a2a AgentA2aConfig · default {"exposed_skills":[],"published":false}

Per-agent A2A publication block ([agents.<alias>.a2a]). Gates whether this alias is discoverable as a spec-conforming A2A agent and which resolved skills appear on its card. Default-closed (published = false, no exposed skills). See crate::multi_agent::AgentA2aConfig.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.a2a field.

zerocode

In the Config pane, set the agents.<alias>.a2a field.

zeroclaw config

zeroclaw config set agents.<alias>.a2a <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__a2a=
acp_enable_mcp bool · default false

Initialize this agent’s mcp_bundles tools when it serves an ACP (session/new) session. Off by default: MCP servers are external processes/services that can block startup while they connect, and ACP session/new is expected to return promptly. Enable it when this agent must call its mcp_bundles tools over ACP; session/new then pays the one-time MCP connection cost (bounded and non-fatal per server). Set per agent so each ACP profile opts in independently; when this agent is the ACP default (acp.default_agent, or the sole configured agent), the flag is picked up automatically for sessions that omit agentAlias.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.acp_enable_mcp field.

zerocode

In the Config pane, set the agents.<alias>.acp_enable_mcp field.

zeroclaw config

zeroclaw config set agents.<alias>.acp_enable_mcp <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__acp_enable_mcp=
channels ChannelRef[] · default []

Channel aliases this agent handles (e.g. ["telegram.<alias>", "discord.<alias>"]). Each entry is a ChannelRef resolving through [channels.<type>.<alias>]; Config::validate() fails loud on dangling references.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.channels field.

zerocode

In the Config pane, set the agents.<alias>.channels field.

zeroclaw config

zeroclaw config set agents.<alias>.channels <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__channels=
classifier_provider ModelProviderRef · default ""

Optional override for the per-message LLM reply-intent classifier (classify_channel_reply_intent in zeroclaw-channels). When non-empty, the channel orchestrator routes the “should this message be replied to?” classification call to [providers.models.<type>.<alias>] referenced here, instead of reusing the main agent’s model_provider. Source of truth for api_key / uri / model / temperature etc. is the referenced [providers.models.<type>.<alias>] entry. This field is a reference only (NEVER a copy), per AGENTS.md SINGLE SOURCE OF TRUTH. Empty (Default) = inherit the main agent’s resolved provider+model (preserves pre-PR behavior; backward compatible). Use case: classification is a cheap REPLY/NO_REPLY decision, doesn’t need a high-end model. Point this at a fast/free small model (e.g. kimi-k2.5, qwen-turbo) while model_provider stays on the expensive answering model (e.g. qwen3.6-plus). Note: TOML table names cannot contain ., so alias kimi-k2.5 must be written as [providers.models.custom.kimi-k2-5]. The underlying model = "kimi-k2.5" string can still contain dots. ACP channels (IDE-direct) always reply and skip the classifier entirely, so this field has no effect on ACP traffic.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.classifier_provider field.

zerocode

In the Config pane, set the agents.<alias>.classifier_provider field.

zeroclaw config

zeroclaw config set agents.<alias>.classifier_provider <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__classifier_provider=
cron_jobs string[] · default []

Cron job aliases. Each entry references cron[key], a declarative scheduled job invoked by the scheduler on its configured trigger. When the cron fires, this agent is the actor that executes the job.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.cron_jobs field.

zerocode

In the Config pane, set the agents.<alias>.cron_jobs field.

zeroclaw config

zeroclaw config set agents.<alias>.cron_jobs <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__cron_jobs=
delegate_same_risk_profile bool · default true

Auto-allow delegation to every agent sharing this agent’s risk profile. Default true preserves the historical reach where any same-profile peer is a delegation target. Set false to opt this agent out so only the explicit delegates list is reachable. Gating (whether delegation is permitted at all) still lives on the risk profile’s delegation_policy.mode; this only narrows reach.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.delegate_same_risk_profile field.

zerocode

In the Config pane, set the agents.<alias>.delegate_same_risk_profile field.

zeroclaw config

zeroclaw config set agents.<alias>.delegate_same_risk_profile <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__delegate_same_risk_profile=
delegates DelegateTargetConfig[] · default []

Explicit delegate roster: additional agent aliases this agent may delegate to, beyond same-profile peers. Possibly empty. String entries are accepted for concise manual editing and load as bounded delegates; saved config emits object entries with explicit modes. Entries may name agents on a different risk profile. Config::validate() fails loud on a dangling alias, duplicate alias, or self-reference.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.delegates field.

zerocode

In the Config pane, set the agents.<alias>.delegates field.

zeroclaw config

zeroclaw config set agents.<alias>.delegates <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__delegates=
identity IdentityConfig · default {"aieos_inline":null,"aieos_path":null,"format":"openclaw"}

Per-agent identity format ([agents.<alias>.identity]). Each agent renders its own IDENTITY.md / SOUL.md inside its per-agent workspace; this block selects the format (OpenClaw or AIEOS) and optional inline/file source for the agent’s identity document.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.identity field.

zerocode

In the Config pane, set the agents.<alias>.identity field.

zeroclaw config

zeroclaw config set agents.<alias>.identity <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__identity=
knowledge_bundles string[] · default []

Knowledge bundle aliases. Additive: the agent loads every listed bundle.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.knowledge_bundles field.

zerocode

In the Config pane, set the agents.<alias>.knowledge_bundles field.

zeroclaw config

zeroclaw config set agents.<alias>.knowledge_bundles <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__knowledge_bundles=
mcp_bundles string[] · default []

MCP bundle aliases. Each entry references mcp_bundles[key], a named group of MCP servers. Secure by default: an agent is granted only the servers named by its bundles. An agent with no mcp_bundles receives no MCP servers (omission is not a grant). See Config::mcp_servers_for_agent.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.mcp_bundles field.

zerocode

In the Config pane, set the agents.<alias>.mcp_bundles field.

zeroclaw config

zeroclaw config set agents.<alias>.mcp_bundles <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__mcp_bundles=
memory AgentMemoryConfig · default {"backend":"sqlite"}

Per-agent memory backend selection ([agents.<alias>.memory]). The backend field is locked at agent creation and immutable on subsequent loads. Defaults to Sqlite. See crate::multi_agent::AgentMemoryConfig.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.memory field.

zerocode

In the Config pane, set the agents.<alias>.memory field.

zeroclaw config

zeroclaw config set agents.<alias>.memory <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__memory=
model_provider ModelProviderRef · default ""

Dotted model-provider alias (e.g. "anthropic.<alias>"). Resolves through model_providers.<type>.<alias> at runtime; Config::validate() fails loud on dangling references.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.model_provider field.

zerocode

In the Config pane, set the agents.<alias>.model_provider field.

zeroclaw config

zeroclaw config set agents.<alias>.model_provider <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__model_provider=
precheck ChannelPrecheckConfig · default {"enabled":true,"timeout_secs":5}

Per-agent reply-intent precheck controls. The classifier call reads this block at message time; model/provider selection stays on classifier_provider so there is only one routing source of truth.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.precheck field.

zerocode

In the Config pane, set the agents.<alias>.precheck field.

zeroclaw config

zeroclaw config set agents.<alias>.precheck <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__precheck=
risk_profile RiskProfileRef · default ""

Risk profile alias (e.g. "default"). Resolves delegation guardrails at runtime.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.risk_profile field.

zerocode

In the Config pane, set the agents.<alias>.risk_profile field.

zeroclaw config

zeroclaw config set agents.<alias>.risk_profile <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__risk_profile=
runtime_profile RuntimeProfileRef · default ""

Runtime profile alias (e.g. "default"). Resolves agentic/iteration settings.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.runtime_profile field.

zerocode

In the Config pane, set the agents.<alias>.runtime_profile field.

zeroclaw config

zeroclaw config set agents.<alias>.runtime_profile <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__runtime_profile=
skill_bundles string[] · default []

Skill bundle aliases. Each entry resolves to skill_bundles[key].directory at runtime; the agent loads every listed bundle.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.skill_bundles field.

zerocode

In the Config pane, set the agents.<alias>.skill_bundles field.

zeroclaw config

zeroclaw config set agents.<alias>.skill_bundles <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__skill_bundles=
summary_provider ModelProviderRef · default ""

Per-agent override for the context-compression summarizer provider, as a providers.models.<type>.<alias> reference. Empty (Default) = inherit the runtime profile’s context_compression.summary_provider, else the agent’s own resolved provider+model. Reference only, never a copy; resolved by [Config::effective_summary_provider]. Validated in Config::validate().

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.summary_provider field.

zerocode

In the Config pane, set the agents.<alias>.summary_provider field.

zeroclaw config

zeroclaw config set agents.<alias>.summary_provider <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__summary_provider=
transcription_provider TranscriptionProviderRef · default ""

Transcription / STT provider as a dotted alias reference (<type>.<alias>, e.g. "groq.<alias>"). Resolves through transcription_providers.<type>.<alias>. Empty = agent has no transcription preference; channels that ingest voice still need a resolved provider (there is no global default), so an inbound voice flow into an agent with empty transcription_provider errors loudly at the channel boundary.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.transcription_provider field.

zerocode

In the Config pane, set the agents.<alias>.transcription_provider field.

zeroclaw config

zeroclaw config set agents.<alias>.transcription_provider <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__transcription_provider=
tts_provider TtsProviderRef · default ""

TTS provider as a dotted alias reference (<type>.<alias>, e.g. "openai.<alias>"). Resolves through tts_providers.<type>.<alias>. Empty = no TTS for this agent (there is no global default-provider concept; every agent that wants TTS sets its own tts_provider).

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.tts_provider field.

zerocode

In the Config pane, set the agents.<alias>.tts_provider field.

zeroclaw config

zeroclaw config set agents.<alias>.tts_provider <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__tts_provider=
workspace AgentWorkspaceConfig · default {"access":{},"read_memory_from":[],"unrestricted_filesystem":false}

Per-agent workspace block ([agents.<alias>.workspace]). Holds the agent’s filesystem path, cross-agent access allowlist, filesystem-escape boolean, and cross-agent memory allowlist. Default is fully jailed (no cross-agent access). See crate::multi_agent::AgentWorkspaceConfig.

Set it on any surface:

Gateway dashboard

Open /config/agents and set the agents.<alias>.workspace field.

zerocode

In the Config pane, set the agents.<alias>.workspace field.

zeroclaw config

zeroclaw config set agents.<alias>.workspace <value>

Environment variable

Export the override (POSIX shells; drop into ~/.bashrc, ~/.zshrc, .env, or a Dockerfile). Replace <alias> with the literal alias:

export ZEROCLAW_agents__<alias>__workspace=

Where the references point

Most of an agent’s config is dotted aliases pointing at things configured in their own sections. The agent owns none of them, it points, and the same target can be shared by many agents. The field table above is the authoritative list; here is where each kind of reference leads:

  • Providers (Model Providers): the agent’s chat model and its companion text-to-speech, transcription, and classifier providers each name a [providers.models.<type>.<alias>] entry.
  • Profiles (Security & Autonomy): the risk profile sets the autonomy and sandbox posture; the runtime profile sets operational tuning (tool-iteration caps, budgets, timeouts, context limits).
  • Channels (Channels): the messaging surfaces the agent answers on. When two agents share a channel, a peer group decides whether they can address each other.
  • Bundles (Tools): reusable groups of skills, knowledge, and MCP servers attached by alias.
  • Cron: named scheduled jobs bound to the agent.

The per-agent overrides

Some of an agent’s config is not a reference but a per-agent block that overrides a global default: the workspace, memory, and identity. Those are the on-disk side of the join, covered in Filesystem components.

Validation

Config::validate() fails loud at startup if model_provider does not resolve to a configured provider entry, or if risk_profile does not resolve to a configured risk profile. A bad reference is caught before the agent runs, not silently ignored.