2026-01-15 06:12:54 +00:00
---
2026-02-26 02:36:56 -05:00
summary: "CLI reference for `openclaw agents` (list/add/delete/bindings/bind/unbind/set identity)"
2026-01-15 06:12:54 +00:00
read_when:
- You want multiple isolated agents (workspaces + routing + auth)
2026-01-31 16:04:03 -05:00
title: "agents"
2026-01-15 06:12:54 +00:00
---
2026-01-30 03:15:10 +01:00
# `openclaw agents`
2026-01-15 06:12:54 +00:00
Manage isolated agents (workspaces + auth + routing).
Related:
2026-01-31 21:13:13 +09:00
2026-01-15 06:12:54 +00:00
- Multi-agent routing: [Multi-Agent Routing ](/concepts/multi-agent )
- Agent workspace: [Agent workspace ](/concepts/agent-workspace )
2026-04-03 14:22:55 -04:00
- Skill visibility config: [Skills config ](/tools/skills-config )
2026-01-15 06:12:54 +00:00
## Examples
``` bash
2026-01-30 03:15:10 +01:00
openclaw agents list
2026-04-04 08:42:43 +01:00
openclaw agents list --bindings
2026-01-30 03:15:10 +01:00
openclaw agents add work --workspace ~/.openclaw/workspace-work
2026-04-04 08:42:43 +01:00
openclaw agents add ops --workspace ~/.openclaw/workspace-ops --bind telegram:ops --non-interactive
2026-02-26 02:36:56 -05:00
openclaw agents bindings
openclaw agents bind --agent work --bind telegram:ops
openclaw agents unbind --agent work --bind telegram:ops
2026-01-30 03:15:10 +01:00
openclaw agents set-identity --workspace ~/.openclaw/workspace --from-identity
openclaw agents set-identity --agent main --avatar avatars/openclaw.png
openclaw agents delete work
2026-01-15 06:12:54 +00:00
```
2026-01-22 05:21:47 +00:00
2026-02-26 02:36:56 -05:00
## Routing bindings
Use routing bindings to pin inbound channel traffic to a specific agent.
2026-04-03 14:22:55 -04:00
If you also want different visible skills per agent, configure
`agents.defaults.skills` and `agents.list[].skills` in `openclaw.json` . See
[Skills config ](/tools/skills-config ) and
2026-04-10 21:39:15 +01:00
[Configuration Reference ](/gateway/configuration-reference#agents-defaults-skills ).
2026-04-03 14:22:55 -04:00
2026-02-26 02:36:56 -05:00
List bindings:
``` bash
openclaw agents bindings
openclaw agents bindings --agent work
openclaw agents bindings --json
```
Add bindings:
``` bash
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.
2026-04-04 08:42:43 +01:00
If you omit `--agent` for `bind` or `unbind` , OpenClaw targets the current default agent.
2026-02-26 02:36:56 -05:00
### Binding scope behavior
- A binding without `accountId` matches 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 resolved `accountId` , OpenClaw upgrades that existing binding in place instead of adding a duplicate.
Example:
``` bash
# 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:
``` bash
openclaw agents unbind --agent work --bind telegram:ops
openclaw agents unbind --agent work --all
```
2026-04-04 08:42:43 +01:00
`unbind` accepts either `--all` or one or more `--bind` values, not both.
## Command surface
### `agents`
Running `openclaw agents` with no subcommand is equivalent to `openclaw agents list` .
### `agents list`
Options:
- `--json`
- `--bindings` : include full routing rules, not only per-agent counts/summaries
### `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` .
- `main` is reserved and cannot be used as the new agent id.
### `agents bindings`
Options:
- `--agent <id>`
- `--json`
### `agents bind`
Options:
- `--agent <id>` (defaults to the current default agent)
- `--bind <channel[:accountId]>` (repeatable)
- `--json`
### `agents unbind`
Options:
- `--agent <id>` (defaults to the current default agent)
- `--bind <channel[:accountId]>` (repeatable)
- `--all`
- `--json`
### `agents delete <id>`
Options:
- `--force`
- `--json`
Notes:
- `main` cannot be deleted.
- Without `--force` , interactive confirmation is required.
- Workspace, agent state, and session transcript directories are moved to Trash, not hard-deleted.
2026-01-22 05:21:47 +00:00
## Identity files
Each agent workspace can include an `IDENTITY.md` at the workspace root:
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
- Example path: `~/.openclaw/workspace/IDENTITY.md`
2026-01-22 05:21:47 +00:00
- `set-identity --from-identity` reads from the workspace root (or an explicit `--identity-file` )
Avatar paths resolve relative to the workspace root.
## Set identity
`set-identity` writes fields into `agents.list[].identity` :
2026-01-31 21:13:13 +09:00
2026-01-22 05:21:47 +00:00
- `name`
- `theme`
- `emoji`
- `avatar` (workspace-relative path, http(s) URL, or data URI)
2026-04-04 08:42:43 +01:00
Options:
- `--agent <id>`
- `--workspace <dir>`
- `--identity-file <path>`
- `--from-identity`
- `--name <name>`
- `--theme <theme>`
- `--emoji <emoji>`
- `--avatar <value>`
- `--json`
Notes:
- `--agent` or `--workspace` can be used to select the target agent.
- If you rely on `--workspace` and 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` .
2026-01-22 05:21:47 +00:00
Load from `IDENTITY.md` :
``` bash
2026-01-30 03:15:10 +01:00
openclaw agents set-identity --workspace ~/.openclaw/workspace --from-identity
2026-01-22 05:21:47 +00:00
```
Override fields explicitly:
``` bash
2026-01-30 03:15:10 +01:00
openclaw agents set-identity --agent main --name "OpenClaw" --emoji "🦞" --avatar avatars/openclaw.png
2026-01-22 05:21:47 +00:00
```
Config sample:
``` json5
{
agents: {
list: [
{
id: "main",
identity: {
2026-01-30 03:15:10 +01:00
name: "OpenClaw",
2026-01-22 05:21:47 +00:00
theme: "space lobster",
emoji: "🦞",
2026-01-31 21:13:13 +09:00
avatar: "avatars/openclaw.png",
},
},
],
},
2026-01-22 05:21:47 +00:00
}
```