autodev:Graph 工程在 oh-my-pi 上的落地

hermes
📝
Graph 工程 14 步不绑死 Claude Code——autodev 用 oh-my-pi 的 workflow/orchestrate 原语 + 薄编排层逐条复刻,双通道契约实现编排零 token,真实跑在 CAE 遗留代码库。

本文整理自微信公众号文章(作者:傅Fanny),原始链接:https://mp.weixin.qq.com/s/FdESfAhHk65TYk3m0kJtOQ

最近那篇讲「Graph 工程 14 步」的文刷屏了——它把 Claude Code 的 Dynamic Workflows 抽象成一套「节点 + 边」的方法论。

autodev 在原理形态上就是标准的 Graph 工程实践,但它跑的 substrate 不是 Claude Code,而是 oh-my-pi(omp)。 换句话说,这套打法是 substrate-agnostic 的,换层皮照样能落地。

一、那篇刷屏文到底在讲什么

  • Dynamic Workflows 是 Anthropic 官方 GA 功能:一段 JavaScript 编排脚本,驱动几十到上百个 subagent 在后台跑。四个原语 agent / parallel / pipeline / phase 覆盖几乎全部生产图形态。
  • 编排层零 token:协调逻辑写在 JS 里、在对话外执行,Claude 自己的上下文只装最终答案——这是它能扩展到上百个 subagent 而不淹没会话的原因。
  • 「Graph Engineering」是社区命名(mer.vin 的 14 步路线图),Anthropic 官方叫它 orchestrator-workers。同一个东西,两种叫法。
1
2
3
4
5
6
7
8
9
10
phase('Research'); // 九个来源、九个 agent,同时进行
const raw = await parallel(
SOURCES.map((s) => () => agent(s.prompt, {
label: `research:${s.key}`,
phase: 'Research',
schema: ITEM_SCHEMA, // 每个节点返回已校验的 JSON
agentType: 'general-purpose',
})),
);
const collected = raw.filter(Boolean); // 丢掉失败 agent 留下的 null

parallel() 是屏障:抛错的 thunk 解析成 null 而不是拖垮整批——这正是 Graph 工程第 10 步「失败隔离」。

二、autodev 整体控制流:薄编排层

autodev 不是「又写了一个 agent 框架」,而是在 omp 之上加了一个薄编排层——编排交给 omp 的 workflow/orchestrate 原语。主干是「侦察→规划→切片循环」,外面套两层质量门。

关键设计是 §9 双通道契约:subagent 的重产物(长文、草稿、报告)写进 local://{role}-{slug}.md 这类 durable 路径,只给父回一段轻量 JSON {status, ref, summary, findings}。父 agent 上下文只装「结论」不装「细节」——这就是 Claude Code 那句「orchestration cost: zero tokens」的等价实现。

三、主循环:RECON→PLAN→SLICE

Graph 工程第 11 步「loop-until-dry」——处理未知任务规模,但必须能终止。三个收敛细节:

  • 拓扑排序:slice 按 depends_on 排序,前面的 AC 不过后面不启动(把「假依赖」显式化)
  • replan 上限max_replans 默认 3,超出直接 PAUSED,绝不空转
  • 防死循环recon_pass 记轮数,超上限 escalate 升级人工,而不是无限侦察

四、条件路由:recon-score 纯函数分流

第 08 步「条件路由」在 autodev 里是纯逻辑、零 LLM 调用recon-score.mjs

1
2
3
4
5
6
7
8
9
10
11
export function classifyReconConfidence(scored = [], opts = {}) {
const threshold = typeof opts.threshold === 'number' ? opts.threshold : 0.55;
const maxPass = typeof opts.maxPass === 'number' ? opts.maxPass : 2;
const groups = { solid: [], revisit: [], escalate: [] };
for (const d of scored) {
if (d.confidence >= threshold) groups.solid.push(d.id); // 当地基
else if (d.recon_pass >= maxPass) groups.escalate.push(d.id); // 停 recon,升级人工
else groups.revisit.push(d.id); // 进 2-round 对抗/再侦察
}
return groups;
}

confidence 只消费 subagent 已有返回值:status 给基础分,带 file:line 证据每条 +0.1,出现 block/unknown/矛盾 压顶到 0.5 以下——不额外烧侦察 token

五、对抗门控 TwoRoundGate 的菱形

第 07 步「菱形」+ 第 09 步「对抗 verifier」合体成 TwoRoundGate:R1 起草、R2 对抗找漏洞、父定稿。最关键的是门控不变式——定稿必须含全部 mandatory(编译/构建/测试)和开发者种子项,按 id 比对,R2 敢删工具层自动补回。把「硬保障」写进工具层而不是靠 prompt 期望。

六、verify 真跑命令,不采信自报

1
2
3
4
5
6
7
8
9
case 'verify': {
// 真正执行 verify 命令,据退出码判定;不采信 subagent 自报。
const res = runVerify(root, {
gate_id: p.gate_id, slice_id: p.slice_id,
verify_cmd: p.verify_cmd, timeout_ms: p.timeout_ms,
});
if (!res.ok) return err(`ERR: verify failed: ${res.error}`);
...
}

runVerify 跑的可能是 cmake --buildctestvalgrind --leak-check 或 benchmark 数值比对——据子进程退出码判定,subagent 说「我过了」不作数。

七、结论:方法论可移植,才是重点

那篇刷屏文的价值不是「Claude Code 又出了个功能」,而是把一套可命名、可复用的工程打法抽象出来了:node 有边界、edge 是数据契约、扇出扇入成菱形、verifier 在边上真验、循环必须能终止。

autodev 证明了这套打法不绑死在 Claude Code 上。换到 omp 的 workflow/orchestrate 原语 + 一个薄编排层,14 步里绝大多数能逐条对上——而且代码真实跑在 CAE(Fortran + C++ 遗留代码库)场景里,比 demo 更有说服力。

这套「薄编排层 + 双通道契约 + 工具层强保障」的写法,值得直接抄。

  • 标题: autodev:Graph 工程在 oh-my-pi 上的落地
  • 作者: hermes
  • 创建于 : 2026-07-29 18:40:00
  • 更新于 : 2026-07-29 18:30:12
  • 链接: https://blog.lxiol.cn/2026/07/29/autodev-graph-engineering-omp/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。