文章

Agent Skill 的供应链验证:从仓库到执行的完整路径

当 Agent Skill 从 GitHub 仓库到达本地执行环境,中间经历了什么?记录供应链验证的完整路径和当前实践。

软件供应链安全不是一个新话题。从 npm 的 package-lock.json 到 Docker 的镜像摘要锁定,开发者早已习惯在依赖链中建立信任锚点。但当 Agent Skill 成为一种新的“依赖”时,供应链验证的路径需要重新设计。

传统依赖 vs Agent Skill

传统软件依赖(npm 包、Docker 镜像、Python wheel)和 Agent Skill 有几个关键区别:

维度 传统依赖 Agent Skill
内容类型 代码和配置 说明、脚本和运行环境的组合
执行方式 被宿主程序调用 被 Agent 直接执行
权限范围 受宿主程序限制 可能涉及文件系统、网络、系统命令
版本管理 语义化版本号 通常没有版本号,靠 Git tag 或 commit hash
审计方式 代码审查 需要理解意图、环境和执行边界

这些区别意味着传统的依赖管理工具(npm audit、Dependabot、Snyk)不能直接套用到 Agent Skill 上。需要专门的验证层。

供应链的四个阶段

Agent Skill 从仓库到执行的完整路径可以分为四个阶段:

1. 来源(Provenance)

Skill 从哪里来?是谁创建的?是否被修改过?

SkillSync 的 verify 命令检查:

  • 文件的创建时间和修改时间。
  • Git 历史(如果有的话)。
  • 文件的哈希值,用于后续版本比对。

这些信息帮助回答“这个 Skill 的来源是否可追溯”。但来源可追溯不等于来源可信——可信度判断是人的职责。

2. 兼容性(Compatibility)

Skill 面向什么环境?当前环境是否满足要求?

SkillSync 的 compat 命令对照 Capability Profile 检查:

  • Skill 声明支持的 Agent 是否与当前环境匹配。
  • Skill 需要的文件系统权限是否被当前环境允许。
  • Skill 声明的运行时能力是否在当前环境中可用。

这一步确保 Skill 在当前环境下有可能正常运行,而不是等到执行时才发现环境问题。

3. 变更(Diff)

与上一个版本相比,改了什么?这些变化是否安全?

SkillSync 的 diff 命令:

  • 逐行比较两个版本的差异。
  • 过滤掉无关的格式变化,聚焦于实质内容的变化。
  • 高亮显示新增、删除和修改的部分。

这一步帮助审阅者快速理解“这个版本改了什么”,而不是逐行阅读整个 Skill。

4. 执行(Replay & Verify)

在隔离环境中验证 Skill 的执行行为。

SkillTape 的 verify 命令:

  • 在沙箱中重放 Skill。
  • 记录每一步的执行结果。
  • 生成 Receipt 作为审计证据。

这一步不信任 Skill 的“声明”,而是通过实际执行来验证“行为”。

锁定机制

传统依赖管理使用 lockfile 锁定版本。Agent Skill 的供应链也需要类似的锁定机制:

哈希锁定

SkillSync 使用确定性的 Skill 摘要(digest)来锁定版本。相同的 Skill 内容总是产生相同的摘要值,任何修改都会改变摘要。

安装脚本锁定

SkillTape 的安装脚本从特定的 commit hash 获取,不使用“最新版本”的模糊引用:

SKILLTAPE_VERSION="0.1.0"
SKILLTAPE_RELEASE_BASE_URL="https://github.com/Chumaniac/skilltape/releases/download"

依赖项(Rust 和 npm)被锁定在特定版本。

Docker 镜像锁定

SkillSync 的 Docker 沙箱后端使用摘要锁定的镜像执行,确保每次执行都在相同的环境中进行。

策略评估

供应链验证不仅是技术问题,也是策略问题。SkillSync 的 verify --policy 支持加载自定义安全策略:

  • 不允许网络访问的 Skill 不能在需要网络的环境中执行。
  • 不允许文件系统写入的 Skill 不能修改宿主系统的配置。
  • 不允许执行外部命令的 Skill 不能调用系统工具。

策略评估的结果会作为 verify 报告的一部分呈现,帮助审阅者判断 Skill 是否满足组织的安全要求。

CI/CD 集成

供应链验证需要融入开发流程,而不是事后补救。SkillSync 支持 SARIF 格式输出,可以集成到 CI/CD 流程中:

  • 在 PR 检查中自动运行 SkillSync verify。
  • 将发现状态(pass/warn/fail/unknown)作为合并条件。
  • 在 CI 模板中定义标准的验证流程。

这意味着 Agent Skill 的供应链验证可以像代码审查一样成为开发流程的一部分。

当前实践的局限

供应链验证是一个持续演进的领域,当前实践有几个明显的局限:

  • 本地优先:两个工具都只支持本地 Skill,不支持远程仓库的自动验证。
  • 手动审阅:所有发现都需要人工审阅,自动化程度有限。
  • 平台限制:Windows 上的沙箱支持尚未实现,隔离重放在该平台上不可用。
  • 生态碎片化:不同 Agent 的 Skill 格式不统一,验证工具需要为每个 Agent 定义 Profile。

这些局限不是技术债务,而是当前阶段的合理边界。随着 Agent Skill 生态的发展,验证工具也会相应演进。

接下来

供应链验证的核心思想是:信任需要证据,证据需要可审计。SkillSync 提供执行前的检查证据,SkillTape 提供执行后的重放证据。两者的衔接形成了一条从仓库到执行的完整验证路径。

这条路径不是完美的,但它把“信任一个 Agent Skill”从一个模糊的感觉变成了一个可以逐项检查的过程。在 Agent Skill 被越来越广泛使用的今天,这种可审计的验证路径比以往任何时候都更重要。

参考链接

评论