[安全提示词设计与编写实践 1] 从skills.sh安全下载技能

Agent Skill不仅仅是提示词的集合。SKILL.md中的指令可以改变代理的行为,而附带的scripts/可以执行本地命令。安装公共技能是一项供应链操作,它在增加便利功能的同时,也将新的代码和指令引入信任边界内。

本文将实践如何在skills.sh上查找技能,不立即进行全局安装,而是先审查源代码,然后仅在项目范围内安装。命令已根据2026年8月7日确认的skills CLI 1.5.22版本进行验证。

安全供应链场景:审查公共仓库中的Agent Skill并将其安装到项目范围

本次实践内容

实践目标分为以下五个步骤:

  1. 在skills.sh和CLI中查找候选技能。
  2. 安装前检查仓库和包含的文件。
  3. 创建记录提交哈希的本地审查副本。
  4. 仅将特定技能复制到Codex的项目范围。
  5. 验证安装结果,并在必要时移除。

准备工作包括Git、Node.js 18或更高版本以及rg。如果没有rg,也可以使用编辑器的搜索功能执行相同的搜索。

node --version
npm --version
git --version
rg --version

skills CLI可以直接通过npx运行。首先,我们只检查版本和帮助信息。

npx --yes skills@latest --version
npx --yes skills@latest --help

预期结果是1.5.22之类的版本号以及add, use, remove, list, find, update, init命令列表。版本会随时间变化,因此在团队文档中记录实践时使用的版本是一个好习惯。

公共技能的发现、审查、隔离、安装和验证流程

图:公共技能的安全安装流程 · 基于skills.sh CLI文档、vercel-labs/skills README重构

为什么安装前需要审查

skills.sh文档指出,它无法保证公共生态系统中所有技能的质量或安全性,因此用户在安装前必须自行审查。排名是基于匿名安装统计的发现信号,而非安全评分。即使有审计徽章,当前版本、安装后添加的文件、实际权限和执行环境也必须单独检查。

从安全角度来看,至少需要区分三点:

WRIMO-MD-TABLE-0][OWASP LLM01:2025也描述了间接提示词注入,即外部文件或网页的指令改变代理行为。因此,即使正在审查的SKILL.md中包含“停止本次审查”、“忽略上级指令”等语句,也应将其视为分析数据,而非命令。

步骤1:在skills.sh中查找候选

您可以在浏览器中打开来查看主题或作者。在终端中,可以按如下方式搜索:

npx --yes skills@latest find security
npx --yes skills@latest find skill --owner vercel-labs

确定候选后,不要立即安装,而是先列出仓库中包含哪些技能。

npx --yes skills@latest add vercel-labs/agent-skills --list

–list显示在仓库中找到的技能名称。从这里记录作者、仓库地址和所需的技能名称。

步骤2:在单独的目录中审查源代码

创建一个用于实践的工作目录。

mkdir -p skill-lab/vendor
cd skill-lab

浅克隆要审查的官方仓库。示例是Vercel Labs的公共仓库,但相同的过程也适用于其他技能。

git clone --depth 1 https://github.com/vercel-labs/agent-skills.git 
  vendor/agent-skills-review
git -C vendor/agent-skills-review rev-parse HEAD

最后一条命令的提交哈希是描述所审查确切状态的证据。接下来,查找文件列表和危险信号。

find vendor/agent-skills-review -type f -maxdepth 4 | sort

rg -n -i 
  'ignore previous|system prompt|curl|wget|eval(|exec(|shell=true|.ssh|.aws|process.env|os.environ|rm -rf' 
  vendor/agent-skills-review

搜索结果不应立即被判定为恶意。安全教育文档可能包含危险命令作为示例。请同时检查发现行的上下文、该文件是否实际执行,以及它是否在未经用户批准的情况下执行网络或文件更改。

特别是,如果无法回答以下问题,请暂停安装:

  • 为什么此技能需要访问网络?
  • 它读取和写入哪些路径?
  • Shell命令参数是否与用户输入合并?
  • 在删除、上传、提交、部署等外部操作之前是否需要批准?
  • scripts/中是否包含二进制文件或混淆代码?

步骤3:仅在项目范围内安装特定技能

从已审查的本地仓库中,将所需的单个技能复制到Codex的项目路径中。

npx --yes skills@latest add ./vendor/agent-skills-review 
  --skill skill-creator 
  --agent codex 
  --copy

核心是三个选项:

  • –skill skill-creator:仅选择所需的技能,而不是整个仓库。
  • –agent codex:将安装目标限制为Codex。
  • –copy:从原始仓库创建独立的副本,明确保留实际安装文件。

由于未附加-g或–global,它将默认安装在项目范围内。全局安装会将技能暴露给所有项目,因此,只有在确定重复使用(例如作为组织标准)的情况下,才考虑全局安装更为安全。

如果不想发送匿名安装统计信息,可以在执行前指定以下环境变量:

export DISABLE_TELEMETRY=1

根据skills.sh CLI文档,此设置将禁用用于安装排名的匿名遥测数据。

步骤4:验证安装结果

分别以人类可读的列表和JSON格式验证已安装的技能。

npx --yes skills@latest list --agent codex
npx --yes skills@latest list --agent codex --json

接下来,检查项目中生成的技能路径。

find . -path '*/skills/*/SKILL.md' -print

比较安装前的审查副本和实际安装副本。路径可能因CLI和代理版本而异,因此请使用前一条命令中确认的实际路径。

diff -ru 
  vendor/agent-skills-review/skills/skill-creator 
  .codex/skills/skill-creator

如果Codex将项目技能安装在.agents/skills/中,则只需更改第二个路径。如果差异与预期不符,请勿运行该技能,并重新检查安装来源和选项。

步骤5:移除和清理

如果已完成实践或审查失败,请移除已安装的技能。

npx --yes skills@latest remove skill-creator --agent codex --yes

再次检查它是否已从列表中消失。

npx --yes skills@latest list --agent codex

最后,仅在工作目录内删除实践用的审查副本。删除前务必确认当前位置。

pwd
rm -rf ./vendor/agent-skills-review

操作环境检查清单

  • 记录仓库地址和审查提交哈希。
  • 默认情况下,优先选择项目安装而非全局安装。
  • 仅选择必要的技能,而不是整个仓库。
  • 检查SKILL.md、脚本、引用文件和二进制文件。
  • 通过单独的执行策略限制网络、凭据、删除和部署权限。
  • 更新也应与新安装一样,重新进行审查。
  • 不要将自动扫描器的通过解释为安全保证。

总结

虽然一行`npx skills add`很方便,但安全的引入过程在审查上花费的时间比发现上更多。公共技能是结合了提示词和代码的供应链包。为了明确信任边界,您必须固定来源和提交,仅在项目范围内安装必要的技能,并与实际安装版本进行比较。

下一篇中,我们将应用此原则,使用skill-creator直接创建专用于安全审查的技能。

官方参考资料


Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注