智能体协调
ACP 智能体(agent)
Agent Client Protocol (ACP) 会话让 OpenClaw 能够通过 ACP 后端插件运行外部编码工具(如 Pi、Claude Code、Codex、OpenCode 和 Gemini CLI)。当你用自然语言让 OpenClaw "在 Codex 中运行这个"或"在话题中启动 Claude Code"时,OpenClaw 会把请求路由到 ACP 运行时,而不是原生的子智能体运行时。
快速操作手册
这是一个实用的 /acp 操作速查流程:
- 创建会话:
/acp spawn codex --mode persistent --thread auto
- 在绑定的话题中工作(或直接指定会话键)。
- 查看运行时状态:
/acp status
- 按需调整运行时选项:
/acp model <provider/model>/acp permissions/acp timeout
- 在不替换上下文的情况下引导正在运行的会话:
/acp steer tighten logging and continue
- 结束工作:
/acp cancel(停止当前轮次),或/acp close(关闭会话并移除绑定)
用户快速入门
想象一下,你可以直接用自然语言来控制外部编码工具:
- "在这个话题里启动一个持久的 Codex 会话,让它专注处理这个任务。"
- "用一次性 Claude Code ACP 会话运行这个,然后总结结果。"
- "在这个话题里用 Gemini CLI 处理这个任务,后续跟进也保持在同一个话题。"
OpenClaw 会帮你完成这些步骤:
- 选择
runtime: "acp"。 - 解析你要用的编码工具(
agentId,比如codex)。 - 如果需要话题绑定且当前频道支持,就把 ACP 会话绑定到该话题。
- 后续的话题消息会自动路由到同一个 ACP 会话,直到你取消焦点、关闭或会话过期。
ACP 与子智能体的区别
简单来说:想要外部编码工具的运行时,用 ACP;想要 OpenClaw 原生的委托运行,用子智能体。
| 方面 | ACP 会话 | 子智能体运行 |
|---|---|---|
| 运行时 | ACP 后端插件(如 acpx) | OpenClaw 原生子智能体运行时 |
| 会话键 | agent::acp: | agent::subagent: |
| 主要命令 | /acp ... | /subagents ... |
| 创建工具 | sessions_spawn 并设置 runtime:"acp" | sessions_spawn(默认运行时) |
相关内容请参阅子智能体。
话题绑定会话(跨频道通用)
当频道适配器启用了话题绑定功能,ACP 会话就可以绑定到特定话题:
- OpenClaw 把话题绑定到目标 ACP 会话。
- 该话题中的后续消息会路由到绑定的 ACP 会话。
- ACP 的输出会传回同一个话题。
- 取消焦点、关闭、归档、空闲超时或达到最大存活时间都会移除绑定。
话题绑定的支持情况取决于具体的适配器。如果当前频道适配器不支持话题绑定,OpenClaw 会返回清晰的"不支持/不可用"提示。启用话题绑定 ACP 需要这些功能标志:
acp.enabled=trueacp.dispatch.enabled默认开启(设为false可暂停 ACP 分发)- 频道适配器需要启用 ACP 话题创建标志(各适配器配置不同)
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
支持话题绑定的频道
- 任何具备会话/话题绑定能力的频道适配器。
- 目前内置支持的有:
- Discord 话题/频道
- Telegram 话题(群组/超级群组的论坛话题,以及私信话题)
- 插件频道可以通过相同的绑定接口添加支持。
频道特定配置
对于需要长期运行的工作流,你可以在顶层 bindings[] 条目中配置持久的 ACP 绑定。
绑定模型
bindings 配置项用来定义持久的 ACP 对话绑定:
bindings[].type="acp"—— 标记这是一个持久的 ACP 对话绑定。bindings[].match—— 指定目标对话:- Discord 频道或话题:
match.channel="discord"+match.peer.id="" - Telegram 论坛话题:
match.channel="telegram"+match.peer.id=":topic:"
- Discord 频道或话题:
bindings[].agentId—— 所属的 OpenClaw 智能体 ID。bindings[].acp下可以设置可选的 ACP 覆盖配置:mode(persistent或oneshot)labelcwdbackend
每个智能体的运行时默认值
使用 agents.list[].runtime 可以为每个智能体统一设置 ACP 默认值:
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agent(编码工具 ID,如codex或claude)agents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
ACP 绑定会话的配置覆盖优先级:
bindings[].acp.*(最高优先级)agents.list[].runtime.acp.*- 全局 ACP 默认值(如
acp.backend)
配置示例:
{
agents: {
list: [
{
id: "codex",
runtime: {
type: "acp",
acp: {
agent: "codex",
backend: "acpx",
mode: "persistent",
cwd: "/workspace/openclaw",
},
},
},
{
id: "claude",
runtime: {
type: "acp",
acp: { agent: "claude", backend: "acpx", mode: "persistent" },
},
},
],
},
bindings: [
{
type: "acp",
agentId: "codex",
match: {
channel: "discord",
accountId: "default",
peer: { kind: "channel", id: "222222222222222222" },
},
acp: { label: "codex-main" },
},
{
type: "acp",
agentId: "claude",
match: {
channel: "telegram",
accountId: "default",
peer: { kind: "group", id: "-1001234567890:topic:42" },
},
acp: { cwd: "/workspace/repo-b" },
},
{
type: "route",
agentId: "main",
match: { channel: "discord", accountId: "default" },
},
{
type: "route",
agentId: "main",
match: { channel: "telegram", accountId: "default" },
},
],
channels: {
discord: {
guilds: {
"111111111111111111": {
channels: {
"222222222222222222": { requireMention: false },
},
},
},
},
telegram: {
groups: {
"-1001234567890": {
topics: { "42": { requireMention: false } },
},
},
},
},
}
运行时行为说明:
- OpenClaw 会在使用前确保配置的 ACP 会话存在。
- 该频道或话题中的消息会路由到配置的 ACP 会话。
- 在绑定的对话中,
/new和/reset会在原地重置同一个 ACP 会话键。 - 临时运行时绑定(比如话题聚焦流程创建的)在存在时仍然生效。
启动 ACP 会话
通过 sessions_spawn
从智能体轮次或工具调用中启动 ACP 会话时,设置 runtime: "acp":
{
"task": "Open the repo and summarize failing tests",
"runtime": "acp",
"agentId": "codex",
"thread": true,
"mode": "session"
}
注意事项:
runtime默认是subagent,所以 ACP 会话必须显式设置runtime: "acp"。- 如果省略
agentId,OpenClaw 会使用配置中的acp.defaultAgent。 mode: "session"需要thread: true来保持持久的绑定对话。
接口参数详解:
task(必需):发送给 ACP 会话的初始提示。runtime(ACP 必需):必须是"acp"。agentId(可选):ACP 目标编码工具 ID。如果未设置,会回退到acp.defaultAgent。thread(可选,默认false):请求话题绑定流程(在支持的地方)。mode(可选):run(一次性)或session(持久)。- 默认是
run - 如果
thread: true且省略 mode,OpenClaw 可能根据运行时路径默认采用持久行为 mode: "session"需要thread: true
- 默认是
cwd(可选):请求的运行时工作目录(由后端/运行时策略验证)。label(可选):操作员可见的标签,用于会话/横幅文本。streamTo(可选):设置为"parent"可以把初始 ACP 运行进度摘要作为系统事件流式传回请求者会话。- 可用时,响应会包含
streamLogPath,指向会话级别的 JSONL 日志(.acp-stream.jsonl),你可以跟踪它获取完整的转发历史。
- 可用时,响应会包含
沙盒兼容性
ACP 会话目前运行在主机运行时上,而不是 OpenClaw 沙盒内。这带来了一些限制:
- 如果请求者会话是沙盒化的,ACP 创建会被阻止。
- 错误信息:
Sandboxed sessions cannot spawn ACP sessions because runtime="acp" runs on the host. Use runtime="subagent" from sandboxed sessions.
- 错误信息:
sessions_spawn设置runtime: "acp"时不支持sandbox: "require"。- 错误信息:
sessions_spawn sandbox="require" is unsupported for runtime="acp" because ACP sessions run outside the sandbox. Use runtime="subagent" or sandbox="inherit".
- 错误信息:
如果你需要沙盒强制执行,请使用 runtime: "subagent"。
通过 /acp 命令
需要更直接的控制时,可以用 /acp spawn 命令:
/acp spawn codex --mode persistent --thread auto
/acp spawn codex --mode oneshot --thread off
/acp spawn codex --thread here
主要标志说明:
--mode persistent|oneshot--thread auto|here|off--cwd <absolute-path>--label
详情请参阅斜杠命令。
会话目标解析
大多数 /acp 命令接受可选的会话目标参数(session-key、session-id 或 session-label)。解析顺序如下:
- 显式指定的目标参数(或
/acp steer的--session标志)- 先尝试匹配会话键
- 再尝试匹配 UUID 格式的会话 ID
- 最后尝试匹配标签
- 当前话题绑定(如果当前对话/话题绑定了 ACP 会话)
- 当前请求者会话作为回退
如果无法解析到任何目标,OpenClaw 会返回明确的错误提示(Unable to resolve session target: ...)。
创建会话的话题模式
/acp spawn 支持 --thread auto|here|off 三种模式:
| 模式 | 行为 |
|---|---|
auto | 如果在活动话题中:绑定该话题。如果不在话题中:在支持时创建/绑定子话题。 |
here | 要求当前处于活动话题中;如果不在话题中则失败。 |
off | 不绑定。会话以未绑定状态启动。 |
注意事项:
- 在不支持话题绑定的界面上,默认行为相当于
off。 - 话题绑定创建需要频道策略支持:
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
ACP 控制命令
完整的命令列表:
/acp spawn/acp cancel/acp steer/acp close/acp status/acp set-mode/acp set/acp cwd/acp permissions/acp timeout/acp model/acp reset-options/acp sessions/acp doctor/acp install
/acp status 会显示当前有效的运行时选项,以及(如果可用)运行时级别和后端级别的会话标识符。部分控制命令依赖后端能力。如果后端不支持某个控制,OpenClaw 会返回明确的"不支持该控制"错误。
ACP 命令速查表
| 命令 | 功能 | 示例 |
|---|---|---|
/acp spawn | 创建 ACP 会话;可选话题绑定。 | /acp spawn codex --mode persistent --thread auto --cwd /repo |
/acp cancel | 取消目标会话中正在进行的轮次。 | /acp cancel agent:codex:acp: |
/acp steer | 向运行中的会话发送引导指令。 | /acp steer --session support inbox prioritize failing tests |
/acp close | 关闭会话并解除话题绑定。 | /acp close |
/acp status | 显示后端、模式、状态、运行时选项、能力。 | /acp status |
/acp set-mode | 设置目标会话的运行时模式。 | /acp set-mode plan |
/acp set | 通用运行时配置选项写入。 | /acp set model openai/gpt-5.2 |
/acp cwd | 设置运行时工作目录覆盖。 | /acp cwd /Users/user/Projects/repo |
/acp permissions | 设置审批策略配置。 | /acp permissions strict |
/acp timeout | 设置运行时超时(秒)。 | /acp timeout 120 |
/acp model | 设置运行时模型覆盖。 | /acp model anthropic/claude-opus-4-5 |
/acp reset-options |