如何统一管理团队中的项目级 Skill

1. 项目 Skills 的重要性

Skill 是 Agent 工作过程中的重要文件,编写一个完善的 Skill 能够更好的指导 Agent 去正确的理解和处理工作。

Skill 分为全局和项目级别:

  • 全局 Skill:如果你的 Skill 是用于优化你个人的工作流、或者是增强 Agent 能力的,比如浏览器相关的能力、PDF 读取的能力、Superpowers,那么这些 Skill 的定位应该是全局的,否则会对团队他人的 Agent 工作流造成影响,这是不被允许的;
  • 项目 Skill:如果某个 Skill 是专门为项目定制的,比如正确添加一个前端页面的工作流程、进行数据库 Migration 的工作流程。亦或者是某些 Skill 是仅为了提升当前项目的开发准确性的,比如当前项目是使用了 Nextjs 技术栈,那么安装官方的 Nextjs skill 有助于 Agent 更好的理解 Next 项目的最佳实践, 那么这个 Skill 就可以作为项目 Skill 安装;

对于团队项目来说,团队成员应该为了 Agent 工作的准确性编写各种 Skill,如单测、浏览器自动化回归、日志查询、项目上线部署,这些繁杂的流程都应该抽离为 Skill 与团队共享。这些内容对于 Agent 理解项目是非常有用的,我们在 Vibe Coding 时也不需要对 Agent 进行大量的启发干预再让其干活。

2. 如何在团队间共享 Skills

目前存在的困境

在一个团队中,团队成员会使用各种各样的 Code Agent 工具,这是没法统一的,此外每个 Agent 工具读取 Skills 的路径也是不一样的,这就会出现这样的问题:

团队成员 A 使用的是 claude code,其 Skills 编写和读取的路径为 .claude/skills,而团队成员 B 使用的是 cursor,其 Skills 路径为 .cursor/skills。团队成员 A 和团队成员 B 之间编写的 Skills 在各自的 Code Agent 工具中是无法通用的。如果要想统一维护就需要在不同的目录中进行跳转,并且项目目录下会残留一堆 Code Agent 使用的”专属目录“,这对强迫症来说简直不能忍受。

使用 skills 进行管理

为了保持 Skills 的统一性,vercel-lab 编写了 skills 这个安装器,意图是将 skills 进行类似 npm package 那样进行标准化管理,我们可以借助这个工具标准化 Skill 的创建与安装,并实现团队间的共享。

对于 Skills 的安装,如果这个 Skills 是按照标准流程发布的,那么就可以直接使用 skills 指令进行安装,如:

1
npx skills add vercel-labs/agent-skills

在安装过程中,一个 skills 仓库中可能包含了多个 skills,cli 会询问你具体安装哪个,按需选择即可:

1
2
3
4
5
6
◆  Select skills to install (space to toggle)
│ ◻ deploy-to-vercel (Deploy applications and websites to Vercel. Use when the ...)
│ ◻ vercel-cli-with-tokens
│ ◻ vercel-react-native-skills
│ ◻ web-design-guidelines

然后 cli 会询问你具体应用给哪个 Agent,但是在选择前你会看到 cli 提示你会始终创建一个 .agents/skills 目录,并且将 skills 安装到这个目录下。这是因为 vercel 试图创建一个标准化的 skills 目录来让所有的 Code Agent 工具读取,就是 .agents 目录,目前已经有数个 Agent 支持了,比如 Cursor、Codex、Opencode 等。但是仍有一些不愿意支持,比如 Claude Code,因此对于不支持的 Code Agent 工具,你需要在下面进行手动勾选。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
◇  55 agents
◆ Which agents do you want to install to?

│ ── Universal (.agents/skills) ── always included ────────────
│ • Amp
│ • Antigravity
│ • Cline
│ • Codex
│ • Cursor
│ • Deep Agents
│ • Dexto
│ • Firebender
│ • Gemini CLI
│ • GitHub Copilot
│ • Kimi Code CLI
│ • OpenCode
│ • Warp

│ ── Additional agents ─────────────────────────────
│ Search:
│ ↑↓ move, space select, enter confirm

│ ❯ ○ AiderDesk (.aider-desk/skills)
│ ○ Augment (.augment/skills)
│ ○ IBM Bob (.bob/skills)
│ ● Claude Code (.claude/skills)
│ ○ OpenClaw (skills)
│ ○ CodeArts Agent (.codeartsdoer/skills)
│ ○ CodeBuddy (.codebuddy/skills)
│ ○ Codemaker (.codemaker/skills)
│ ↓ 32 more

│ Selected: Amp, Antigravity, Cline +11 more

然后会询问将这个 Skill 安装为项目还是全局,如果是项目级别,那么 .agent 目录会在项目目录进行创建,否则会创建在操作系统的用户目录下:

1
2
3
4
◆  Installation scope
│ ● Project (Install in current directory (committed with your project))
│ ○ Global

然后 skills 会要求你选择 skill 的安装方式,如果是 Copy to all agents,那么它会将 skill 复制到每个你勾选的 Code Agent 工具的 skill 目录下,这样就不能统一更新了。所以推荐的做法是选择 Symlink,他会只在 .agent/skills 目录下安装一份 Skill,然后会将 skill 以系统软连接的方式链接到每个 Code Agent 工具的专属 skill 目录下面:

但是目前存在一个 bug,你的 Code Agent 的专属目录必须先创建出来(比如如果你是用 claude code 就要先创建 .claude 目录),否则你使用 Symlink 的方式去安装就会发现只生成了一个 .agent 目录。

1
2
3
4
◆  Installation method
│ ● Symlink (Recommended) (Single source of truth, easy updates)
│ ○ Copy to all agents

安装完成后你会发现项目中还生成了一个 skills-lock.json 的文件,他规定了所有 skill 的安装版本,防止团队成员间安装的开源 skill 版本不一致造成的错误。

我是否应该上传 Code Agent 的专属目录以及 .agent 目录?

对于 Code Agent 的专属目录是否应该上传到 git 仓库有太多的讨论了:

  • 支持派则认为上传这些目录这有助于避免重复造 Agent 的轮子,比如你为 Claude 写的插件、指令等内容属于团队的公共资产。
  • 反对派认为每个人的 Code Agent 可能会有一些个性化配置,上传专属目录会影响到他人,并且让项目根目录存在大量的 .claude .cursor .codex 等与工程无关的目录。

我的观点是 Code Agent 的专属目录最好上传,而 .agent 目录作为统一的管理中心则必须上传。对于重复的内容应该通过设置软链接的方式引用同一份文件(比如 skills、CLAUDE.md、AGENT.md),而不是复制粘贴。同时,如果团队统一使用的是 UNIX/Linux,将这些软链上传到 git 再拉到本地之后软链会自动重建的,不需要每次都手动建立这些软链。

简而言之,所有 skills 都应该存放在 .agent/skills 目录,使用某个 Code Agent 的用户应该通过系统软链接的方式将其放到自己 Code Agent 工具读取 skills 的目录下。如果你是用 npx skills 安装,就像我们前面讲的这一步工具会自动帮你完成,但是对于手动编写的、其他人添加的 skills,这一步就要用户自己来了,或者直接让 Agent 干:

1
帮我通过创建软连接(symlink)的方式,将 `.agent/skills` 中的所有 skill 都链接到当前 Agent 的项目级 skills 目录下。

其他方案

目前还有一种方案,是将 skills 作为 npm 包进行安装到 node_modules 目录下,然后使用一个 sync 指令自动将 node_modules 中安装的 skill 写入到 Code Agent 的读取 skill 的目录中,有兴趣的话可以参考 skills-npm,这个项目,不过目前 vercel-lab/skills 已经集成了这个功能,使用 experimental_sync 即可体验。