导语
在实际开发中,经常遇到这样的场景:把编码任务交给 Claude Code 后就转身处理其他事务,回来发现它只执行了几步便陷入停滞——要么在等待权限确认,要么弹出“您看这样可以吗?”的询问。即便提前撰写了完整的实施方案,它依然会在中途停下来等待你的确认。
如果能让 OpenClaw 调度 Claude Code 进行开发,让小龙虾(OpenClaw)实时监督它持续工作直到全部实施完毕,那该多省心。经过整整一天的探索,测试了四种不同方案,踩了无数个坑之后,终于打通了这条完整的自动化链路:在飞书中提交需求 → OpenClaw 自动拆解任务 → Claude Code 持续执行 → 完成后发起 PR 通知验收。整个过程完全无需人工介入。
最令人惊喜的是,整个过程中 Claude Code 始终运行在同一个会话里,上下文保持连续,它能准确记住之前执行的操作,完全不会出现“我是谁、我在哪”的尴尬局面。
如果你也希望让 AI 真正帮你托管开发流程,而不是“挤牙膏式”地一轮又一轮手动操作,这篇文章正是为你量身打造的。
一、为什么不让 OpenClaw 直接开发?
曾经尝试过让 OpenClaw 直接进行开发,但它对项目的工程级上下文理解能力仍然存在明显短板。相比之下,Claude Code 拥有几个不可替代的核心优势:
第一,它具备成熟的项目上下文持续集成优化机制,能够以项目维度划分工作区,对技术架构、业务逻辑的理解可以持续积累和深化。
第二,它是专门为 coding 场景设计的 agent,工具链更加完善,编码体验和输出质量都更出色。
第三,在长期迭代过程中,Claude Code 能够记住之前的决策和改动记录,不会每次从零开始重新理解项目。
因此目标非常明确:让 OpenClaw 担任“技术 PM”,负责任务拆解与调度;让 Claude Code 担任“执行工程师”,负责具体编码实现。
在飞书里对机器人说一句“帮我开发个用户注册功能”,然后就可以去忙别的事情。等到 OpenClaw 通知“已完成,PR 已发起”,直接去验收即可。中间不再需要反复确认、重复下达指令。
二、架构设计:OpenClaw 当 PM,Claude Code 当工程师
分工明确之后,整体架构自然就清晰了:
飞书用户 → OpenClaw(调度层) → Claude Code(执行层)飞书作为入口,随时随地可以提交需求,无需打开 IDE 环境。
OpenClaw 扮演技术 PM 的角色,负责理解需求、拆解任务、调度执行、整合最终结果。它具备 LLM 能力,能够与人类进行自然语言沟通,同时也能调用各种工具完成操作。
Claude Code 则是执行工程师,负责具体的编码工作。它专业且高效,并且能够持续积累项目上下文信息。
关键设计要点:
OpenClaw 通过 exec 命令调用 acpx claude,每 5-10 秒轮询一次输出,当识别到“Claude complete”标记时即可确认任务完成。如果 Claude Code 在执行过程中遇到问题而停下来,OpenClaw 能够基于对需求的理解自主做出决策,告诉它下一步该做什么。只有遇到权限等重大问题时,才会向用户发起询问。
如此一来,整条链路就真正运转起来了。
三、核心难点:持续会话是成败关键
整条链路中最困难的部分,不是配置环境,也不是编写调度逻辑,而是保持同一个 Claude Code 会话的连续性。
为什么这一点如此重要?因为 Claude Code 的上下文记忆是绑定在 session 上的。如果每次调用都创建新 session,它就会完全不记得之前执行过什么操作,相当于每次都要从零开始。这样一来,OpenClaw 的调度就失去了意义——它不得不把之前的对话历史重新复述一遍,效率极低。
这一步卡住了整整一天的时间。
尝试了多种方法,初期使用官方推荐的 OpenClaw ACP 方式,配置了半天,一会儿是这个参数不对,一会儿是那个接口报错。最令人头疼的是,很多配置问题连 OpenClaw 自己也排查不到,询问它时,它甚至可能给出错误信息——工具调用的输入输出存在一定黑盒特性,无法看到真实证据。
后来吸取了教训,每次修改配置后都要求 OpenClaw 提供调用工具的真实日志,这才慢慢摸清了问题所在。
四、踩坑排查:四种方案对比
将尝试过的方案整理成表格,一目了然:
| 方案 | 会话复用 | OpenClaw 调度 | 流式输出 | 状态 |
|---|---|---|---|---|
| ACP + resumeSessionId | ❌ | ✅ | ✅ | 失败 |
| ACP + /acp steer | ✅ | ❌ | ❌ | 可用但不推荐 |
| acpx claude -s | ✅ | ❌ | ✅ | 可用但无调度 |
| Agent + exec acpx | ✅ | ✅ | ✅ | 推荐 |
方案一:ACP + resumeSessionId(失败)
官方文档声称使用 sessions_spawn 加上 resumeSessionId 参数就能复用会话。配置了半天之后发现,每次创建的仍然是新会话。
后来经过仔细研究才发现,resumeSessionId 实际上是 OpenClaw ACP 会话的 ID,而不是 Claude Code 的 session ID。复用 OpenClaw 的会话 ID 根本无法维持同一个 Claude 会话。这个参数在实际使用中显得有些鸡肋,可能仅在 thread 和 mode=session 的场景下才有实际作用。
方案二:ACP + /acp steer(可用但不推荐)
这个方案虽然能够复用会话,但存在一个致命缺陷:/acp 指令只能由人为发送给 OpenClaw,它自身无法执行。这意味着每一条指令都需要手动发布,既然如此,直接使用 Claude Code 反而更加直接。
这个方案无法解决核心需求:当 Claude Code 中断时,OpenClaw 无法自主决策并继续调度。
方案三:acpx claude -s(可用但无调度)
直接使用 acpx claude -s 会话名 确实能够复用会话,操作也很简单直接。但问题在于不经过 OpenClaw,无法发挥其任务拆解和调度的能力。
这就相当于绕过了 PM,直接与工程师对话。处理简单任务还行,一旦遇到复杂任务就难以应对了。
方案四:Agent + exec acpx(完美)
最终采用的方案:OpenClaw Agent 通过 exec 调用 acpx claude -s 会话名。
这个方案兼顾了所有核心需求:
- OpenClaw 可以灵活调度(拆解任务、整合结果)
- acpx claude 支持持续会话(-s 参数)
- 支持流式输出(--format json + 定期 poll)
- 用户体验优秀(自动执行,无需手动指令)
五、最终方案详解
架构
用户(飞书)↓OpenClaw Agent(任务调度层)- 理解需求(LLM)- 拆解任务- exec 调用 acpx claude- 整合结果↓acpx claude(执行层)- 持续会话(-s )- 执行编码任务- NDJSON 流式输出 关键配置
1. 安装依赖
# 安装 Claude Code CLInpm install -g @anthropic-ai/claude-code# 安装 acpx CLI(必须)npm install -g acpx# 验证安装claude --versionacpx --version2. 配置 Claude Code(核心!)
这是最为关键的一步,很多人在此遇到问题。
为什么必须配置 ~/.claude/settings.json?因为 claude-agent-acp 在调用 Claude Code CLI 时,环境变量可能无法正常传递。Claude Code CLI 会优先读取配置文件中的 model 字段。
# 手动编辑 ~/.claude/settings.json{ "model": "qwen3.5-plus"}请注意是 model 字段,而不是 Anthropic_model。使用环境变量配置了半天没有生效,最后发现必须修改配置文件。
可选的环境变量(用于认证):
export ANTHROPIC_BASE_URL="https://coding.dashscope.aliyuncs.com/apps/anthropic"export ANTHROPIC_API_KEY="sk-xxx"3. OpenClaw 配置
最终方案不需要 OpenClaw acpx 插件,因为直接调用 acpx CLI。不过为了其他功能,可以保留基础配置:
{ "tools": { "sessions": { "visibility": "all" }, "agentToAgent": { "enabled": true, "allow": ["*"] } }}4. 重启 Gateway
openclaw gateway restart会话复用
# 创建会话acpx claude sessions new --name output-manager# 测试复用acpx claude -s output-manager "收到请回复数字 11"# → 输出:11acpx claude -s output-manager "上一个数字 +2 等于多少"# → 输出:13 ✅ 成功复用流式输出
acpx --format json claude -s output-manager "回复数字 11"输出采用 NDJSON 格式,每行对应一个事件。OpenClaw 每 5-10 秒 poll 一次,解析 thinking 和 message 字段,实时将结果发送给用户。
结束判断
Claude Code 执行结束时会产生一个“Claude complete”的标记语,识别到该标记即可确认任务已完成。
六、拿走即用
快速开始
1. 安装
npm install -g @anthropic-ai/claude-codenpm install -g acpx2. 配置
# 编辑 ~/.claude/settings.json{ "model": "qwen3.5-plus"}3. 创建会话
acpx claude sessions new --name my-project4. 验证
# 第一轮acpx claude -s my-project "收到请回复 11"# 第二轮(验证上下文)acpx claude -s my-project "上一个数字 +2 等于多少"# 应该输出 13开源计划
已经将这套方案封装成了 skill,整理完毕后会进行开源。届时可以直接安装使用,无需从头自行配置。
写在最后
虽然目前只能采用 exec 方案,多少有些“曲线救国”的意味,但已经能够实现托管开发的目标。如果未来飞书能够支持 thread,OpenClaw ACP 能够进一步丰富能力,我们更期待使用原生的 ACP 方式——那样可以在同一个 agent 会话中操作,拥有 session 记录文件,方便追溯完整的对话过程,可靠性和便捷性都会进一步提升。
但在那之前,当前这套方案已经足够实用了。
创作:OpenClaw × Anton
创作时间:约 2 小时(素材收集 1 小时 + 写作 1 小时)
