
1. 为什么要在 OpenClaw 里接上 Claude Code如果你正在用 OpenClaw 跑多 Agent 协作大概率会遇到一个很具体的瓶颈日常开发任务都堆在 OpenClaw 里token 消耗飞快但遇到真正棘手的技术问题效果又不够稳最后还是得手动切到 Claude Code 去处理。我组织过一组模拟软件公司的 Agent最多的时候有 47 个平时只跟 CEO 角色沟通让它去调度其他 Agent 干活。跑下来发现OpenClaw 里的 coding agent 基本没怎么被用起来Claude 的调用量几乎为零可偏偏那些难啃的问题还是得靠 CC。问题就出在链路上OpenClaw 和 Claude Code 是两个独立的执行体前者不知道后者的存在后者也不会主动接管任务。ACPAgent Client Protocol就是为解决这类通信而生的标准它定义了代码编辑器与编码代理之间的交互方式。而 ACPX 是 ACP 的一个无头 CLI 实现专门用来让 OpenClaw 这类客户端通过结构化协议去调用 Claude Code实现双向任务委派、会话共享和并行工作流。说白了配好之后你在飞书聊天窗口里发消息对面不再是 OpenClaw 的某个 Agent而是直接连上了 Claude Code让它操作你所在机器的开发环境。这篇就聚焦这条链路怎么搭TaoToken 统一 Key 的 config.toml 与 settings.json 骨架、ACPX 插件安装、飞书会话建立以及一次端到端验证。适合已经在用 OpenClaw、想把手动切 CC 的动作自动化掉的开发者。2. TaoToken 前置统一 Key 与 API 通道在动 ACPX 之前先把 Key 和 API 通道理顺。OpenClaw 和 Claude Code 如果各自配一套 Key后面排查问题会非常痛苦所以建议统一走 TaoToken 的 API 通道一个 Key 覆盖两个执行体。TaoToken 的官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 注意这个地址后面不加任何 UTM 参数。你需要先去控制台创建一个 API Key然后把它同时写进 OpenClaw 的配置和 Claude Code 的 settings.json。这里有个容易踩的坑Claude Code 读取的是ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY这两个环境变量或者 settings.json 里的对应字段。如果你只改了 OpenClaw 的 config.tomlCC 那边还是走默认通道就会出现「OpenClaw 能调通、CC 报 401」的割裂现象。所以统一 Key 的意义不只是省事更是让 ACPX 转发请求时不会因为两套凭证打架。创建 Key 的入口在控制台的 API Keys 页面建议单独建一个给 ACPX 链路用的 Key方便后续按调用来源做区分。拿到 Key 之后先别急着配 ACPX把下面两段配置分别落到对应文件里再往下走。3. 可复制配置config.toml 与 settings.json 骨架3.1 OpenClaw 的 config.tomlOpenClaw 的配置核心是两件事让 acpx 插件被允许加载以及把 ACP 后端指向 acpx。下面这段可以直接抄注意permissionMode必须设成approve-all否则 Claude Code 拿不到权限什么也干不了。[plugins] allow [acpx] [plugins.entries.acpx] enabled true [plugins.entries.acpx.config] command acpx permissionMode approve-all [acp] enabled true backend acpx defaultAgent claude allowedAgents [claude, codex, cursor, gemini, pi]allowedAgents按你自己的实际情况裁剪用不到的先删掉减少会话建立时的探测开销。defaultAgent设成 claude这样飞书里/acp spawn不指定 agent 时默认就连 Claude Code。3.2 Claude Code 的 settings.jsonCC 这边要保证它走的是 TaoToken 的通道并且允许被 ACPX 以无头方式拉起。settings.json 放在~/.claude/settings.json骨架如下{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的_TaoToken_Key }, permissions: { allow: [Bash, Read, Write, Edit] } }permissions.allow里至少要放开 Bash、Read、Write、Edit不然 CC 被 ACPX 调起来之后连读文件都会被拦。如果你在 config.toml 里已经设了approve-all这里的权限列表是双保险建议保留。3.3 安装 acpx 插件与 npm 包acpx 分两层OpenClaw 的集成插件和实际干活的 npm 包。两个都装齐OpenClaw 才能无缝用上 ACP 能力。# 安装 OpenClaw 的 acpx 插件 openclaw plugins install openclaw/acpx # 确认插件已注册 openclaw plugins list # 安装 acpx npm 包实际功能实现层 npm install -g acpxlatest # 安装 acpx 的 skill 到 ~/.claude 下 npx acpxlatest --skill install acpx插件默认会落到~/.npm-global/lib/node_modules/openclaw/dist/extensions/acpx/用openclaw plugins list能看到 acpx 条目就说明装好了。npm 包则装在~/.npm-global/lib/node_modules/acpx。两条命令都跑完再重启一次 OpenClaw让插件和配置生效。4. 验证请求飞书里跑通一次端到端调用ACPX 有个明确限制它不能在 OpenClaw 的网页版聊天窗口里用必须在飞书里操作。所以验证动作全部在飞书机器人聊天窗口完成。第一步建立持久会话。在飞书窗口输入/acp spawn claude --mode persistent --thread auto--mode persistent保证会话不会因为一次空闲就断掉--thread auto让消息自动归到对应线程。执行后你这个飞书机器人就直连上 OpenClaw 所在机器的 Claude Code 了。注意之前你和 OpenClaw Agent 的对话历史CC 是不知道的除非你明确把上下文传给它。第二步查会话状态。输入/acp status正常会返回类似这样的结构session: agent:claude:acp:cee86339-9f98-4269-9fec-477a3a5bca6d backend: acpx agent: claude acpx session id: f8d9115f-3e61-4ea1-a552-a54898378698 sessionMode: persistent state: idle runtimeOptions: cwd/home/band/.openclaw/workspace capabilities: session/set_config_option, session/set_mode, session/status看到backend: acpx、agent: claude、sessionMode: persistent这三项说明链路已经通了。cwd是 CC 的工作目录后面它执行命令、读写文件都在这个目录下建议提前确认这个路径是你想要的工程目录。第三步发一条真实任务验证。直接在飞书里发一句让它干活的话比如「在当前目录建一个 hello.py打印当前时间然后运行它」。如果 CC 正常执行并返回结果说明从飞书到 ACPX 到 Claude Code 的整条链路已经跑通。这一步比看 status 更有说服力因为 status 只证明会话建立了真正发任务才能验证权限、工作目录、API 通道三者都对。第四步关闭会话。验证完记得收尾/acp close会收到Closed ACP session ... Removed 1 binding.的回复。关闭之后你在飞书里聊天又回到跟原来的 OpenClaw Agent 对话的状态。5. 本篇常见错排查5.1 status 显示 runtime: statusdead这是最常见的一种。/acp status返回里出现runtime: statusdead、summary: queue owner unavailable说明 ACPX 的运行时进程没起来或者已经退出。先确认acpx命令在 PATH 里能直接执行再检查 config.toml 里command acpx是否和实际安装路径一致。如果 npm 全局目录不在 PATH把command改成绝对路径比如/home/你的用户名/.npm-global/bin/acpx。5.2 Claude Code 拿不到权限任务卡住表现是会话建立了但发任务后 CC 一直不动或者报权限相关错误。根因通常是permissionMode没设成approve-all或者 settings.json 的permissions.allow里缺了 Bash/Write。两个地方都检查一遍改完重启 OpenClaw。5.3 飞书和网页窗口消息不互通这是 ACPX 的预期行为不是 bug。飞书渠道和网页渠道各自持有会话只有 Claude Code 能同时收到两边的消息两边互相看不到对方的内容。如果你需要跨渠道共享上下文得手动把关键信息在消息里带上别指望它自动同步。5.4 401 或鉴权失败如果 OpenClaw 侧正常、CC 侧报鉴权错误优先查 settings.json 里的ANTHROPIC_BASE_URL是不是https://taotoken.net/api以及 Key 有没有写错或过期。注意 API 地址不要带 UTM 参数带了可能导致路由异常。另外确认环境变量没有被 shell 里的旧值覆盖echo $ANTHROPIC_BASE_URL看一眼实际生效的值。5.5 会话建立后 cwd 不对CC 默认在~/.openclaw/workspace下干活如果你的工程在别的目录发任务时要么在指令里写绝对路径要么先让 CCcd过去。持久会话下 cwd 不会自动跟着你飞书里说的目录变这点要留意。6. 把链路固定下来长期编码与 Agent 场景一次验证跑通只是开始真正省事的是把这条链路固定成日常流程。如果你打算长期让 OpenClaw 通过 ACPX 调度 Claude Code 做编码任务建议把 Key 和通道统一管理避免每次换环境都重新配一遍。TaoToken 的 Coding Plan 适合这种长期编码和 Agent 协作场景一个 Key 覆盖多个执行体省掉来回切换凭证的麻烦。接入文档里有 config.toml 和 settings.json 的完整字段说明遇到本篇没覆盖的配置项可以去对照。如果你只是想先验证模型通道是否正常不涉及 ACPX可以直接在模型对话里发一条测试请求确认 Key 和 API 基址没问题再回来搭 ACPX 链路这样能把问题范围缩小。我自己的做法是先用模型对话确认 TaoToken 通道通再配 ACPX最后在飞书里发一个真实的小任务收尾。三步下来哪一环出问题一目了然比一上来就全套配置再排查要快得多。链路稳定之后飞书里发一句话就能让 Claude Code 在你机器上干活原来手动切 CC 的动作就彻底省掉了。