Vercel 做了个 Skill 包管理器,我觉得这可能会变成 AI Agent 生态的标配

0 阅读12分钟

vercel-skills-package-manager-cover.webp

最近我在看 Vercel 开源的 vercel-labs/skills,第一反应其实不是,又来一个 AI 工具。

而是另一件事,终于有人开始认真解决 Skill 管理这件事了。

现在大家对 Skill 这个词已经不陌生了。Claude Code 有,Codex 有,OpenCode 也有。你可以把它理解成一组可复用的工作说明书,里面写清楚这个 agent 在什么场景下该做什么、按什么流程做、需要遵守什么约束。写得再直白一点,Skill 就是把一次性的 prompt,变成能长期复用的工作流资产。

但问题也正好出在这里。

一旦你真的开始用 Skill,你很快就会发现,写一个 SKILL.md 根本不是最麻烦的事。最麻烦的是管理。

这个 Skill 放哪。怎么装到不同 agent 里。团队要不要共享。更新怎么办。删掉怎么办。一个仓库里有十几个 Skill 时怎么发现。一个 Skill 同时要给 Claude Code、Codex、OpenCode 用,目录结构和兼容性怎么算。

这些问题,之前大多数人都是手工解决的。

npx skills 做的事,本质上就是把这堆零散、重复、脆弱的手工活,收敛成一套统一的命令行工作流。

它不是在发明 Skill。

它是在给 Skill 生态补一层包管理器。

它到底解决了什么问题?

vercel-labs/skills 在 README 里的定位很直接,它是 open agent skills ecosystem 的 CLI。也就是,它不是某个单一 agent 的附属脚本,而是一套面向整个 Skill 生态的命令行工具。

最直观的用法是这一句

npx skills add vercel-labs/agent-skills

这句话背后的意思很重要。

它不是让你去复制一个文件,不是让你手动进某个隐藏目录里新建文件夹,也不是让你研究每个 agent 各自的 Skill 加载规则。它是在告诉你,Skill 应该像一个包一样被安装、被发现、被更新、被移除。

这里还有一个特别容易让人混淆的点,npx skillsskills.sh 不是两套彼此竞争的产品,而是同一个生态里的两个入口。

skills.sh/ 这个 Skill 查找网站,想必很多人都用过了,它其实就是 Vercel 推出的官方 Skill 发现系统。你会发现,网站里几乎所有 Skill 给出的推荐安装方式,都是 npx skills xxx 这种命令。

npx skills 的具体使用方法,对应的就是这个仓库,https://github.com/vercel-labs/skills。也就是说,skills.sh 更像网页目录和发现层,负责告诉你有什么 Skill 可用。npx skills 则是命令行管理层,负责真正的安装、查找、更新和删除。

如果你熟悉 npm 生态,可以把它理解成,skills.sh 有点像 npm 网站,npx skills 则像 npm 的命令行入口。一个负责发现,一个负责安装和管理。

这就是我觉得它值得认真看的原因。

因为这标志着 Skill 这件事,开始从提示词工程,进入软件分发工程。

它最像什么,为什么这个类比很关键

如果你对 npm、Homebrew、VS Code 插件市场很熟,这个项目的感觉会非常熟悉。

npm 解决的是 JavaScript 包怎么装、怎么升级、怎么共享。
Homebrew 解决的是系统工具怎么装、怎么维护。
npx skills 解决的是,Agent Skill 怎么进入一个可管理的生命周期。

这个类比不是为了图方便。

而是因为任何生态只要开始增长,就一定会遇到四个问题,分发、发现、更新、治理。

早期大家会觉得,Skill 不就是一个 Markdown 文件吗,复制一下不就完了。

但你只要真的在团队里用起来,这种乐观很快就会消失。

你会发现,一个人电脑里有一套 Skill,项目仓库里还有一套 Skill。Claude Code 一套目录,Codex 又是一套目录。有人用软链,有人直接复制。有人改了 Skill 内容,别人那边根本没同步。最后大家都觉得自己在用同一套工作流,实际上跑出来的行为已经完全不一样了。

这时候你就会明白,Skill 的问题从来不是文件格式,而是管理机制。

所以 npx skills 最有价值的地方,不是它支持多少命令,而是它承认了一件事,Skill 已经值得拥有自己的包管理层了。

从使用者视角看,这个 CLI 基本把全生命周期都补齐了

README 里给出的命令其实很像一套标准包管理器。

先是安装

npx skills add vercel-labs/agent-skills

然后你可以列出仓库里有哪些 Skill

npx skills add vercel-labs/agent-skills --list

也可以按名字挑着装

npx skills add vercel-labs/agent-skills --skill frontend-design --skill skill-creator

装完之后,你可以查看当前项目已经安装了什么,默认目录

npx skills list

查看全局安装的 skill,他会扫描这个 ~/<agent>/skills 目录下的 skill

npx skills list -g

如果想找新 Skill,可以搜

npx skills find
npx skills find typescript

如果想升级,就更新

npx skills update
npx skills update my-skill

如果某个 Skill 不想要了,就移除

npx skills remove web-design-guidelines

如果你自己要开始写一个 Skill,还能直接初始化模板

npx skills init my-skill

看到这里你会发现,它做的其实不是某一个单点功能,而是一套完整的 Skill 生命周期管理。

找得到,装得上,看得见,升得动,删得掉,自己还能继续产出新的 Skill。

这件事一旦跑通,Skill 才真的像一个生态,而不是一堆散装说明书。

我觉得这套设计里最聪明的,是三个细节

第一个细节是,多来源安装。

README 里支持的来源很全,GitHub 简写、完整 GitHub URL、仓库里的某个具体 Skill 路径、GitLab、任意 git URL、甚至本地路径都可以。

这意味着它并没有把 Skill 绑定在某一个官方市场里。

你可以从公开仓库装,也可以从团队私有仓库装,还可以从本地目录直接接进去。说白了,它把 Skill 当成一种可分发资产,而不是某个平台的附件。

第二个细节是,project 和 global 两个作用域。

默认是 project 级别,会安装到项目里的 agent 目录,适合跟仓库一起提交,团队成员拉代码就能共享。
加上 -g 之后,就是 global 级别,装到用户目录,适合个人在所有项目里复用。

这个划分非常工程化。

因为团队共享的规范,和个人偏好的工作流,本来就不该混在一起。前者应该进仓库,后者应该留在本机。一个 Skill 管理器如果不处理这件事,迟早会把团队现场搞乱。

第三个细节是,它推荐 symlink,而不是 copy。

README 明确把 symlink 标成 recommended,理由也很现实,agent 目录里只放软链,真正的 Skill 只有一份 canonical copy,后续更新更轻,单一事实源也更清楚。只有在不支持软链的环境里,才退回 copy。

这不是一个花哨的实现细节。

这是在提前解决 Skill 漂移的问题。

Skill 管理真正难的,其实不是安装,而是发现

我觉得 README 里最容易被忽略,但技术上很关键的一段,是 Skill discovery。

它会去很多标准位置里找 Skill。比如仓库根目录、skills/.claude/skills/.agents/skills/.augment/skills/,以及不同 agent 各自常见的目录。

这背后的思路很清楚,它不是强迫所有人迁移到单一结构,而是先承认现实世界已经很乱,然后用工具把这种混乱尽可能统一起来。

更有意思的是,它不仅扫目录,还支持从插件 manifest 里发现 Skill。README 里提到,如果仓库里有 .claude-plugin/marketplace.json.claude-plugin/plugin.json,里面声明过的 Skill 也能被发现。

这件事很重要。

因为生态真正长出来的时候,Skill 的来源不会只有裸目录。它还会藏在插件、市场、工作区、内部工具链里。你如果只支持一个 skills/ 文件夹,那只是做了个文件扫描器。你支持 manifest discovery,才像是在认真做生态兼容层。

而且 README 还提到,如果标准位置都没找到,它会做递归搜索。

这就很像一个成熟的包工具会做的事,不理想化,不假设世界是干净的,先让东西找到再说。

Skill 的最小规范,其实已经非常接近一个可复用软件单元了

在创建 Skill 这一部分,README 给出的要求很简单,一个目录里放一个 SKILL.md,然后 frontmatter 至少要有 namedescription

这看起来很轻。

但我觉得它恰好说明了一个趋势,Skill 正在从 prompt 文本,变成一种带元信息的标准化资产。

name 解决的是标识和引用。
description 解决的是发现和理解。
metadata.internal 这种可选字段,解决的是可见性控制。

这个 internal 设计我很喜欢。

因为现实团队里一定会有两类 Skill,一类是可以公开分享的,另一类是内部实验、半成品、或者只给团队工作流使用的。README 里写得很明确,标成 internal: true 之后,默认不会出现在普通发现流程里,只有设置 INSTALL_INTERNAL_SKILLS=1 才能显示和安装。

这就不是一个单纯的 Markdown 约定了。

这已经开始有一点包生态里 publish channel 和 visibility control 的味道了。

规范先于繁荣,这句话在 Skill 生态里一样成立。

跨 agent 兼容,才是这件事最难也最值钱的地方

README 里有一句话我觉得特别关键,Skills 一般是跨 agent 兼容的,因为它们遵循共享的 Agent Skills specification,但有些特性会带 agent-specific 差异。

后面它还专门列了一个兼容表。

比如 basic skills 大家基本都支持。
allowed-tools 不是每个 agent 都支持。
context: fork 这种能力,README 里只有 Claude Code 标了支持。
hooks 也是少数 agent 才支持。

这其实非常真实。

很多人喜欢把跨平台兼容想象成,一次编写,到处无脑运行。但做过工程的人都知道,现实不是这样的。真正有价值的兼容,往往不是抹平所有差异,而是提供一套共享骨架,再接受局部适配。

vercel-labs/skills 看上去走的就是这个路线。

它没有假装所有 agent 都一样。它承认差异,保留共同规范,然后把安装路径、发现方式、常见兼容点统一掉。

这比追求一个完美抽象更有落地价值。

README 甚至还专门给 Kiro CLI 提醒了一句,装完 Skill 之后还要手动把资源配置加到 .kiro/agents/<agent>.json 里。你会发现它不是那种宣传里看起来很丝滑、实际一碰就碎的工具。它很实在,哪里有坑,直接告诉你。

对团队来说,这工具真正的意义,不是方便一点,而是可以开始沉淀组织资产了

如果你把 npx skills 只看成一个安装器,那就低估它了。

它更大的意义在于,它让 Skill 有机会成为团队级别的基础设施。

以前团队里的开发知识,大多散落在 wiki、PR 评论、口口相传、以及某几个资深同事的脑子里。今天很多团队开始把这些经验写进 agent workflow,变成 code review skill、release note skill、PR 规范 skill、外部系统集成 skill。

但如果没有像样的管理层,这些东西很难长期积累。

因为没法稳定安装,没法统一更新,没法明确哪些是项目共享的,哪些是个人私有的,最后它们还是会退化成几段零散 prompt。

而 project scope 和 global scope 的区分,外加从 git、本地路径、不同 agent 目录到统一命令的封装,等于给团队提供了一个很重要的起点,Skill 可以像 lint 规则、CI 配置、脚手架模板一样,被当成正式工程资产来维护。

我觉得这件事会慢慢变成共识。

未来一个成熟团队,不只是有自己的代码规范、监控体系、测试基建。

它还会有自己的 Skill 仓库。

我对这件事的几个判断

第一,AI 编程接下来的竞争点,不会只在模型能力上。

模型当然重要,但当大家都能调用很强的模型时,真正拉开差距的,往往是工作流怎么被组织起来。Skill 就是这种组织方式里非常关键的一层。

第二,prompt 是一次性的,Skill 是可复用的。

一次 prompt 调得再漂亮,也很难稳定复用给团队。Skill 不一样,它可以带结构、带元信息、带发现机制、带安装方式,甚至带权限和兼容性约束。它天然更适合沉淀成资产。

第三,谁先把 Skill 做成组织资产,谁的 agent 产能就会更稳定。

这里说的稳定,不是偶尔跑出一个惊艳结果,而是日常开发里,大多数任务都能按相对一致的质量完成。对团队来说,稳定比惊艳重要得多。

第四,像 npx skills 这种工具,大概率会越来越像标配。

原因很简单。只要 Skill 生态继续增长,就一定需要包管理器。你可以把它做成 CLI,可以做成市场,可以做成插件层,但它迟早会出现。Vercel 现在做的这件事,本质上是在补 AI Agent 工程化里迟早要补的一块基础设施。

所以我才会觉得,这玩意很可能会变成 AI Agent 生态的标配。

不是因为它今天就完美。

而是因为它切中的问题,太基础了。

Skill 不再只是一个 SKILL.md 文件了。它正在进入一套完整的软件分发生命周期,安装、发现、更新、兼容、治理。

而一旦一个东西开始拥有自己的包管理层,通常就说明,这个生态已经准备往下一阶段走了。

参考资料