其他
在 Claude Code 上做多 agent…
需要让多个 Claude Code 实例并行干活并由父实例统一协调时,用 OPC 式的「hook 拦截事件 + claude -p 子进程 + 数据库共享状态」架构来编排。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 40/100 ×0.15
适用场景
在 Claude Code 上做多 ag特定
解决思路
- 把 Claude Code CLI 当作唯一执行引擎,OPC 只在它之上叠加编排层,不替换它。
- 用 Hooks 拦截 Claude Code 事件(PreToolUse、PostToolUse、SessionStart 等)作为编排入口。
- 用 Skills 把 prompt 加载进 Claude Code。
- 用 Scripts 承接 hooks/skills 的调用,执行协调逻辑。
- 用 Database 在多个 Claude Code 实例之间持久化状态。
- 生成 agent 时,由主 Claude Code 实例(你的终端)在 Task 工具上触发 hook。
- 在 hook 中调用 subprocess.Popen(["claude", "-p", "prompt"]) 派生子进程。
- 让派生出的新 Claude Code 实例作为子进程独立运行,自行读写协调数据库。
- 父实例把子进程的 PID 记录进数据库,并据此跟踪子进程状态。
- 目录布局:hooks 放 .claude/hooks/(TypeScript),skills 放 .claude/skills/(SKILL.md),hook 注册写在 .claude/settings.json,状态与 agent 输出放 .claude/cache/。
- 把 hook 调用的 Python 脚本放在 opc/scripts/。
- 用 opc/docker-compose.yml 启动 PostgreSQL、Redis、PgBouncer。
- 用 opc/init-db.sql 定义数据库 schema。
- 协调流程起点:用户在终端运行 claude,Claude Code 依据 .claude/settings.json 加载 hooks。
- 用户说 "spawn a research agent" 后,Claude 使用 Task 工具。
- PreToolUse hook 触发并检查资源。
- hook 以子进程方式启动 claude -p "research..."。
- hook 把 PID 存入 PostgreSQL。
- 子 agent 运行并把输出写到 .claude/cache/agents/<id>/。
- 子 agent 完成后向 PostgreSQL 广播 "done"。
- 父实例查数据库、读取子进程的输出文件来汇总结果。
- 全程记住四条不变量:每个 "agent" 只是另一个 claude -p 进程;hooks 只拦截事件、不创造新功能;所有协调都通过文件与 PostgreSQL 完成;Claude Code 始终是执行引擎。
适用边界 · 注意事项
- 不要把 OPC 做成独立应用,也不要试图脱离 Claude Code 单独运行它。
- 不要直接拦截 Claude API 调用或修改 Claude Code 的内部行为。
- 纯单进程、不需要跨实例共享状态或资源检查的场景,不必引入 PostgreSQL/Redis/PgBouncer 这套协调后端。