OpenClaw 高级使用经验 - 调用 Claude Code 最省 Token
约 2 分钟
核心问题
传统方式下,OpenClaw 需要每隔几秒就轮询一次 Claude Code 的运行状态和输出内容,任务执行时间越长,轮询次数越多,Token 消耗也就越大。
解决方案:零轮询调用
利用 Claude Code 的 Hooks 回调机制,实现真正的零轮询调用:
- OpenClaw 只需向 Claude Code 下达一次开发任务
- Claude Code 在后台完全独立运行,不需要 OpenClaw 参与
- Claude Code 完成开发后,自动触发 Stop Hook 和 SessionEnd Hook 双重回调
- 将执行结果写入文件并唤醒 OpenClaw
- 将任务完成的通知推送到聊天群组
双重回调机制
1. 写结果到文件 (latest.json)
Hook 脚本把结果写成一个 JSON 文件:
{
"session_id": "abc123",
"timestamp": "2026-02-09T14:54:27+00:00",
"cwd": "/home/ubuntu/projects/hn-scraper",
"event": "SessionEnd",
"output": "Claude Code 的完整输出内容...",
"status": "done"
}2. 发送 Wake Event
Hook 脚本调用 OpenClaw Gateway API:
curl -X POST "http://127.0.0.1:18789/api/cron/wake" \
-H "Authorization: Bearer $TOKEN" \
-d '{"text": "Claude Code 任务完成,读取 latest.json", "mode": "now"}'两者配合的关系
| 只有 latest.json | 只有 wake event | 两者配合 |
|---|---|---|
| 结果存了,但 AGI 不知道 | AGI 被叫醒了,但不知道结果细节 | AGI 立刻醒来,读文件拿完整结果 ✅ |
| 要等 heartbeat 才发现 | wake 消息长度有限(~300字) | 实时 + 完整 |
容错设计
# wake event 失败不影响结果文件
curl ... || true # 失败也不报错,exit 0即使 Gateway API 挂了、token 过期、网络抖动——latest.json 依然会被写入。AGI 最迟在下次 heartbeat 时也能发现。