Dynamic Workflow 让主 agent 通过写程序(而非对话)来指挥大量 subagent。模型针对一个小 facade 写普通 TypeScript 脚本;由 harness(而非模型)提供严谨性。
名字碰撞提醒:
CreateWorkflow是本特性的工具;旧Workflow工具和/expert是另一个更老的功能。/workflow <instructions>命令加载dynamic-workflowsskill。
Facade(编程接口)
模型写的脚本针对一个 facade(.d.ts)——编译器检查的接口与工具描述里嵌入的接口是同一份字符串,因此模型读到的和能力检查的不会漂移:
agent()创建 subagent;.ask<T>()给它任务并返回类型化结果files.*、git.*、world.run读写和探测工作区report流式输出发现;artifact.*发布交付物phase()命名阶段;log叙述- 其余是普通 TypeScript:
await、Promise.all、for、while、if、try/catch、helper、.map
示例(Programmer/Prover 交替直到证明接受或达轮次上限):
const programmer = agent("Programmer", { system: "You are a Lean 4 engineer…" });
const prover = agent("Prover", { system: "You are a Lean 4 verification expert…" });
phase("Implement");
let impl = await programmer.ask<ImplUpdate>(`Implement compress / decompress in ${IMPL_PATH}.`);
phase("Verify");
let verdict = await prover.ask<Verdict>(`Prove or refute ${THEOREM}. Notes: ${impl.notes}`);
while (!verdict.pass && round < MAX_ROUNDS) { /* ... */ }
agent()在循环外创建才能让 subagent 跨轮保持自身 memory;循环内创建则每轮都是新 subagent。
从一份脚本回收的东西
| 回收项 | 方式 |
|---|---|
| 类型 | 脚本被 TypeScript 编译器按 facade 的 .d.ts 类型检查 |
| schema | 每个 ask<T> 从 T 合成 JSON schema,subagent 答案按 schema 校验 |
| 依赖图 | 静态分析读一次脚本,画出谁喂谁、谁在谁之后、控制流可去哪 |
| 身份 | 每个 facade 调用是 site(稳定 id),每次执行是 instance |
| 持久性 | 每个 instance 被 journaled;重跑同一脚本时 journal 回答已发生的事 |
最适合的两类任务:宽而结构化的工作(“找遍每个 TS 文件的 bug” = 一次 files.glob + .map)和模型不能偏离的固定流程(如交替的 Programmer/Prover 循环)。
组成部分(The pieces)
- Authoring:facade 是一份
.d.ts字符串,喂给编译器并被工具描述嵌入。/workflow命令加载dynamic-workflowsskill(承载判断层)。同一文档拥有world.run、artifact 通道和EvalWorkflowSnippet(在真实编译器与沙箱里跑脚本片段、无 subagent 的 scratch 工具)。 - Analysis:运行前,分析器编译脚本、收集 sites、跑 authoring 检查、解释脚本一次产出单一 analysis core;从 core 投影四张图:site graph、causality graph、control-flow graph、hand-off graph。不精确只会放宽边集;唯一拒绝脚本的规则是”facade 调用必须是直接调用”。
- Launch:
CreateWorkflow接受内联脚本或按名保存的 workflow,编译后在所有权限模式都升起确认窗口。 - Runtime:
dynamic-workflow-runtime用 child-process + vm 沙箱执行;dynamic-workflow是纯 TS 的 facade/编译/静态分析/纯执行引擎。
实现包
| 包 | 作用 |
|---|---|
apps/zcode-cli/packages/dynamic-workflow | 纯 TypeScript facade、编译、静态分析与纯执行引擎 |
apps/zcode-cli/packages/dynamic-workflow-runtime | child-process + vm 沙箱 harness |
apps/zcode-cli/packages/bundled-skills | 唯一的系统技能 dynamic-workflows |
工具池
workflow 相关工具(见 tool-system):CreateWorkflow、AmendWorkflow、SaveWorkflow、ListSavedWorkflows、ListModels、EvalWorkflowSnippet、ListWorkflowRuns、GetWorkflowRun、ResumeWorkflowRun、ResolveWorkflowQuestion、FillWorkflowHole。dynamic workflow 关闭时这些工具下架。
门控
CreateWorkflow/AmendWorkflow/FillWorkflowHole/SaveWorkflow/EvalWorkflowSnippet 在 dynamic-workflows 技能加载前拒绝运行(bundled-skills/skills/dynamic-workflows/SKILL.md:11-15)。灰度通过 skills-system 的 disabledPaths 机制。
设计文档
docs/dynamic-workflow.md(入口)+ docs/dynamic-workflow/:authoring.md、concurrency.md、launch.md、presentation.md、transcript-and-notifications.md。Presentation 里有专门的 timeline 颜色 token(--color-workflow-*,见 DESIGN.md)。
相关页面
- agent-core — subagent 与 turn 运行时
- skills-system — bundled-skills 与技能门控
- tool-system — workflow 工具池