Skip to main content

WORKFLOW_SCRIPTS — 确定性多 agent 工作流编排

Feature Flag:FEATURE_WORKFLOW_SCRIPTS=1 引擎包:@claude-code-best/workflow-engine(确定性 JS 脚本编排,零核心层运行时依赖) 集成层:src/workflow/

一、功能概述

WORKFLOW_SCRIPTS 让 Claude Code 用确定性 JavaScript 脚本编排多个子 agent:可分解/并行、多视角置信、规模超单上下文、可 resume/可审计。
  • 编排原语agent / parallel / pipeline / phase / log / workflow(见引擎包)。
  • 确定性:脚本在受限沙箱内执行,禁用 Date.now() / Math.random() / 无参 new Date(),保证 journal 可重放。
  • 深度后端:单一 claude-code AgentAdapter 接入当前会话体系(provider / model / agentType / 工具),workflow 内的 agent() 调用真实子 agent。
  • 监控面板/workflows 双栏实时面板(见 §六)。
  • 编排手册/ultracode 注入编排工作法(见 §七)。
历史说明:早期版本为 YAML/JSON DSL + 全 Stub 实现(WorkflowDetailDialog 等),已全量重写为引擎驱动的 JS 方案。

二、实现架构

2.1 模块清单

2.2 注册点

三、编排原语

workflow 脚本内可用的钩子(语义详见引擎包 engine/hooks.ts): 硬限:单次 parallel/pipelineMAX_ITEMS_PER_CALL(4096);单 workflow 总 agent ≤ MAX_TOTAL_AGENTS(1000);并发 cap 默认 = DEFAULT_MAX_CONCURRENCY(3),可经 Workflow 工具的 maxConcurrency 入参覆盖,绝对上限 MAX_CONCURRENCY_CAP(16)。

四、编写 workflow

脚本置于 .claude/workflows/<name>.js|.mjs(也接受 .ts,但引擎不转译 TS,含类型注解会报语法错——推荐 .js/.mjs),自动成为 /<name> 命令。
脚本执行约束(引擎执行模型,违反直接报错): 脚本是 new AsyncFunction函数体,不是 ESM 模块:
  • importagent/parallel/pipeline/phase/log/workflowargs/budget 是注入的形参,直接用。
  • 禁 TS 语法:不要类型注解(x: number)、interfaceenumas、泛型。引擎不转译,即便文件是 .ts 也会原样报语法错。
  • 只允许一处 export const meta = {...}(引擎正则提取剥离);不要 export 其他、不要 export default
  • 顶层 return 返回结果
确定性约束(违反则 resume 失效):
  • Date.now() / Math.random() / 无参 new Date()(沙箱强制抛错)。需时间戳/随机种子经 args 传入。
  • export const meta = { ... } 必须是纯字面量(无变量、函数调用、模板插值)——加载期求值,否则抛 ScriptError

五、Workflow 工具

模型通过 Workflow 工具启动 workflow(input schema 见引擎包 tool/schema.ts):

六、监控面板:/workflows

/workflows 打开三区焦点面板(local-jsx,全屏):
  • 顶部 tabs:每个 run 一个 tab(状态圆点 + workflow 名 + #runId短码);同名脚本多次跑会多个 tab。
  • 左 phase 侧栏All + 合并 meta 声明的 phase(未启动 pending 灰)与实际 phase( running / done);选中即决定右栏筛选。
  • 右 agent 列表:按选中 phase 过滤;状态色 + 行尾文字(running / object / text / dead)。
键位Tab/Shift+Tab 切 run · / 切左右焦点列(phases ↔ agents)· / 列内移动 · r resume · x kill · n 新建提示 · q/Esc 退出。 视觉:无内框,左右一条竖线分隔;聚焦列标题橙粗;选中/光标行铺橙底(backgroundColor),文字色不变。 进度按引擎 agentId 精确关联 agent_done(解决并发 LIFO 竞态)。pending phase 来自 run_started 事件携带的 meta.phases,store 落地 declaredPhases,面板 mergePhases 合并。useSyncExternalStore 订阅 WorkflowService,稳定快照,无变更不重渲染。

七、/ultracode skill

/ultracodesrc/skills/bundled/ultracode.ts)注入多 agent workflow 编排工作法:何时用 / 何时不用、编排原语速查、质量模式库(adversarial-verify / judge-panel / loop-until-dry / multi-modal-sweep / completeness-critic)、确定性约束、后端路由、resume/budget、文件与命令。 纯知识 prompt skill:零运行时副作用,不改主循环、不切换行为开关。调用即把手册注入上下文。

八、resume / journal / budget

  • journal:每次 run 记录到 .claude/workflow-runs/<runId>/journal.jsonlresumeFromRunId 重放 journal,已完成 agent() 秒回缓存结果。
  • budgetbudget.total 为 token 硬顶(默认 null = 无限);budget.spent() / budget.remaining() 读实时消耗;耗尽后再发 agent() 抛错。
  • 并发:引擎 Semaphore 默认许可 3(DEFAULT_MAX_CONCURRENCY),可经 Workflow 工具的 maxConcurrency 入参 per-run 覆盖(钳到 [1, MAX_CONCURRENCY_CAP=16])。
  • 错误:脚本语法/meta 错 → parseScript 即时返错(不进后台);agent 抛错 → kind:'dead'null,workflow 继续(parallel/pipeline 容错);WorkflowAbortedErrorkilled

九、文件索引