Skip to main content
Requirement 描述一个对象在被用于某次 Run 之前,环境必须提供什么。它解决的是隐藏前置条件:skill 文件是否存在、可执行程序是否安装、MCP tool 是否可发现、上下文来源是否可读取、凭据名称是否已配置。 Requirement 不是第 11 个 Huoban 对象。它没有独立 kind,而是嵌入 Skill.spec.requirementsProfile.spec.requirementsAdapter.spec.requirements 的共享协议结构。

声明依赖

对象作者声明运行所需的文件、程序、MCP 能力、凭据或上下文来源。

不执行依赖

Requirement 只提供待检查事实,不安装 skill、不调用 MCP tool,也不授予权限。

为什么不能只靠失败重试

如果依赖只写在自然语言或实现代码里,系统只能在 stage 已经启动后发现阻塞:缺少本地 skill、MCP server 未连接、知识来源不存在、环境变量未配置。此时重试不会改变环境,只会重复失败。 Requirement 把这些条件移到执行前:
这段声明只表示“该 Skill 需要名为 node 的可执行程序”。是否能找到、是否能执行,由 Preflight 在具体 workspace 和 Run 上检查。

所有权

Requirement 必须放在最了解依赖的对象上。
Flow.spec.stages[].requiresrequirements[] 不是同一个概念。前者选择“需要什么能力、由哪个 role 提供”,后者声明“实现该能力的对象依赖什么环境事实”。

支持的依赖类型

v1alpha1 定义九种 Requirement type: 动态目标和 credential 必须声明 freshness.maxAgeSeconds;URL 形式的 contextSource 也必须声明 freshness。具体字段见 Requirement 规范

declared 与 inferred

origin 区分依赖由谁提出:
  • declared:对象作者显式声明。
  • inferred:importer 或分析器从 Markdown、配置或外部格式推导。
推导不是事实。origin: inferred 必须带 reviewStatusneedsReview 的 Resolution 与 Readiness 保持 Unknown;当该 Requirement 为 required 时会阻止 execute gate,可选依赖仍只保留审查证据。
当前 v1alpha1 只标准化记录状态,不定义“自动接受推导”的工作流。工具必须保留来源信息,并让人或可信系统审查后再修改对象。

optional 不等于忽略

optional: true 表示该依赖不应单独阻断就绪,不表示不检查。Preflight 仍要记录它的 Resolution 与 Readiness,供 explain、降级决策和审计使用。 fallback 也不能绕过 Requirement。fallback 必须在 Run.spec.bindings 中显式声明、具备所需 capability,并以与主 binding 相同的 requiredness 通过同一次 Preflight;运行时临时换实现会破坏 Run 的可复盘性。

与相邻概念的边界

继续阅读:Requirement 规范Preflight 模型示例:Preflight 与 Lifecycle