Appearance
acp
运行 Agent Client Protocol (ACP) 桥接器,与 OpenClaw Gateway 通信。
该命令通过 stdio 以 ACP 协议与 IDE 交互,并将 Prompt 通过 WebSocket 转发到 Gateway。它维护 ACP 会话到 Gateway 会话键的映射关系。
openclaw acp 是一个 Gateway 支撑的 ACP 桥接器,而不是完整的 ACP 原生编辑器运行时。它专注于会话路由、Prompt 投递和基础流式更新。
兼容性矩阵
| ACP 功能区域 | 状态 | 说明 |
|---|---|---|
initialize、newSession、prompt、cancel | 已实现 | 核心桥接流程,通过 stdio 转发到 Gateway chat/send + abort。 |
listSessions、斜杠命令 | 已实现 | 会话列表基于 Gateway 会话状态;命令通过 available_commands_update 广播。 |
loadSession | 部分实现 | 将 ACP 会话重新绑定到 Gateway 会话键,并重放已存储的用户/助手文本历史。工具/系统历史尚未重建。 |
Prompt 内容(text、内嵌 resource、图片) | 部分实现 | 文本/资源被展平为聊天输入;图片作为 Gateway 附件处理。 |
| 会话模式 | 部分实现 | 支持 session/set_mode,桥接器暴露初始 Gateway 支撑的会话控制,包括思考级别、工具详细程度、推理、使用量详情和提升操作。更广泛的 ACP 原生模式/配置界面暂不在范围内。 |
| 会话信息和使用量更新 | 部分实现 | 桥接器从缓存的 Gateway 会话快照发出 session_info_update 和尽力而为的 usage_update 通知。使用量为近似值,仅在 Gateway token 总量被标记为新鲜时发送。 |
| 工具流式传输 | 部分实现 | tool_call/tool_call_update 事件包含原始 I/O、文本内容,以及 Gateway 工具参数/结果暴露时的尽力而为文件位置。内嵌终端和更丰富的 diff 原生输出尚未暴露。 |
每会话 MCP 服务器(mcpServers) | 不支持 | 桥接器模式拒绝每会话 MCP 服务器请求。请在 OpenClaw gateway 或 agent 上配置 MCP。 |
客户端文件系统方法(fs/read_text_file、fs/write_text_file) | 不支持 | 桥接器不调用 ACP 客户端文件系统方法。 |
客户端终端方法(terminal/*) | 不支持 | 桥接器不创建 ACP 客户端终端,也不通过工具调用传递终端 id。 |
| 会话计划/思考流式传输 | 不支持 | 桥接器目前只发出输出文本和工具状态,不发出 ACP plan 或思考更新。 |
已知限制
loadSession重放已存储的用户和助手文本历史,但不重建历史工具调用、系统通知或更丰富的 ACP 原生事件类型。- 如果多个 ACP 客户端共享同一 Gateway 会话键,事件和取消路由是尽力而为而非严格按客户端隔离。如果需要干净的编辑器本地回合,请使用默认的隔离
acp:<uuid>会话。 - Gateway 停止状态会被转换为 ACP 停止原因,但该映射不如完全原生的 ACP 运行时表达丰富。
- 初始会话控制目前只暴露 Gateway 旋钮的聚焦子集:思考级别、工具详细程度、推理、使用量详情和提升操作。模型选择和 exec-host 控制尚未作为 ACP 配置选项暴露。
session_info_update和usage_update来自 Gateway 会话快照,而非实时 ACP 原生运行时计量。使用量为近似值,不含成本数据,仅在 Gateway 将 token 总量数据标记为新鲜时发出。- 工具跟随数据是尽力而为的。桥接器可以暴露出现在已知工具参数/结果中的文件路径,但尚未发出 ACP 终端或结构化文件 diff。
用法
bash
openclaw acp
# 远程 Gateway
openclaw acp --url wss://gateway-host:18789 --token <token>
# 远程 Gateway(token 来自文件)
openclaw acp --url wss://gateway-host:18789 --token-file ~/.openclaw/gateway.token
# 附加到已有会话键
openclaw acp --session agent:main:main
# 按标签附加(标签必须已存在)
openclaw acp --session-label "support inbox"
# 第一个 Prompt 前重置会话键
openclaw acp --session agent:main:main --reset-sessionACP 客户端(调试)
使用内置 ACP 客户端在无 IDE 的情况下对桥接器做健全性检查。 它会启动 ACP 桥接器,让你以交互方式输入 Prompt。
bash
openclaw acp client
# 将启动的桥接器指向远程 Gateway
openclaw acp client --server-args --url wss://gateway-host:18789 --token-file ~/.openclaw/gateway.token
# 覆盖服务器命令(默认:openclaw)
openclaw acp client --server "node" --server-args openclaw.mjs acp --url ws://127.0.0.1:19001权限模型(客户端调试模式):
- 自动批准基于白名单,仅适用于受信任的核心工具 ID。
read自动批准的范围限于当前工作目录(设置了--cwd时使用其值)。- 未知/非核心工具名称、超出范围的读取和危险工具始终需要明确的 Prompt 审批。
- 服务器提供的
toolCall.kind被视为不受信任的元数据(不是授权来源)。
使用方法
当 IDE(或其他客户端)使用 Agent Client Protocol 并希望驱动 OpenClaw Gateway 会话时,使用 ACP。
- 确保 Gateway 正在运行(本地或远程)。
- 配置 Gateway 目标(通过配置或标志)。
- 将 IDE 配置为通过 stdio 运行
openclaw acp。
配置示例(持久化):
bash
openclaw config set gateway.remote.url wss://gateway-host:18789
openclaw config set gateway.remote.token <token>直接运行示例(不写入配置):
bash
openclaw acp --url wss://gateway-host:18789 --token <token>
# 本地进程安全性优先,推荐使用 token 文件
openclaw acp --url wss://gateway-host:18789 --token-file ~/.openclaw/gateway.token选择 Agent
ACP 不直接选择 agent。它通过 Gateway 会话键来路由。
使用 agent 作用域的会话键来定位特定 agent:
bash
openclaw acp --session agent:main:main
openclaw acp --session agent:design:main
openclaw acp --session agent:qa:bug-123每个 ACP 会话映射到单个 Gateway 会话键。一个 agent 可以有多个会话;ACP 默认使用隔离的 acp:<uuid> 会话,除非你覆盖键或标签。
桥接器模式不支持每会话 mcpServers。如果 ACP 客户端在 newSession 或 loadSession 期间发送它们,桥接器会返回明确的错误而不是静默忽略。
通过 acpx 使用(Codex、Claude 等 ACP 客户端)
如果你希望 Codex 或 Claude Code 等 coding agent 通过 ACP 与你的 OpenClaw 机器人通信,请使用 acpx 的内置 openclaw target。
典型流程:
- 运行 Gateway 并确保 ACP 桥接器可以访问它。
- 将
acpx openclaw指向openclaw acp。 - 指定你希望 coding agent 使用的 OpenClaw 会话键。
示例:
bash
# 向默认 OpenClaw ACP 会话发送一次性请求
acpx openclaw exec "Summarize the active OpenClaw session state."
# 用于后续回合的持久命名会话
acpx openclaw sessions ensure --name codex-bridge
acpx openclaw -s codex-bridge --cwd /path/to/repo \
"Ask my OpenClaw work agent for recent context relevant to this repo."如果你希望 acpx openclaw 每次都指向特定的 Gateway 和会话键,可在 ~/.acpx/config.json 中覆盖 openclaw agent 命令:
json
{
"agents": {
"openclaw": {
"command": "env OPENCLAW_HIDE_BANNER=1 OPENCLAW_SUPPRESS_NOTES=1 openclaw acp --url ws://127.0.0.1:18789 --token-file ~/.openclaw/gateway.token --session agent:main:main"
}
}
}对于本地 OpenClaw checkout,请使用直接的 CLI 入口点而非 dev runner,以保持 ACP 流的干净:
bash
env OPENCLAW_HIDE_BANNER=1 OPENCLAW_SUPPRESS_NOTES=1 node openclaw.mjs acp ...这是让 Codex、Claude Code 或其他 ACP 感知客户端从 OpenClaw agent 拉取上下文信息而无需抓取终端的最简便方式。
Zed 编辑器配置
在 ~/.config/zed/settings.json 中添加自定义 ACP agent(或使用 Zed 的 Settings UI):
json
{
"agent_servers": {
"OpenClaw ACP": {
"type": "custom",
"command": "openclaw",
"args": ["acp"],
"env": {}
}
}
}指向特定 Gateway 或 agent:
json
{
"agent_servers": {
"OpenClaw ACP": {
"type": "custom",
"command": "openclaw",
"args": [
"acp",
"--url",
"wss://gateway-host:18789",
"--token",
"<token>",
"--session",
"agent:design:main"
],
"env": {}
}
}
}在 Zed 中打开 Agent 面板并选择"OpenClaw ACP"开始一个线程。
会话映射
默认情况下,ACP 会话会获得一个带有 acp: 前缀的隔离 Gateway 会话键。 要复用已知会话,请传入会话键或标签:
--session <key>:使用特定的 Gateway 会话键。--session-label <label>:通过标签解析已存在的会话。--reset-session:为该键创建全新的会话 id(同一键,新的对话记录)。
如果你的 ACP 客户端支持元数据,可以按会话覆盖:
json
{
"_meta": {
"sessionKey": "agent:main:main",
"sessionLabel": "support inbox",
"resetSession": true
}
}了解更多会话键信息:/openclaw/concepts/session。
选项
--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 前添加工作目录前缀。--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 运行时后端子进程会收到
OPENCLAW_SHELL=acp,可用于上下文特定的 shell/profile 规则。 openclaw acp client在启动的桥接器进程上设置OPENCLAW_SHELL=acp-client。
acp client 选项
--cwd <dir>:ACP 会话的工作目录。--server <command>:ACP 服务器命令(默认:openclaw)。--server-args <args...>:传递给 ACP 服务器的额外参数。--server-verbose:在 ACP 服务器上启用详细日志。--verbose, -v:启用详细客户端日志。