乐于分享
好东西不私藏

Skills 到底怎么用?安装、调用、卸载和维护一次讲明白

Skills 到底怎么用?安装、调用、卸载和维护一次讲明白

  很多人开始做 Skills 以后,第一反应通常是:我先把技能装上,能用就行。

但真正进入长期使用阶段,问题很快就会冒出来:技能怎么安装?怎么卸载?装完以后到底对哪些 AI 工具生效?后面修改 SKILL.md,这些工具能不能同步读到?

这些问题如果没搞清楚,后面就很容易乱。比如你以为已经安装成功了,结果工具根本没读到;你以为卸载了,源码还留在原地;你以为给 Codex 装了一份,实际它走的是共享目录;你以为改了技能内容,结果使用的还是旧副本。

所以这篇不只是讲 npx skills 几个命令怎么敲,而是把 Skills 从创建、安装、使用范围、安装方式、卸载到后续维护完整串起来。读完以后,至少要把这几个问题弄明白:

  • init
     创建出来的东西,算不算已经安装?
  • add
     之后,技能到底进了哪个目录?
  • 为什么安装时会出现 Codex、Cursor、Claude Code 这些工具?
  • 选了 Symlink,到底链接的是谁?
  • remove
     删除的是源码,还是安装入口?

重点提示:学习 vercel-labs/skills,不要只背命令。先分清“工具、源码、安装入口”这三件事。

这篇就按一次真实操作过程,把 npx skills 从克隆、初始化、添加、选择安装方式、落盘目录、卸载到全局列表完整走一遍。

先看清楚:skills 是管理工具,不是技能集合

这次操作先从 vercel-labs/skills 开始。截图里可以看到,我在桌面执行了:

git clone https://github.com/vercel-labs/skills.git

终端显示仓库克隆成功,这一步对应的是把 skills 管理工具仓库拉到本地。

这里要先分清楚一个容易混的点:vercel-labs/skills 是技能管理工具,也就是后面执行 npx skills init、npx skills add、npx skills remove 的工具来源;它不是技能集合本身。如果想看别人写好的现成 Skill,应该看 vercel-labs/agent-skills 这类技能仓库。

这里要注意:一个是管理工具,一个是技能内容。它们不是一回事。

init:它只是创建源码模板

接下来执行的是:

npx skills init test_case

终端里出现了 Initialized skill: test_case,并且创建了:

test_case/SKILL.md

这一步很容易误解。很多人看到 Initialized skill,会以为这个 Skill 已经能被 Codex、Claude Code 或 Cursor 识别了,其实不是。

init 只是创建一个源码目录。它生成的是最基础的 SKILL.md 模板,让你后面去写技能说明、触发条件、执行规则;这个阶段还没有安装到任何工具里。

也就是说:

命令
它做的事
init
创建 Skill 源码模板
add
把 Skill 安装到工具能读取的位置
remove
删除已安装的 Skill 入口

先记住这个判断:init 创建的是源码,不是安装入口。

自己建 Skill,真正要写的是 SKILL.md

如果你要建自己的技能,init 只是帮你把文件夹和 SKILL.md 建出来,真正有价值的内容还是要写进 SKILL.md。

一个能用的 Skill,至少要交代清楚几件事:这个技能什么时候触发、适合解决什么问题、输入材料需要什么、执行时按什么步骤判断、输出结果长什么样、哪些内容不能让模型自己补。

比如做一个“功能测试用例生成”的 Skill,就不能只写一句“帮我写测试用例”。更有用的写法,是把测试分析规则沉淀进去:先识别业务流程、角色权限、状态流转和数据规则,再拆正常场景、异常场景、边界场景、权限场景;需求没有说明的规则,标成待确认问题,不要让模型直接替产品下结论。

可以先按这个最小结构来理解:

内容
作用
name
技能名称,方便工具识别
description
触发条件,告诉 AI 什么场景下该用这个 Skill
使用规则
任务怎么分析、先看什么、后看什么
输出要求
最后交付成表格、清单、Markdown 还是其他格式
边界限制
哪些内容不能编、哪些信息要脱敏、哪些结论要标待确认

这里要注意:自建 Skill 的重点不是把提示词写长,而是把你稳定的方法写进去。

add:真正开始安装 Skill

创建完 test_case 之后,下一步才是安装:

npx skills add ./test_case

截图里可以看到,工具先识别了本地来源:Source 是本地目录 /Users/.../Desktop/case/test_case,Local path validated,Found 1 skill,Skill 名称是 test_case。这说明 add 开始处理的是一个已经存在的 Skill 源码目录,而不是凭空创建技能。

这里开始进入真正容易绕的地方。工具会问:

Which agents do you want to install to?

截图下面那一排工具不用拆成很多行看,放在一起更容易理解:Amp、Antigravity、Cline、Codex、Cursor、Gemini CLI、GitHub Copilot、OpenCode、Warp、Zed、Claude Code 等。

这说明 npx skills add 不是只给某一个工具安装。

它会根据 Skill 生态里支持的 agent 类型,让你选择这个 Skill 要对哪些工具可用。

这里要注意:看到 Codex、Cursor、Claude Code,不代表它们都会各自复制一份源码。后面真正落到哪里,还要看安装入口和安装方式。

安装范围:Project 还是 Global

选择 agent 之后,工具继续问安装范围。截图里显示有两个选项:Project 和 Global,这次选择的是 Global。

这个选择影响的是 Skill 的可用范围。Project 就是项目级安装,只在当前项目里使用;Global 是全局安装,会装到用户目录下,跨项目都能用。

所以选择范围时,不要只看哪个顺手,而要看这个 Skill 本身的用途。如果是某个项目自己的接口规则、业务流程、团队约定,放到 Project 更合适;如果是自己长期维护的一套测试技能、写作技能、需求分析技能,后面多个项目都要复用,就更适合放到 Global。

安装方式:Symlink 还是 Copy

下一步是安装方式。截图里显示两个选项:Symlink (Recommended) 和 Copy to all agents,这次选择的是 Symlink。

这个选项比命令本身更重要。

Symlink 的意思是软链接,适合自己长期维护 Skill 源码的场景。因为源文件更新后,安装入口指向的还是同一份内容,后续维护成本更低。

Copy 的意思是复制一份,适合快速试用别人写好的 Skill。但如果后面源目录继续更新,复制出去的那份不一定同步,时间久了就容易出现“源码是一版,工具读到的是另一版”的问题。

这里要注意:如果 Skill 是自己长期维护的,优先考虑 Symlink;如果只是临时试用,Copy 也可以。

安装结果:它落到了 .agents/skills

继续往下,安装摘要里出现了关键结果。这里不是普通提示,而是判断 Skill 最终装到哪里的直接证据:

~/.agents/skills/test_caseuniversal: Amp, Antigravity, Antigravity CLI, Cline, Codex +8 moresymlink -> Claude Code

安装完成后,终端显示:

Installed 1 skill

这张图非常关键。很多人以为指定了 Codex,就一定会安装到:

~/.codex/skills

但截图里实际显示的是:

~/.agents/skills/test_case

这就是 Universal 的含义:一批工具会读取 .agents/skills 这个共享入口。所以 npx skills add 在这里不是“只给某个工具复制一份”,而是把 Skill 放到一个共享入口,再让支持这套规范的工具读取。

重点提示:~/.agents/skills 是共享入口,不是某一个工具的私有目录。

Finder 里也能看到 .agents/skills

终端结果不是唯一证据。Finder 里也能看到 .agents/skills 目录下出现了 test_case,这就和前面的安装摘要对上了。

这一步很适合用来验证安装结果,因为有些时候终端里显示安装成功,但自己不知道文件到底放哪了。

直接去看:

~/.agents/skills

就能确认这个共享入口里有没有对应 Skill。

如果这里没有,再去排查 Project / Global、安装方式、agent 选择是否正确。

Claude Code 目录里也有入口

另一张 Finder 截图显示,~/.claude/skills 下面也出现了 test_case。

这和前面安装摘要能对上。

安装摘要里写了:

symlink -> Claude Code

也就是说,这次安装不只是把 Skill 放进 .agents/skills,还给 Claude Code 创建了对应入口。

这里要注意:共享目录和工具私有目录不是一回事。

可以简单这样理解:

目录
作用
~/.agents/skills
多工具共享入口
~/.codex/skills
Codex 私有入口
~/.claude/skills
Claude Code 私有入口

如果只是看某一个目录,很容易误判 Skill 到底有没有安装成功。

装完以后,在工具里怎么调用

这里要补一个容易被忽略的问题:npx skills 负责的是创建、安装、卸载和查看 Skill,真正调用 Skill 的地方,不是在命令行里,而是在对应的 AI 工具里。

也就是说,当 Skill 已经安装到 .agents/skills 或某个工具自己的 skills 目录之后,Cursor、Claude Code、Codex 这类工具需要先能识别到这个目录里的技能文件,然后才谈得上在工具里调用。

不同工具的入口不完全一样,但大体可以按三类去看:

查看方式
重点看什么
工具内调用入口
有些工具会通过 /、命令面板、技能选择器这类入口,把可用 Skill 列出来
设置界面
有些工具会在 Settings、Agent、Skills、Rules 相关位置展示已加载的技能或规则
底层目录
直接去 .agents/skills、.codex/skills、.claude/skills 这类目录确认源文件和入口是否存在

比如你把一个 Skill 安装给 Cursor 这类第三方工具之后,可以先在工具里试一下对应的调用方式:如果它支持 / 斜杠入口,就看输入 / 后是否能出现技能名;如果它是命令面板或设置页管理,就去对应的 Skills、Agent、Rules 入口里看有没有加载成功。

如果工具界面里没看到,不要马上判断安装失败。先回到底层目录查一遍:这次安装摘要里已经显示 test_case 进入了 ~/.agents/skills/test_case,Finder 里也能看到对应目录;如果某个工具有自己的私有目录,比如 ~/.claude/skills,也要看那个目录里有没有入口。

这里的识别逻辑可以简单理解为:工具会读取自己支持的 skills 目录,再根据 Skill 里的 name、description 和规则内容,决定界面里怎么展示、任务中什么时候调用。不同工具的展示方式可能不一样,但底层要看的东西是一致的:技能文件有没有在它能读取的位置。

重点提示:安装解决的是“文件有没有放到工具能读取的位置”,调用解决的是“工具界面里能不能找到并使用这个 Skill”。排查时先看界面,再看设置,最后看底层目录。

remove:删除的是已安装入口

安装完以后,又执行了卸载:

npx skills remove test_case -g

截图里显示:

  • Found 53 unique installed skill(s)
  • Targeting 72 potential agent(s)
  • Skills to remove: test_case
  • Removal process complete
  • Successfully removed 1 skill(s)

这里也要分清楚:remove 删除的是已经安装到工具入口里的 Skill,不是删除你最开始创建的源码目录。

也就是说,test_case/SKILL.md 这份源码仍然可以继续存在,只是工具不再从安装入口读取它。如果后面还要继续维护这个 Skill,可以保留源码;如果确定不要了,再单独删除源码目录。

重点提示:源码目录和安装入口要分开看。不要把卸载 Skill 理解成删除源码。

list:全局技能到底装了哪些

最后执行的是:

npx skills list -g

截图里能看到全局 Skill 列表,左边是技能名和安装位置,右边是可用 agents。

这个命令很适合排查两个问题:这个 Skill 到底有没有安装,以及它到底对哪些工具可用。

截图里能看到不少 Skill 都在:

~/.agents/skills/...

也有一些在:

~/.codex/skills/...

这正好说明前面讲的那件事:有些 Skill 走共享入口,有些 Skill 走工具私有入口,排查时不能只盯着一个目录看。

这次跑下来,我建议这样记

npx skills 这套命令本身不难,真正容易混的是每个动作背后改的是哪一层。可以先按这个方式记:

动作
作用
init
创建 Skill 源码目录
add
把 Skill 安装到工具能读取的位置
remove
删除已安装入口
list -g
查看全局安装了哪些 Skill

再把目录分成两类来看:

目录
理解方式
技能源码目录
真正维护 SKILL.md 的地方
~/.agents/skills
多工具共享入口
~/.codex/skills
Codex 私有入口
~/.claude/skills
Claude Code 私有入口

这里要注意:不要把安装入口当成源码仓库。

如果是自己长期维护的技能,源码目录要稳定;安装入口只是让工具发现它,不要反过来把安装入口当成主要维护位置。

继续学习可以看这些

vercel-labs/skills:https://github.com/vercel-labs/skills

vercel-labs/agent-skills:https://github.com/vercel-labs/agent-skills

Vercel Agent Skills 文档:https://vercel.com/docs/agent-resources/skills

Vercel Agent Skills 创建与分享教程:https://vercel.com/kb/guide/agent-skills-creating-installing-and-sharing-reusable-agent-context

写在最后

这篇只讲 vercel-labs/skills 这个管理工具。它解决的是:怎么创建 Skill、怎么安装到不同 AI 工具、怎么确认安装位置、怎么卸载,以及后面维护时应该看源码目录还是安装入口。

先记住几个结论:init 不是安装,add 才会写入工具入口,remove 删除的是安装入口;.agents/skills 是共享入口,不是 Codex 或 Claude Code 的私有目录。

如果你后面打算真正把 Skills 用起来,这篇建议先收藏。因为安装、卸载、Project、Global、Symlink、Copy 这些概念,刚看时都不复杂,但只要后面技能多了、工具多了、目录多了,很容易回头忘记当初到底装到了哪里。

觉得这篇对你有帮助,可以顺手点个赞,让我知道这种实操拆解值得继续写。也欢迎关注我,下一篇我会继续拆:一个 Skill 怎么在多个 AI 工具之间共享,以及为什么 symlink、copy、源码目录会影响后续维护。

如果你在安装 Skills 时遇到目录对不上、工具读不到、卸载后还残留入口这类问题,也可以直接在评论区说一下。评论区的问题越具体,后面我越好拿真实场景继续拆。

会用 AI 写测试用例的人,已经开始用 Skills 沉淀工作流