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.
channels
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
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
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=
identity
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
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
MCP bundle aliases. Each entry references mcp_bundles[key], itself a named group of MCP servers; agents pick which bundles to load.
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
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
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=
risk_profile
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
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
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=
transcription_provider
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
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
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.