Skip to main content
Huoban 当前是协议和本地 reference CLI 项目。它不托管 registry,不执行 agent workflow,不派发 Lifecycle Handler,也不调用 MCP tool。

支持版本

报告安全问题

不要在公开 issue、example 或协议反馈中包含 secret、credential、生产数据或私有仓库内容。 发现 CLI 或 schema 的安全敏感问题时,通过 repository owner 私下报告。在建立公开安全联系人前,不要公开 exploit details。

完整准备路径

每一步回答不同问题:
Preflight 不是授权。PreflightReady=True 只记录 reference CLI 在特定 Run.spec 和时刻观察到 declared required dependencies ready。

execute gate

execute Run 必须具有 Run scope 的:
stage scope 的 StagePreflightReady=True 不能授权整个 Run。即使 Run scope readiness 为 True,执行实现仍必须应用:
  • Policy allow / deny / requireApproval。
  • Trust source、review、sandbox 和 policy refs。
  • unresolved Checkpoint
  • runner isolation。
  • platform permissions 与 user approval。
当前 CLI 没有 execute 命令,因此不会执行这套 gate。

Preflight evidence

Preflight 分开记录:
  • resolution:引用、generation、capability、binding 或动态 target 是否明确。
  • readiness:当前环境是否可访问、可执行或可发现。
Preflight report 的 snapshotHash 哈希整个 Run.spec。Preflight 还会重算并比对 flowSpecHashprofileRefHashpolicyRefHashbindingHashinputBindingHash;任一缺失或不匹配都会阻断权威结果。修改 Run spec 后必须重新比较或生成 evidence。 这些 hash 锁定声明与选择,不归档每个 Skill 或 Adapter 的完整内容。文件输入与本地 file-backed Artifact 额外按原始 bytes 校验 SHA-256;无法取回内容的远程 Artifact readiness 保持 Unknown。报告未签名;通过 schema 也不能证明来源、未篡改或时钟可信。 textobject 输入会以内联值进入 Run.spec.inputBindingsinputBindingHash。不要把 secret、credential 或生产数据作为 inline input;explain 不输出这些值,但 Run 文件本身仍持有它们。敏感输入应使用受控内容引用,并由采用方施加存储、访问与保留策略。 inferred Requirement 如果是 reviewStatus: needsReview,resolution 与 readiness 都保持 Unknown。当前 CLI 没有自动接受或状态迁移。

默认 offline

不传 transport flag 时,Preflight 默认 offline。public npm run preflight 脚本也显式传入 --offline offline 会检查:
  • object refs 与 generation。
  • stage capability 与 Run binding。
  • Flow required input、未知 binding、类型匹配与结构化 stage input source。
  • 本地 file input 的原始 bytes hash,以及可解析 Artifact input 的 generation、声明 hash 与实际内容。
  • local path access。
  • executable 是否在 PATH 上。
  • credential 环境变量是否存在,但不读取其值到 report。
  • Trust 与 Policy refs。
remote context、MCP server、MCP tool 和 MCP resource readiness 保持 Unknown

--live 网络边界

--live 允许对对象声明的 URL 做有界 discovery:
  • remote context 只发送 HEAD
  • MCP 发送 initializenotifications/initialized
  • MCP tool/resource 只通过最多 20 页的 tools/listresources/list 查找。
  • 单次请求超时为 5 秒。
  • 每个 MCP 响应体最多读取 1 MiB。
  • 不调用 MCP tool。
  • report message 会去掉 URL user info、query、fragment、常见 credential 形式和远端 MCP error text。
  • MCP response 必须满足 1 MiB 上限,并携带与请求完全匹配的 JSON-RPC id;不匹配、缺失或重复响应都不能形成 ready evidence。
--live 视为访问不可信、对象可控 endpoint 的网络行为。只在 egress、DNS、proxy 和 local-network access 符合预期 trust boundary 的环境运行。 成功 discovery 只能说明 readiness。它不会让 remote content 可信,不会改变 Trust.spec.level,也不会批准 networkAccesssendMessage --at 只为可复现示例和测试提供固定时间。生产实现必须使用可信时钟,拒绝过期 validUntil,并重新比较当前 Run.spec 任何带 source.path 的 Adapter source 必须有路径完全相同且包含 read 的 required localPath Requirement;MCP tool source 必须有 URL 与 tool name 完全相同的 required mcpTool Requirement。source metadata 不能绕过 Preflight。

Lifecycle 边界

Flow lifecycle 只允许有限事件。Handler 用于观察、上报和清理,不应承载业务状态改变、决策、权限或隐藏的外部能力。 Lifecycle event payload 应保持最小化。除非未来协议显式定义字段和 Policy 边界,实现不应包含:
  • prompt 或 chat history。
  • Profile 内容。
  • secret。
  • 完整 stage input/output。
当前仓库只有 schema、binding Preflight、explain 和 invocation status 形状,没有 dispatcher。authored Pending invocation 不会自动执行或迁移。

示例 Policy

下面逐字取自 source tree 的 examples/policies/safe-defaults.yaml
examples/... 是 Huoban source repo 内的路径,不是文档站链接。 这个 Policy 是协议数据。当前 CLI 会 validate 和 explain 它,但不强制执行规则。

验证命令

涉及 Profile、Policy 或 Adapter 迁移时,再运行:
完整说明见 Preflight 与 Lifecycle