docs/cli/agents.md
openclaw agentsManage isolated agents (workspaces + auth + routing).
Related:
openclaw agents list
openclaw agents list --bindings
openclaw agents add work --workspace ~/.openclaw/workspace-work
openclaw agents add ops --workspace ~/.openclaw/workspace-ops --bind telegram:ops --non-interactive
openclaw agents bindings
openclaw agents bind --agent work --bind telegram:ops
openclaw agents unbind --agent work --bind telegram:ops
openclaw agents set-identity --workspace ~/.openclaw/workspace --from-identity
openclaw agents set-identity --agent main --avatar avatars/openclaw.png
openclaw agents delete work
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 bindings
openclaw agents bindings --agent work
openclaw agents bindings --json
Add bindings:
openclaw agents bind --agent work --bind telegram:ops --bind discord:guild-a
If you omit accountId (--bind <channel>), OpenClaw resolves it from channel defaults and plugin setup hooks when available.
If you omit --agent for bind or unbind, OpenClaw targets the current default agent.
accountId matches the channel default account only.accountId: "*" is the channel-wide fallback (all accounts) and is less specific than an explicit account binding.accountId, and you later bind with an explicit or resolved accountId, OpenClaw upgrades that existing binding in place instead of adding a duplicate.Example:
# initial channel-only binding
openclaw agents bind --agent work --bind telegram
# later upgrade to account-scoped binding
openclaw agents bind --agent work --bind telegram:ops
After the upgrade, routing for that binding is scoped to telegram:ops. If you also want default-account routing, add it explicitly (for example --bind telegram:default).
Remove bindings:
openclaw agents unbind --agent work --bind telegram:ops
openclaw agents unbind --agent work --all
unbind accepts either --all or one or more --bind values, not both.
agentsRunning openclaw agents with no subcommand is equivalent to openclaw agents list.
agents listOptions:
--json--bindings: include full routing rules, not only per-agent counts/summariesagents add [name]Options:
--workspace <dir>--model <id>--agent-dir <dir>--bind <channel[:accountId]> (repeatable)--non-interactive--jsonNotes:
--workspace.main is reserved and cannot be used as the new agent id.api_key and static token by default). OAuth refresh-token profiles remain
available only by read-through inheritance from the real main agent store.
If the configured default agent is not main, sign in separately for OAuth
profiles on the new agent.agents bindingsOptions:
--agent <id>--jsonagents bindOptions:
--agent <id> (defaults to the current default agent)--bind <channel[:accountId]> (repeatable)--jsonagents unbindOptions:
--agent <id> (defaults to the current default agent)--bind <channel[:accountId]> (repeatable)--all--jsonagents delete <id>Options:
--force--jsonNotes:
main cannot be deleted.--force, interactive confirmation is required.--json reports workspaceRetained,
workspaceRetainedReason, and workspaceSharedWith.Each agent workspace can include an IDENTITY.md at the workspace root:
~/.openclaw/workspace/IDENTITY.mdset-identity --from-identity reads from the workspace root (or an explicit --identity-file)Avatar paths resolve relative to the workspace root.
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>--jsonNotes:
--agent or --workspace can be used to select the target agent.--workspace and multiple agents share that workspace, the command fails and asks you to pass --agent.IDENTITY.md.Load from IDENTITY.md:
openclaw agents set-identity --workspace ~/.openclaw/workspace --from-identity
Override fields explicitly:
openclaw agents set-identity --agent main --name "OpenClaw" --emoji "🦞" --avatar avatars/openclaw.png
Config sample:
{
agents: {
list: [
{
id: "main",
identity: {
name: "OpenClaw",
theme: "space lobster",
emoji: "🦞",
avatar: "avatars/openclaw.png",
},
},
],
},
}