Requirement 描述一个对象在被用于某次 Run 之前,环境必须提供什么。它解决的是隐藏前置条件:skill 文件是否存在、可执行程序是否安装、MCP tool 是否可发现、上下文来源是否可读取、凭据名称是否已配置。
Requirement 不是第 11 个 Huoban 对象。它没有独立 kind,而是嵌入 Skill.spec.requirements、Profile.spec.requirements 和 Adapter.spec.requirements 的共享协议结构。
为什么不能只靠失败重试
如果依赖只写在自然语言或实现代码里,系统只能在 stage 已经启动后发现阻塞:缺少本地 skill、MCP server 未连接、知识来源不存在、环境变量未配置。此时重试不会改变环境,只会重复失败。 Requirement 把这些条件移到执行前:node 的可执行程序”。是否能找到、是否能执行,由 Preflight 在具体 workspace 和 Run 上检查。
所有权
Requirement 必须放在最了解依赖的对象上。支持的依赖类型
v1alpha1 定义九种 Requirement type:
动态目标和 credential 必须声明
freshness.maxAgeSeconds;URL 形式的 contextSource 也必须声明 freshness。具体字段见 Requirement 规范。
declared 与 inferred
origin 区分依赖由谁提出:
declared:对象作者显式声明。inferred:importer 或分析器从 Markdown、配置或外部格式推导。
origin: inferred 必须带 reviewStatus。needsReview 的 Resolution 与 Readiness 保持 Unknown;当该 Requirement 为 required 时会阻止 execute gate,可选依赖仍只保留审查证据。
optional 不等于忽略
optional: true 表示该依赖不应单独阻断就绪,不表示不检查。Preflight 仍要记录它的 Resolution 与 Readiness,供 explain、降级决策和审计使用。
fallback 也不能绕过 Requirement。fallback 必须在 Run.spec.bindings 中显式声明、具备所需 capability,并以与主 binding 相同的 requiredness 通过同一次 Preflight;运行时临时换实现会破坏 Run 的可复盘性。
与相邻概念的边界
继续阅读:Requirement 规范、Preflight 模型、示例:Preflight 与 Lifecycle。