Agents
openclaw agents
Section titled “openclaw agents”Manage isolated agents (workspaces + auth + routing).
Related:
- Multi-agent routing
- Agent workspace
- Skills config: skill visibility configuration.
Examples
Section titled “Examples”openclaw agents listopenclaw agents list --bindingsopenclaw agents add work --workspace ~/.openclaw/workspace-workopenclaw agents add work --workspace ~/.openclaw/workspace-work --bind telegram:*openclaw agents add ops --workspace ~/.openclaw/workspace-ops --bind telegram:ops --non-interactiveopenclaw agents bindingsopenclaw agents bind --agent work --bind telegram:opsopenclaw agents unbind --agent work --bind telegram:opsopenclaw agents set-identity --workspace ~/.openclaw/workspace --from-identityopenclaw agents set-identity --agent main --avatar avatars/openclaw.pngopenclaw agents delete workRouting bindings
Section titled “Routing bindings”Use routing bindings to pin inbound channel traffic to a specific agent.
If you also want different visible skills per agent, configure agents.defaults.skills and agents.list[].skills in openclaw.json. See Skills config and Configuration reference.
List bindings:
openclaw agents bindingsopenclaw agents bindings --agent workopenclaw agents bindings --jsonAdd bindings:
openclaw agents bind --agent work --bind telegram:ops --bind discord:guild-aYou can also add bindings when creating an agent:
openclaw agents add work --workspace ~/.openclaw/workspace-work --bind telegram:* --bind discord:*If you omit accountId (--bind <channel>), OpenClaw resolves it from plugin setup hooks, forced account binding, or the channel’s configured account count.
If you omit --agent for bind or unbind, OpenClaw targets the current default agent.
--bind format
Section titled “--bind format”| Format | Meaning |
|---|---|
--bind <channel>:* | Match all accounts on the channel. |
--bind <channel>:<account> | Match one account. |
--bind <channel> | Match the default account only unless the CLI can safely resolve a plugin-specific account scope. |
Binding scope behavior
Section titled “Binding scope behavior”- A stored binding without
accountIdmatches the channel default account only. accountId: "*"is the channel-wide fallback (all accounts) and is less specific than an explicit account binding.- If the same agent already has a matching channel binding without
accountId, and you later bind with an explicit or resolvedaccountId, OpenClaw upgrades that existing binding in place instead of adding a duplicate.
Examples:
# match all accounts on the channelopenclaw agents bind --agent work --bind telegram:*
# match a specific accountopenclaw agents bind --agent work --bind telegram:ops
# initial channel-only bindingopenclaw agents bind --agent work --bind telegram
# later upgrade to account-scoped bindingopenclaw agents bind --agent work --bind telegram:alertsAfter the upgrade, routing for that binding is scoped to telegram:alerts. If you also want default-account routing, add it explicitly (for example --bind telegram:default).
Remove bindings:
openclaw agents unbind --agent work --bind telegram:opsopenclaw agents unbind --agent work --allunbind accepts either --all or one or more --bind values, not both.
Command surface
Section titled “Command surface”agents
Section titled “agents”Running openclaw agents with no subcommand is equivalent to openclaw agents list.
agents list
Section titled “agents list”Options:
--json--bindings: include full routing rules, not only per-agent counts/summaries
agents add [name]
Section titled “agents add [name]”Options:
--workspace <dir>--model <id>--agent-dir <dir>--bind <channel[:accountId]>(repeatable)--non-interactive--json
Notes:
- Passing any explicit add flags switches the command into the non-interactive path.
- Non-interactive mode requires both an agent name and
--workspace. mainis reserved and cannot be used as the new agent id.- In interactive mode, auth seeding copies only portable static profiles
(
api_keyand statictokenby default). OAuth refresh-token profiles remain available only by read-through inheritance from the realmainagent store. If the configured default agent is notmain, sign in separately for OAuth profiles on the new agent.
agents bindings
Section titled “agents bindings”Options:
--agent <id>--json
agents bind
Section titled “agents bind”Options:
--agent <id>(defaults to the current default agent)--bind <channel[:accountId]>(repeatable)--json
agents unbind
Section titled “agents unbind”Options:
--agent <id>(defaults to the current default agent)--bind <channel[:accountId]>(repeatable)--all--json
agents delete <id>
Section titled “agents delete <id>”Options:
--force--json
Notes:
maincannot be deleted.- Without
--force, interactive confirmation is required. - Workspace, agent state, and session transcript directories are moved to Trash, not hard-deleted.
- When the Gateway is reachable, deletion is sent through the Gateway so config and session-store cleanup share the same writer as runtime traffic. If the Gateway cannot be reached, the CLI falls back to the offline local path.
- If another agent’s workspace is the same path, inside this workspace, or contains this workspace,
the workspace is retained and
--jsonreportsworkspaceRetained,workspaceRetainedReason, andworkspaceSharedWith.
Identity files
Section titled “Identity files”Each agent workspace can include an IDENTITY.md at the workspace root:
- Example path:
~/.openclaw/workspace/IDENTITY.md set-identity --from-identityreads from the workspace root (or an explicit--identity-file)
Avatar paths resolve relative to the workspace root.
Set identity
Section titled “Set identity”set-identity writes fields into agents.list[].identity:
namethemeemojiavatar(workspace-relative path, http(s) URL, or data URI)
Options:
--agent <id>--workspace <dir>--identity-file <path>--from-identity--name <name>--theme <theme>--emoji <emoji>--avatar <value>--json
Notes:
--agentor--workspacecan be used to select the target agent.- If you rely on
--workspaceand multiple agents share that workspace, the command fails and asks you to pass--agent. - When no explicit identity fields are provided, the command reads identity data from
IDENTITY.md.
Load from IDENTITY.md:
openclaw agents set-identity --workspace ~/.openclaw/workspace --from-identityOverride fields explicitly:
openclaw agents set-identity --agent main --name "OpenClaw" --emoji "🦞" --avatar avatars/openclaw.pngConfig sample:
{ agents: { list: [ { id: "main", identity: { name: "OpenClaw", theme: "space lobster", emoji: "🦞", avatar: "avatars/openclaw.png", }, }, ], },}