openclaw acp 通过 stdio 为 IDE 提供 ACP,并通过 WebSocket 将提示转发到 Gateway 网关,同时保持 ACP 会话映射到 Gateway 网关会话键。它是由 Gateway 网关支持的 ACP 桥接器,而不是完整的 ACP 原生编辑器运行时:它专注于会话路由、提示投递和流式更新。
如果你希望外部 MCP 客户端直接与 OpenClaw 渠道对话通信,而不是托管 ACP harness 会话,请改用 openclaw mcp serve。
这不是什么
openclaw acp 表示 OpenClaw 充当 ACP 服务器:IDE 或 ACP 客户端连接到 OpenClaw,然后 OpenClaw 将该工作转发到 Gateway 网关会话中。
这不同于 ACP 智能体,后者由 OpenClaw 通过 acpx 运行外部 harness,例如 Codex 或 Claude Code。
快速规则:
- 编辑器/客户端想通过 ACP 与 OpenClaw 通信:使用
openclaw acp - OpenClaw 应该将 Codex/Claude/Gemini 作为 ACP harness 启动:使用
/acp spawn和 ACP 智能体
兼容性矩阵
| ACP 区域 | 状态 | 说明 |
|---|---|---|
initialize, newSession, prompt, cancel | 已实现 | 通过 stdio 到 Gateway 网关 chat/send + abort 的核心桥接流程。 |
listSessions, slash 命令 | 已实现 | 会话列表基于 Gateway 网关会话状态工作,支持有界游标分页;当 Gateway 网关会话行携带工作区元数据时支持 cwd 过滤;命令通过 available_commands_update 宣告。 |
| 会话血缘元数据 | 已实现 | 会话列表和会话信息快照在 _meta 中包含 OpenClaw 父子血缘,以便 ACP 客户端无需私有 Gateway 网关旁路通道即可渲染子智能体图。 |
resumeSession, closeSession | 已实现 | Resume 会将 ACP 会话重新绑定到现有 Gateway 网关会话,而不重放历史。Close 会取消活动桥接工作,将待处理提示解析为已取消,并释放桥接会话状态。 |
loadSession | 部分支持 | 将 ACP 会话重新绑定到 Gateway 网关会话键,并为桥接器创建的会话重放 ACP 事件账本历史。较旧/无账本会话会回退到存储的用户/助手文本。 |
提示内容(text、嵌入的 resource、图像) | 部分支持 | 文本/资源会展平成聊天输入;图像会变成 Gateway 网关附件。 |
| 会话模式 | 部分支持 | 支持 session/set_mode;桥接器公开由 Gateway 网关支持的会话控制,用于思考级别、工具详细程度、推理、用量详情和提升权限操作。更广泛的 ACP 原生模式/配置界面仍不在范围内。 |
| 思考流式传输 | 已实现 | 模型思考内容作为 agent_thought_chunk 会话更新流式传输。不会发出 ACP 原生会话计划。 |
| 会话信息和用量更新 | 部分支持 | 桥接器会从缓存的 Gateway 网关会话快照发出 session_info_update 和尽力而为的 usage_update 通知。用量是近似值,并且仅在 Gateway 网关令牌总数标记为新鲜时发送。 |
| 工具流式传输 | 部分支持 | 当 Gateway 网关工具参数/结果暴露它们时,tool_call/tool_call_update 事件会包含原始 I/O、文本内容和尽力而为的文件位置。不会暴露嵌入式终端和更丰富的 diff 原生输出。 |
| Exec 审批 | 部分支持 | 活动 ACP 提示轮次期间的 Gateway 网关 exec 审批提示会通过 session/request_permission 中继到 ACP 客户端。 |
每会话 MCP 服务器(mcpServers) | 不支持 | 桥接模式会拒绝每会话 MCP 服务器请求。请改为在 OpenClaw Gateway 网关或智能体上配置 MCP。 |
客户端文件系统方法(fs/read_text_file, fs/write_text_file) | 不支持 | 桥接器不会调用 ACP 客户端文件系统方法。 |
客户端终端方法(terminal/*) | 不支持 | 桥接器不会创建 ACP 客户端终端,也不会通过工具调用流式传输终端 ID。 |
已知限制
loadSession仅对桥接器创建的会话重放完整 ACP 事件账本历史。较旧/无账本会话使用转录回退,不会重建历史工具调用或系统通知。- 如果多个 ACP 客户端共享同一个 Gateway 网关会话键,事件和取消路由是尽力而为,而不是严格按客户端隔离。当你需要干净的编辑器本地轮次时,优先使用默认隔离的
acp-bridge:<uuid>会话。 - Gateway 网关停止状态会转换为 ACP 停止原因,但该映射不如完整 ACP 原生运行时那样有表达力。
- 会话控制公开 Gateway 网关旋钮的聚焦子集:思考级别、工具详细程度、推理、用量详情和提升权限操作。模型选择和 exec 主机控制不会作为 ACP 配置选项暴露。
session_info_update和usage_update派生自 Gateway 网关会话快照,而不是实时 ACP 原生运行时计量。用量是近似值,不携带成本数据,并且仅在 Gateway 网关将总令牌数据标记为新鲜时发出。- 工具跟随数据是尽力而为:桥接器会暴露出现在已知工具参数/结果中的文件路径,但不会发出 ACP 终端或结构化文件 diff。
- Exec 审批中继仅限于活动 ACP 提示轮次;来自其他 Gateway 网关会话的审批会被忽略。
用法
ACP 客户端(调试)
使用内置 ACP 客户端在没有 IDE 的情况下对桥接器做完整性检查。它会生成 ACP 桥接器,并允许你以交互方式输入提示。- 自动审批基于允许列表,并且仅适用于受信任的核心工具 ID。
read自动审批限定在当前工作目录范围内(设置时为--cwd)。- ACP 仅自动审批狭窄的只读类别:活动 cwd 下的限定范围
read调用,以及只读搜索工具(search、web_search、memory_search)。未知/非核心工具、范围外读取、具备 exec 能力的工具、控制平面工具、变更型工具和交互式流程始终需要显式提示审批。 - 服务器提供的
toolCall.kind会被视为不受信任的元数据,而不是授权来源。 - 此 ACP 桥接策略独立于 ACPX harness 权限。如果你通过
acpx后端运行 OpenClaw,plugins.entries.acpx.config.permissionMode=approve-all是该 harness 会话的破窗式 “yolo” 开关。
协议冒烟测试
对于协议级调试,请使用隔离状态启动 Gateway 网关,并用 ACP JSON-RPC 客户端通过 stdio 驱动openclaw acp。覆盖 initialize、session/new、带绝对 cwd 的 session/list、session/resume、session/close、重复 close 和缺失 resume。
证明应包含宣告的生命周期能力、由 Gateway 网关支持的会话行、更新通知以及 Gateway 网关 sessions.list 日志:
openclaw gateway call sessions.list 用作唯一 ACP 证明。该 CLI 路径可能请求新鲜令牌操作员权限范围升级;ACP 桥接正确性由 ACP stdio 帧加 Gateway 网关 sessions.list 日志证明。
如何使用它
当 IDE(或其他客户端)使用 Agent Client Protocol,并且你希望它驱动 OpenClaw Gateway 网关会话时,请使用 ACP。- 确保 Gateway 网关正在运行(本地或远程)。
- 配置 Gateway 网关目标(配置或标志)。
- 将你的 IDE 指向通过 stdio 运行
openclaw acp。
选择智能体
ACP 不会直接选择智能体。它按 Gateway 网关会话键进行路由。使用智能体范围的会话键来定位特定智能体:acp-bridge:<uuid> 会话。
每会话 mcpServers 在桥接模式下不受支持。如果 ACP 客户端在 newSession 或 loadSession 期间发送它们,桥接会返回明确错误,而不是静默忽略。
如果你希望 ACPX 支持的会话能看到 OpenClaw 插件工具,或 cron 等选定的内置工具,请启用 Gateway 网关侧的 ACPX MCP 桥接,而不是尝试传递每会话 mcpServers。参见 ACP 智能体 和 OpenClaw 工具 MCP 桥接。
从 acpx 使用(Codex、Claude、其他 ACP 客户端)
如果你希望 Codex 或 Claude Code 等编码智能体通过 ACP 与你的 OpenClaw bot 通信,请使用带有内置 openclaw 目标的 acpx。
典型流程:
- 运行 Gateway 网关,并确保 ACP 桥接可以访问它。
- 将
acpx openclaw指向openclaw acp。 - 指定你希望编码智能体使用的 OpenClaw 会话键。
acpx openclaw 每次都指向特定的 Gateway 网关和会话键,请在 ~/.acpx/config.json 中覆盖 openclaw 智能体命令:
Zed 编辑器设置
在~/.config/zed/settings.json 中添加自定义 ACP 智能体(或使用 Zed 的设置 UI):
会话映射
默认情况下,ACP 桥接会话会获得一个带有acp-bridge: 前缀的隔离 Gateway 网关会话键。这些普通模型桥接会话是合成且可丢弃的:它们会受到陈旧条目清理影响,并且不会被视为受保护的人类对话界面。要复用已知会话,请传递会话键或标签:
--session <key>:使用特定 Gateway 网关会话键。--session-label <label>:按标签解析现有会话。--reset-session:为该键铸造新的会话 ID(相同键,新的 transcript)。
选项
--url <url>:Gateway 网关 WebSocket URL(配置后默认为gateway.remote.url)。--token <token>:Gateway 网关认证 token。--token-file <path>:从文件读取 Gateway 网关认证 token。--password <password>:Gateway 网关认证密码。--password-file <path>:从文件读取 Gateway 网关认证密码。--session <key>:默认会话键。--session-label <label>:要解析的默认会话标签。--require-existing:如果会话键/标签不存在则失败。--reset-session:首次使用前重置会话键。--no-prefix-cwd:不要在 prompt 前加上工作目录。--provenance <off|meta|meta+receipt>:包含 ACP provenance 元数据或 receipt。--verbose, -v:向 stderr 输出详细日志。
--token和--password在某些系统上的本地进程列表中可能可见。优先使用--token-file/--password-file或环境变量(OPENCLAW_GATEWAY_TOKEN、OPENCLAW_GATEWAY_PASSWORD)。- Gateway 网关认证解析遵循其他 Gateway 网关客户端使用的共享契约:
- 本地模式:env(
OPENCLAW_GATEWAY_*)然后是gateway.auth.*,仅在未设置gateway.auth.*时回退到gateway.remote.*(已配置但未解析的本地 SecretRef 会失败关闭,而不是静默回退) - 远程模式:
gateway.remote.*,并按远程优先级规则使用 env/config 回退 --url可安全覆盖,并且不会复用隐式 config/env 凭据;请传递显式--token/--password(或文件变体)
- 本地模式:env(
acp client 选项
--cwd <dir>:ACP 会话的工作目录。--server <command>:ACP 服务器命令(默认:openclaw)。--server-args <args...>:传递给 ACP 服务器的额外参数。--server-verbose:启用 ACP 服务器上的详细日志。--verbose, -v:详细客户端日志。openclaw acp client会在派生的桥接进程上设置OPENCLAW_SHELL=acp-client,可用于特定上下文的 shell/profile 规则。