前言
最近我同时在用 Claude Code、Codex、Cursor 和 Antigravity。它们都支持 Skills,但各自的 Skills 又放在不同的目录里。
刚开始 Skills 不多时,复制几份也没什么。后来装的 Skills 越来越多,问题也就来了:这个 Agent 多了一份,那个 Agent 少了一份;有些是真实文件,有些是软连接;更新一个 Skill 后,还要想一想其他目录是不是也该更新。
更麻烦的是,有些 Agent 适合用软连接,有些却并不支持。比如 Antigravity 的 Skills 默认放在 ~/.gemini/config/skills,实际使用时更适合直接复制。如果全部写死成同一种同步方式,看似省事,最后反而容易把目录弄得更乱。
那有没有一种简单的方法,可以把这些 Skills 放在一个地方管理,同时又照顾不同 Agent 的习惯呢?
于是我做了 Agent Skills Manager:一款用于管理 Skills 的 Skill,以及一个可选的 TUI。
写完之后我发现,这个麻烦并不只属于我用的那四个 Agent。所以它现在支持 21 个国内外常见 Agent:除了上面四个,还有 Gemini CLI、GitHub Copilot CLI、Windsurf、opencode、Kiro、Pi,以及 Qoder、Trae、CodeBuddy、Kimi Code、iFlow、Qwen Code、通义灵码、MiMo Code 等国内工具。
GitHub 地址:https://github.com/ccckfg/agent-skills-manager
一个中央仓库
这个项目的思路其实很简单:把 ~/.agent/skills 作为中央仓库,真正需要长期保存和维护的 Skills 都放在这里,各个 Agent 的目录只负责“使用”。
Claude Code、Codex 和 Cursor 默认使用 Link 模式。这样一个 Skill 只需要维护一份,中央仓库更新后,Agent 看到的也是新版本。Antigravity 则使用 Copy 模式,把中央仓库中的 Skill 复制到它自己的目录。
Agent 一多,路径本身也成了要处理的问题。有些工具在不同版本里换过目录,比如 Antigravity 的 Skills 既可能在 ~/.gemini/config/skills,也可能在 ~/.gemini/antigravity/skills;CodeBuddy 的 MCP 配置更是有三个历史文件名。所以每个 Agent 都可以配置多个候选路径,程序优先使用本机上真实存在的那一个,都不存在时再回退到官方推荐的位置。
还有一个位置值得单独说:~/.agents/skills。Cline、Zed、Warp、Amp、Replit、Pi、Kimi Code 和 GitHub Copilot CLI 都会读它。往这里同步一次,等于同时照顾了好几个工具,所以我把它也作为一个条目列了出来。
程序不会简单地把用户原来的目录一锅端。第一次整理时,它可以先把已有的真实文件导入中央仓库,再按照每个 Agent 的模式进行同步。如果目录里既有软连接又有真实文件,也可以逐个比较和转换。
我还专门给脚本加了 diff。因为同步之前最重要的事情不是立刻复制,而是先知道两边到底差在哪里:哪些 Skill 缺失、哪些多余、哪些文件内容不同、哪些只是文件类型发生了变化。把差异看清楚后再操作,会安心很多。
为什么既有 Skill,又有 TUI
一开始我想过只做一个命令行工具,但这样有个很现实的问题:用户把一个 Skill 文件夹复制给 Agent 后,Agent 真的能直接完成操作吗?
所以现在整个 Skill 不只是一堆 Markdown。它自己的目录中就带有可执行脚本,AI Agent 可以直接调用 doctor、status、diff、import 和 sync 等命令。脚本只使用 Python 标准库,不依赖 TUI;默认先输出计划和 JSON 结果,只有明确使用 --apply 时才真正修改文件。
也就是说,只复制这个 Skill,Agent 就已经可以帮你整理和同步。TUI 则是给人看的:当你想随时检查每个 Agent 装了哪些 Skills、还缺哪些 Skills,打开一个界面显然更直观。
TUI 长什么样
点开某个 Agent 后,界面会分成左右两部分:左边是当前 Agent 已有的 Skills,右边是它和中央仓库之间的差异。按空格可以多选,按 A 添加,按 D 移除。

右边这一栏是双向的。中央仓库有、这个 Agent 还没有的,按 A 添加过去;反过来,这个 Agent 独有、中央仓库还没收录的,会被单独置顶成一组,按 I 就能导入中央仓库,之后它就变成普通的中央 Skill,可以再同步给其他 Agent。导入是复制,Agent 里的原目录保持不变。
这一类“只有某个 Agent 才有”的 Skill,以前只能靠命令行才能发现。加上这一组之后我才注意到,自己的 Claude Code 里还躺着一个从来没同步出去的 Skill。
当 Skills 很多时,一长串目录其实也不容易看。因此程序会把拥有固定前缀的 Skills 聚成一组,比如 gsd- 和 gsap- 系列。整个系列既可以展开查看,也可以直接整组选中、添加或移除。以 . 开头的隐藏 Skills 会被忽略,避免误碰 Codex 等 Agent 自带的系统 Skill。
支持的 Agent 变多以后,总览列表本身也需要排一排。本机已经发现的 Agent 排在前面,没有发现的排在后面并压暗显示,不必在一堆“未发现”里找自己那几个。
我还顺手改了“待处理”的判定。最早只要有 Skill 缺失就算待处理,结果 21 个 Agent 几乎每一个都在报警——可是没有把每个 Skill 都装到每个 Agent 上,本来就是正常的选择。现在缺失只是单独的一列计数,只有软链接断了、存在尚未纳管的 Skill,或者读配置出错,才值得你专门去处理。
这套界面使用 Textual 编写,可以在 Windows 和 macOS 上运行。配色参考了 Claude Code 的暖色终端风格,但没有堆太多装饰,重点还是让人一眼看清“现在有什么”和“中央仓库还缺什么”。
小窗口也应该能用
TUI 最开始在全屏下看起来不错,但窗口缩小时,“移除所选”和“添加所选”两个大按钮会占掉不少高度,真正用来显示 Skills 的空间反而不够。
后来我给界面做了响应式布局。窗口高度较小时会自动隐藏大按钮和部分说明,把已选数量压缩到标题栏;高度更小时,还会继续隐藏 MCP 详情等次要信息。常用操作仍然可以通过快捷键完成。

另外,Skills 一多,扫描目录也可能拖慢启动。现在 TUI 会先尽快画出第一屏,再在后台进行快速扫描;能够根据文件信息判断时,就不会一上来计算所有文件的哈希。实际打开时不会再长时间只看到一块黑屏。
Agent 从 4 个加到 21 个之后,这件事的代价被放大得非常明显。我本机的中央仓库有 100 个 Skill、七十多 MB,命令行的 status 一度要跑 353 秒——因为同一份中央 Skill 被每个 Agent 各自重新哈希了一遍。加上缓存,再把 status 的默认行为改成只看“在不在、软链接有没有断”,同一条命令现在是 1.1 秒。真的需要逐字节比较时,用 diff,或者给 status 加上 --verify。
安全问题
文件管理工具最怕的不是功能少,而是一个操作把原来的文件弄丢了。
因此 Agent Skills Manager 默认采用“先看后改”的方式。脚本的修改命令默认只给出计划,真正执行需要显式添加 --apply。替换或移除现有内容之前也会先做备份,隐藏的系统 Skills 不参与管理。TUI 里的添加、移除和导入同样都会先弹确认框;移除并不是永久删除,原目录会被移动到 ~/.agent/backups/ 下面。
MCP 目前主要用于展示和读取状态。不同 Agent 的 MCP 配置结构差别较大,而且里面经常包含 Token 等敏感信息,因此项目不会为了追求“一键同步”而粗暴改写配置。需要修改时,更适合由 Skill 用提示词指导 Agent 读取对应格式,再由用户确认。
安装
如果已经安装了 uv,可以直接运行:
uv tool install git+https://github.com/ccckfg/agent-skills-manager.git
安装完成后,在终端输入:
agent-skills-manager
即可打开 TUI。
如果只想让 AI Agent 帮忙管理,不需要图形界面,也可以直接把仓库中的 skill/agent-skills-manager 文件夹复制到对应 Agent 的 Skills 目录。之后 Agent 会按照 Skill 中的说明调用附带脚本。这个脚本只要求系统里有 Python 3.9 以上的版本,不需要额外安装任何第三方包。
目前的局限
这个项目现在主要解决的是本地 Skills 的集中管理,以及 MCP 配置的状态展示。它并不是一个云端 Skills 商店,也不会替用户自动处理所有 Agent 的私有配置。
另外,软连接在不同系统、不同工具中的表现并不完全一致,所以项目为每个 Agent 单独保留了 Link 或 Copy 模式,而不是假设一种方案可以适合所有环境。
支持的 Agent 多了以后还有一个现实问题:这些工具自己也在改目录。项目里每个 Agent 的路径都是我按官方文档和本机实际安装逐个核对的,但难免会有过时或者不适用的情况。如果某个 Agent 明明装了却显示“未发现”,多半就是它换了位置,欢迎提 Issue 告诉我。
总结
Agent Skills Manager 的功能并不复杂。它只是把原本散落在许多目录中的 Skills 收到一个中央仓库,再用适合每个 Agent 的方式分发出去;AI 想操作时可以直接使用 Skill 中的脚本,人想检查时则可以打开 TUI。
但对我来说,这正好解决了一个每天都会遇到的小麻烦。至少以后再安装或更新 Skill 时,不需要面对好几个目录反复复制,也不用猜究竟哪一份才是最新的。
项目已经开源,如果你也同时使用多个 AI Agent,可以前往 GitHub 项目页面试一试。如果遇到某个 Agent 的目录规则不同,或者 TUI 在你的终端里显示不正常,也欢迎提交 Issue。
参与讨论