很多人开始做 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 | |
add | |
remove |
先记住这个判断:init 创建的是源码,不是安装入口。
自己建 Skill,真正要写的是 SKILL.md
如果你要建自己的技能,init 只是帮你把文件夹和 SKILL.md 建出来,真正有价值的内容还是要写进 SKILL.md。
一个能用的 Skill,至少要交代清楚几件事:这个技能什么时候触发、适合解决什么问题、输入材料需要什么、执行时按什么步骤判断、输出结果长什么样、哪些内容不能让模型自己补。
比如做一个“功能测试用例生成”的 Skill,就不能只写一句“帮我写测试用例”。更有用的写法,是把测试分析规则沉淀进去:先识别业务流程、角色权限、状态流转和数据规则,再拆正常场景、异常场景、边界场景、权限场景;需求没有说明的规则,标成待确认问题,不要让模型直接替产品下结论。
可以先按这个最小结构来理解:
name | |
description | |
这里要注意:自建 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 | |
~/.claude/skills |
如果只是看某一个目录,很容易误判 Skill 到底有没有安装成功。
装完以后,在工具里怎么调用
这里要补一个容易被忽略的问题:npx skills 负责的是创建、安装、卸载和查看 Skill,真正调用 Skill 的地方,不是在命令行里,而是在对应的 AI 工具里。
也就是说,当 Skill 已经安装到 .agents/skills 或某个工具自己的 skills 目录之后,Cursor、Claude Code、Codex 这类工具需要先能识别到这个目录里的技能文件,然后才谈得上在工具里调用。
不同工具的入口不完全一样,但大体可以按三类去看:
/、命令面板、技能选择器这类入口,把可用 Skill 列出来 | |
.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_caseRemoval 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 | |
add | |
remove | |
list -g |
再把目录分成两类来看:
SKILL.md 的地方 | |
~/.agents/skills | |
~/.codex/skills | |
~/.claude/skills |
这里要注意:不要把安装入口当成源码仓库。
如果是自己长期维护的技能,源码目录要稳定;安装入口只是让工具发现它,不要反过来把安装入口当成主要维护位置。
继续学习可以看这些
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 时遇到目录对不上、工具读不到、卸载后还残留入口这类问题,也可以直接在评论区说一下。评论区的问题越具体,后面我越好拿真实场景继续拆。
夜雨聆风