Skill 是 Huoban 的活字:一份可复用能力的声明式契约。
它说明能力叫什么、接受什么输入、产生什么输出、依赖什么环境、可能产生哪些副作用,以及是否建议在使用时设置校对点。它不保存项目上下文,不排列 stage,也不规定某个 agent、模型、命令或工具如何执行这项能力。
本页属于核心概念,解释 Skill 的设计边界和解析链路;字段级定义、必填项和 schema 约束见 Skill 规范。
Skill 的物理形态
HuobanSkill 在协议层是一份符合 schema 的资源对象,通常以 YAML 或 JSON 保存:
skillRef 锁定它。能力来自外部 SKILL.md、MCP tool、Claude/Codex skill、Cursor Rule、脚本或其他工具时,应先由 Adapter 声明来源和映射。此后有两条合法路径:Run 可以直接绑定 Adapter;如果团队另外维护了一份标准 Skill 契约,也可以让 Skill.spec.adapterRef 关联 Adapter,再由 Run 绑定 Skill。外部自然语言文件不能因为名字叫 Skill 就直接成为可信的 Huoban Skill。
Skill 不是实现包
Skill 的第一性职责是标准化能力边界,不是携带所有执行材料。
一句话:Skill 是字身规格;具体字从哪里来、这次取哪一枚、在哪一版使用,分别由 Adapter、Run 和 Flow 表达。
从 capability 到 Run binding
Skill 不应被直接写死进可复用 Flow 的主路径。Huoban 使用 capability-first 链路把“需要什么”与“这次用什么”分开。1
Skill 声明能力
Skill.spec.capabilities 列出它能提供的标准能力,例如 huoban.dev/designReview。2
Flow 声明需求
stage 通过
requires.capability 和可选 role 声明需要什么,不提前选择 provider。3
Run 锁定 provider
Run.spec.bindings 把 role 绑定到具体 skillRef 或 adapterRef。4
Preflight 检查
Preflight 解析对象、核对 capability,并检查可达 Skill、Adapter、Trust、Policy 与 Requirement。
5
兼容 runtime 执行
runtime 按已锁定 binding 调用实现。当前 reference CLI 只验证、解释、锁版和预检,不执行 Skill。
capability 不是对象身份
capability 表达“会做什么”,Skill identity 表达“是哪一个对象”。二者不能混用:
- Flow 使用 capability 保持版式可移植。
- Run 使用
skillRef或adapterRef锁定本次 provider。 metadata.name是当前 workspace 中的对象名称。metadata.generation表示spec的语义代次,不是包版本。
name@version、semver 解析、版本范围或 Registry 版本选择。当前 skillRef 是名称字符串;实现不能把未进入 schema 的版本语法描述成公共协议能力。
输入输出是能力接口
Skill.spec.inputs 和 Skill.spec.outputs 描述能力接口,不保存一次调用的具体值,也不定义 Flow 内部数据流。
字段形状和当前类型检查边界见 Skill 规范。概念上,这些字段是能力接口,不是一次 Run 的调用数据,也不是已经完成的跨对象类型系统。
Context、Requirement 与状态边界
Skill 应尽量无状态,并把不属于能力本体的事实放回正确对象:profileHints 只能提示可能需要的 Profile layer 名称,不是 Profile 引用,也不能把项目上下文重新塞回 Skill。
治理边界
Skill 声明副作用,不获得权限:Skill.spec.checkpoint 只是开放的校对提示。真正发生在一次执行中的校对请求必须创建独立 Checkpoint,并通过 runRef 关联具体 Run。
Trust 可以直接以 Skill 作为 subjectRef,记录来源、review、sandbox 和 policyRefs,但 Trust level 本身不授予执行权限。当前 reference Preflight 不会主动扫描独立的 Skill Trust;它只在绑定 Skill 关联 adapterRef 后,继续沿 Adapter 的 trustRef 检查 Trust 链路。