Flow 是 Huoban 的版式:定义一类 AI 工作应该如何被排版。
它不执行任务,不保存结果,也不要求绑定某个具体 agent 工具。它描述的是工作结构:调用者要提供哪些输入,需要哪些 capability,分成哪些 stage,输入和输出如何传递,哪里需要 checkpoint,默认使用哪些 Profile 和 Policy,以及哪些有限生命周期事件需要上报或观察。
本页属于核心概念,解释 Flow 的设计边界和编排模型;字段级定义、必填项和 schema 约束见 Flow 规范。
Flow 不是 Run
Flow 和 Run 的边界必须前置理解。
一句话:
Flow 定义一类 AI 工作的可复用结构;Run 记录一次具体执行。
Flow 的职责
Flow 应回答的问题是结构问题:- 这类工作需要哪些 capability?
- 每次调用必须或可以提供哪些动态输入?
- 这些 capability 如何分成 stage?
- 每个 stage 的输入来自哪里?
- 每个 stage 预期输出什么 artifact 类型?
- 哪些位置需要 checkpoint?
- 默认使用哪些
Profile和Policy? - 哪些有限生命周期事件需要 handler,以及它们是 required 还是 bestEffort?
Capability-first
Flow 的主路径是 capability-first。stage 应优先声明“需要什么能力”,而不是“必须调用哪个 skill”。sharpen-idea 这个 stage 需要 huoban.dev/designReview 能力。一次具体执行中,Run 再把 role 绑定到可用的 Skill 或 Adapter。
Shortcut 语法
v1alpha1 schema 允许uses 作为兼容 shortcut:
uses 不是推荐主路径。没有 Registry、Adapter 或 Skill metadata 时,工具只能保留这个引用或标记为 unresolved,不能保证自动展开成 capability 与 Run binding。当前 Preflight 允许它用于 dry-run 和诊断;execute mode 必须改用 requires.capability 与锁定的 Run binding,否则产生 LegacyUseNotLocked。
推荐主路径仍然是:
requires 是 Flow 的能力需求:它包含 capability 与可选 role,用于选择实现。它不是 Skill、Profile、Adapter 上的 requirements[];后者描述实现依赖的文件、程序、MCP 能力、凭据或上下文来源。详见 Requirement。
入口契约与内部数据流
Flow.spec.inputs 声明调用入口,不保存某次调用的值:
file、text、object 和 artifactRef。具体调用值进入 Run.spec.inputBindings。这对结构解决两个不同问题:Flow 回答“这类工作接受什么”,Run 回答“这一次实际给了什么”。
stage 只能使用两种结构化来源:
flowInput 必须已在 Flow 入口声明;stageOutput 必须来自当前 stage 之前的已声明输出。Preflight 会拒绝未声明入口、不存在的输出和未来 stage 引用。任意字符串表达式不属于 v1alpha1。
动态输入不是 Requirement。输入说明这次处理什么;Requirement 说明目标环境需要具备什么。
Stage 是能力边界
Stage 是 Flow 中最小的能力编排单元。 它不是 task step,也不是 shell step。它应该描述一段 AI 工作需要的 capability、输入、输出和校对边界。Adapter、导入层或实现私有扩展,不应污染 Flow 的核心对象。
Lifecycle Handler
Flow 可以在有限生命周期事件上声明观察性处理器:Run.spec.bindings.stage-reporter 锁定。bestEffort 与 required 是对具备 dispatcher 的实现提出的 delivery 语义;当前 reference CLI 只把前者作为 optional、后者作为 required 参与 Preflight,并不实际投递。
Lifecycle Handler 不是任意 hook:
- 只能使用 v1alpha1 的有限事件枚举。
match当前只按 stage id 过滤。- 同一事件上的多个 handler 不保证顺序。
- handler 不修改 stage 图、不作业务判断,也不会因自身 invocation 再产生 lifecycle event。
- 需要严格先后关系的工作必须建模为 stage。
run.succeeded、run.failed、run.cancelled只允许bestEffort;required 收尾使用run.finalizing。
Checkpoint
Flow 可以声明哪里需要校对,但不保存校对结果。Flow.spec.checkpoints声明校对点。Checkpoint对象承载一次具体校对请求和决策上下文。Run.status.conditions记录这次执行是否正在等待 checkpoint。Artifact保存供审查的材料、输出正文或决策记录内容;审批状态和继续/停止决策应进入Checkpoint/Run状态。
Artifact
Flow 可以声明预期输出,不直接承载产物内容。
Flow 声明 stage 预期输出;Artifact 记录一次执行实际产生的产物引用和审查状态。
Profile 与 Policy
Flow 可以声明默认Profile 和 Policy。
Run 声明本次执行使用的 profileRefs / policyRefs。v1alpha1 snapshot 记录 flowSpecHash、profileRefHash、policyRefHash、bindingHash 和 inputBindingHash;ref hash 只覆盖引用列表,不等于被引用对象完整内容的快照。
这对应活字印刷术里的关系:同一版式可以换墨,也可以按不同印坊规矩印刷。
Context engineering 与 loop engineering
用当前行业语言描述,Huoban 处理的是 context engineering、skill reuse 和 agent loop standardization 的交叉问题。 但 Huoban 不把这些概念堆进一个大对象里:
当前 v1alpha1 的 Flow schema 没有定义完整 loop DSL。Flow 是描述 agent loop 结构的基础对象,不是任意循环控制语言;Lifecycle Handler 也不是隐藏的控制流通道。
参考 Flow
idea-to-spec-review 是 Huoban 的首个参考 Flow。
它验证的不是“Huoban 能跑任意工作流”,而是一个更基础的标准化路径:静态 Flow 可以声明动态文件入口,现有 AI 能力可以被标准化成 Skill / Adapter,带着 Profile 排成 Flow,通过 Checkpoint 暴露判断边界,并在 Run / Artifact 中留下可审查记录。
从 示例:idea-to-spec-review 开始阅读完整对象链路。