我本地主要用 Codex、Claude Code 和 Cursor。它们都支持类似 SKILL.md 的能力扩展:把稳定的操作步骤、工具用法、项目约定写成 skill,让 agent 在合适的时候直接调用。
我不想给每个工具各维护一份 skill。这个仓库就是为了解决这件事:
GitHub 仓库管源头
vercel-labs/skills 负责安装
Codex / Claude Code / Cursor 只负责使用工具本身的完整说明放在。这份 README 只写我的使用约定。
1. 我想解决什么
- 同一个 skill 不在多个 agent 目录里重复维护。
- 自己写的 skills 能同时给 Codex、Claude Code、Cursor 用。
- 公开 skills 有一个明确源头,方便更新和分享。
- 私人路径、公司上下文、发布细节和公开内容分开。
- 不破坏各个 agent 自己的加载方式。
一开始我想过把 Codex、Claude Code、Cursor 的 skills 目录都 symlink 到同一个目录。后来放弃了。
原因很简单:不同 agent 的 Skill Spec 不完全一样。
- Claude Code 可能有自己的 frontmatter 或权限约定。
- Codex 有
.systemskills、插件 skills 和自己的加载逻辑。 - Cursor 也有自己的目录和上下文管理方式。
- 第三方 skills 虽然都叫
SKILL.md,但很多默认只面向某一个 agent。
所以我不让所有 agent 共享同一个物理目录。更稳的方式是:保留各 agent 的原生目录,用安装器把同一份源头装到正确位置。
2. 目录设计
本地统一放在:
/Users/liguwe/skills/
skills/ # 公开技能库
832-skills/ # 私有 / 上下文技能库对应两个 GitHub 仓库:
github.com/liguwe/skills # 公开库
github.com/liguwe/832-skills # 私有或个人上下文库公开库放我自己维护、适合公开复用的能力:
- PNG 压缩、二维码生成这类通用工具能力。
- 技术文档翻译成中文 VitePress 站点这类可复用工作流。
公开库不放这些东西:
- 第三方、vendor、工具官方或别人维护的 skills。
- 公司内部上下文。
- 私有路径、token、cookie、SSH key、API key。
- 只能在我本机或公司环境里跑通的流程。
私有库放上下文:
- 个人默认路径。
- 私有仓库和发布流程。
- 公司或项目上下文。
- 不适合公开的 prompt、runbook、检查清单。
- 带权限假设的自动化流程。
这个边界很重要。全部公开有泄露风险,全部私有又不方便复用。
3. 为什么用 vercel-labs/skills
我用 vercel-labs/skills 做安装和分发。它支持 GitHub、SSH、Git URL 和本地路径。
常见来源:
# GitHub shorthand
npx skills add liguwe/skills
# 完整 GitHub URL
npx skills add https://github.com/liguwe/skills
# SSH URL,适合私有仓库
npx skills add git@github.com:liguwe/832-skills.git
# 本地路径,适合开发和本机安装
npx skills add /Users/liguwe/skills/skills它也能一次指定多个 agent:
npx skills add /Users/liguwe/skills/skills \
-g \
-a codex \
-a claude-code \
-a cursor \
--skill '*' \
-y参数含义:
-g:装到全局目录,不装到当前项目。-a codex:装给 Codex。-a claude-code:装给 Claude Code。-a cursor:装给 Cursor。--skill '*':安装仓库里的全部 skills。-y:跳过交互确认。
我的默认约定是 不要加 --copy。
不加 --copy 时,CLI 会优先用 symlink/link。agent 目录里读到的是源仓库里的同一份 skill,改完源文件,下次 agent 读取就是最新内容。
这更适合我的真实流程:
- 新写的 skill 经常要边用边调试。
- 调试时只改
/Users/liguwe/skills/skills或/Users/liguwe/skills/832-skills。 - Codex、Claude Code、Cursor 都能直接读到同一份最新内容。
- 不需要调试完成后再复制或同步一轮。
所以我的规则是:
日常安装默认 link/symlink
调试和维护都改源仓库
只有要固定快照或环境不支持 symlink 时才用 --copy4. 初始化两个技能库
本地根目录:
mkdir -p /Users/liguwe/skills公开库:
git clone git@github.com:liguwe/skills.git /Users/liguwe/skills/skills私有库:
git clone git@github.com:liguwe/832-skills.git /Users/liguwe/skills/832-skills之后只在这两个仓库里维护 skills,不直接去 Codex、Claude Code 或 Cursor 的安装目录里改文件。
5. 安装到不同 agent
安装公开库:
npx skills add /Users/liguwe/skills/skills \
-g \
-a codex \
-a claude-code \
-a cursor \
--skill '*' \
-y安装私有库:
npx skills add /Users/liguwe/skills/832-skills \
-g \
-a codex \
-a claude-code \
-a cursor \
--skill '*' \
-y如果从远端安装私有库,用 SSH URL:
npx skills add git@github.com:liguwe/832-skills.git \
-g \
-a codex \
-a claude-code \
-a cursor \
--skill '*' \
-ySSH URL 可以复用本机 GitHub SSH 权限,适合 private repo。
6. Agent 专属 skill
不是所有 skill 都要装给所有 agent。
只适合 Claude Code 的 skill,只装给 Claude Code:
npx skills add /Users/liguwe/skills/832-skills \
-g \
-a claude-code \
--skill my-claude-only-skill \
-y只适合 Codex 的 skill,只装给 Codex:
npx skills add /Users/liguwe/skills/832-skills \
-g \
-a codex \
--skill my-codex-only-skill \
-y我的原则:
- 通用 skill 可以装给多个 agent。
- agent 专属 skill 精确装给对应 agent。
- 不手工改 agent 的系统内置 skills。
- 不迁移 Codex
.systemskills、plugin cache、vendor imports。
7. 日常新增一个 skill
后续我自己新增或维护 skills,说明层默认用中文写,包括 SKILL.md、references/ 和 agents/openai.yaml。
这些内容可以保留英文:
- skill 名
- 命令和参数
- 代码
- 文件路径
- 包名
- API 名称
- 专有名词
新增公开 skill:
cd /Users/liguwe/skills/skills
mkdir my-new-skill
$EDITOR my-new-skill/SKILL.md新增私有 skill:
cd /Users/liguwe/skills/832-skills
mkdir my-private-skill
$EDITOR my-private-skill/SKILL.md最小 SKILL.md:
---
name: my-new-skill
description: Describe when this skill should be used.
---
# My New Skill
Write the workflow, rules, commands, and constraints here.检查能不能被 CLI 发现:
npx skills add /Users/liguwe/skills/skills --list安装到本机 agent:
npx skills add /Users/liguwe/skills/skills \
-g \
-a codex \
-a claude-code \
-a cursor \
--skill my-new-skill \
-y提交公开库:
cd /Users/liguwe/skills/skills
git add my-new-skill README.md
git commit -m "Add my new skill"
git push提交私有库时同理,只在 /Users/liguwe/skills/832-skills 里操作。
8. 公开库里的 skills
目前公开库只放我自己创建和维护的 skills:
png-optimizeqr-code-generatetranslate-docs-to-zh-vitepressxiaoyuzhou-audio-download
translate-docs-to-zh-vitepress 里有我的发布偏好,比如 VitePress、GitHub Pages、liguwe.site。但它本质上还是一个可以公开复用的工作流:把技术文档翻译成中文站点并部署到 GitHub Pages。
所以我的分类标准不是“有没有个人偏好”,而是:
核心能力能公开复用,就可以放公开库
涉及私有上下文和权限假设,就放私有库9. 安全检查
公开库提交前检查:
- 没有 token、cookie、SSH key、API key。
- 没有公司内部域名、内部 API、内部业务流程。
- 没有不能公开的个人路径或部署机器信息。
- 没有默认执行危险命令。
- 没有搬运第三方、vendor 或别人维护的 skills。
description写清楚什么时候应该使用这个 skill。
私有库也不提交真实密钥。private repo 只适合放上下文、流程和约定,不适合放 secret。
10. 验证命令
检查公开库 skills:
npx skills add /Users/liguwe/skills/skills --list检查私有库 skills:
npx skills add /Users/liguwe/skills/832-skills --list检查全局安装:
npx skills ls -g -a codex -a claude-code -a cursor检查两个仓库状态:
git -C /Users/liguwe/skills/skills status --short --branch
git -C /Users/liguwe/skills/832-skills status --short --branch重新安装公开库:
npx skills add /Users/liguwe/skills/skills \
-g \
-a codex \
-a claude-code \
-a cursor \
--skill '*' \
-y重新安装私有库:
npx skills add /Users/liguwe/skills/832-skills \
-g \
-a codex \
-a claude-code \
-a cursor \
--skill '*' \
-y11. 最后的原则
源头在 GitHub repo
安装靠 skills CLI
调试和维护都改源仓库
agent 通过 link 消费同一份 skill公开库沉淀我自己维护的可公开能力。私有库沉淀个人上下文。第三方、vendor、工具官方 skills 继续留在它们自己的上游来源、插件、系统 skills 或 agent 原生安装流程里。
这个方式比“每个工具各维护一份”简单,也比“所有工具共享同一个目录”稳。