ACP Claude Code 集成
通过 ACP 从 OpenClaw 中 spawn Claude Code 实例,实现从聊天界面调用 Claude Code 编程能力。
最终成功配置
~/.acpx/config.json→ claude override 指向 proxy 脚本~/.acpx/claude-proxy.sh→ 调用claude-agent-acp(npx -y @zed-industries/claude-agent-acp)+ 设置ANTHROPIC_BASE_URL=http://127.0.0.1:4819走本地代理- Clawline 插件 → 已补上
resolveInboundConversation(见 clawline-thread-support) - Spawn 方式 →
sessions_spawn(runtime: "acp", thread: true) - 工作目录 →
/Users/leway/Projects/clawline
踩坑记录
1️⃣ 适配器脚本错误
- ❌
claude-proxy.sh用claude --bare(普通 CLI),收到 ACP JSON-RPC 握手直接当问题回答 - ✅ 改成调用
claude-agent-acp
2️⃣ API 余额问题
- ❌ 删掉 config override 后走了 Anthropic 官方 API,余额不够
- ✅ proxy 脚本保留
ANTHROPIC_BASE_URL=http://127.0.0.1:4819走本地 copilot-anthropic-proxy
3️⃣ Clawline thread binding
- ❌ clawline 插件缺少
resolveInboundConversation,ACP spawn 报thread_binding_invalid - ✅ 补上方法后重启 gateway 生效
4️⃣ agentId 提取失败
- ❌ ACP 子代理完成后 clawline outbound 无法提取 agentId → 消息发不出去
- ✅ 新增多策略 fallback + 兜底返回 ‘main’
5️⃣ bashrc 非交互式 guard 吞掉 ANTHROPIC env(2026-04-26)
- 症状:
~/.bashrc已写入ANTHROPIC_BASE_URL=http://127.0.0.1:4819+ANTHROPIC_API_KEY,但 ACPclaude-code-testspawn 0 token 立即失败(“Internal error” / “Not logged in”) - 根因:
~/.bashrc顶部有case $- in *i*) ;; *) return;; esac— 非交互式 shell 直接 return,后面的export全部跳过。ACP 子进程用的是非交互式 shell,env 注入失效 - 修法:把那两行
export移到~/.profile,或放到 bashrc 的 guard 之前;手动export后 spawn 直接成功(中文回复正常 ✅) - 教训:以后 Claude Code 子进程相关的 env 一律放
~/.profile而非~/.bashrc
6️⃣ CLI 老版本硬编码 thinking.type: enabled → 4.7/4.6 模型 400(2026-05-09 ottor-laptop)
- 症状:
claude --model claude-opus-4.7 --effort high -p ...报HTTP 400: "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort"。换claude-sonnet-4.6同错。一开始误以为--effort不被新模型接受 → 错怪 effort - 根因:装的是 Claude Code CLI 2.1.114,CLI 内部硬编码往请求里塞
thinking.type: "enabled",但 Opus 4.7 / Sonnet 4.6 这批新模型只接受adaptive。claude --help里只暴露--effort,没暴露thinking.type开关 - 修法:升级 CLI 到 2.1.138(
claude update或npm i -g @anthropic-ai/claude-code@latest),新版按模型自动切adaptive。升级后同 prompt 重跑 4.7 直接exit 0 - 教训:模型相关 400 报错优先看 CLI 版本而不是怀疑 flag;新模型支持需要 CLI 同步升级
Claude Code 运行环境(fires 机器)
04-13 检查发现 4 个活跃 Claude Code 实例:
- clawline/browser-agent CLI × 2
- ralph-coding VSCode
- clawline CLI(40 个 subagent 历史,闲置等待指令)
全局设置:全权限 allow: ["*"]、claude-opus-4-6[1m]、Chinese、max effort。
04-16 最新状态
ACP thread 功能正常,测试通过。
Hermes 侧 delegate_task(acp_command=“claude”)(04-13)
Hermes Agent 通过 delegate_task(acp_command="claude") 直接调起 Claude Code 子进程做编码任务。相关 PR:#8241。
当前流程:
delegate_tool.py检测到acp_command→ 路由到CopilotACPClientclaude -p "<task>"启动子进程,走本地 copilot-anthropic-proxy 用 Copilot token- 子进程退出后 Hermes 拿到 stdout JSON,提取 session_id
会话续接: claude -p "<task>" --resume <session_id> 已验证可加载历史对话上下文,等同于多轮会话;Hermes 可自行存 session_id 复用。
踩坑(同步到 hermes-agent-setup):
--resume模式下 stdin 卡死 → 必须< /dev/null- 默认
--max-turns 20容易error_max_turns,建议 ≥80 notify_on_complete长跑可能丢通知,要主动 poll- 同目录两个 Opus 并发会改冲突
- 用 Claude Code 改 Copilot Proxy 自己 → 死循环风险(systemd 进程未 restart 反而救场)