别再复制 Skills 文件夹了,我做了一个叫 Kitestring 的小工具

-20260617173511.png|500](https://mmbiz.qpic.cn/mmbiz_png/fkDSDWnukB1o40uOcyfib8HazsMrAjQgThfnyYM1S8ia8ANUIqgTgQkHB6q8XzxMVdPsfldEjkQ5oFHibURjDXVNckaqnwpnoh1EYwuYHw9G2E/640?wx_fmt=png&from=appmsg&_t=1783211059781)
如果我把这个 skill 复制到好几个工具目录里,那我每改一次,就要想起自己复制过哪些地方。漏掉一个目录,那个工具读到的就是旧版本。再过几周,我自己都不一定分得清哪个才是最新的。

从 Github 上下载的开源项目也是同理,作者更新后,我可以快速拉取最新的改动,但仍然需要手动一份份复制到其他工具目录中。目录越多,复制越容易漏。

还有一个更麻烦的问题:Skill 的迭代需求,最容易出现在日常使用过程中。

当我在某个项目里调用 Agent,发现某条规则不够准确时,最理想的方式是直接让当前 Agent 基于当下的上下文帮我修改 Skill。但如果 Skill 的真实存放路径和当前项目路径完全分离,我就需要先总结问题,再切换到保存 Skill 的目录里修改。

这一步看起来不大,但会明显打断工作流。我真正想要的状态是:**无论在哪个工具、哪个项目中修改 Skill,最后改到的都应该是同一份源文件。**

## symlink 像风筝线,真实文件只有一份

更合适的方案是使用 symlink。

你可以把 symlink 近似理解成 Windows 上的「创建快捷方式」,或 macOS 上的「制作替身」。它看起来像一个文件夹,但真实内容存放在别的地方。

和普通快捷方式相比,symlink 对很多命令行工具更友好。大多数软件会直接把它当成真正的文件夹来处理。

这样一来,真实文件夹只需要保留一份,放在你真正想维护的位置。其他工具目录里放的不是复制品,而是指向源文件夹的 symlink。

我只需要修改`mp-article-writor`的源文件,Claude Code、Codex、Copilot CLI 顺着 symlink 读到的就是最新内容。

我不用再想自己复制过哪些目录,也不用担心某个工具还在使用上周的旧版本。

symlink 带来的另一个好处,是我可以把所有 Skill 统一保存在一个本地文件夹中,同时让不同工具读取同一份内容。这样既能保持文件管理清晰,也方便我随时迭代自己的工作流。

问题在于,symlink 本身不够顺手。

它通常需要通过命令行创建:

`ln -s 真实文件夹路径 目标文件夹路径`

如果我同时使用 Claude Code、Copilot CLI、Codex、Gemini CLI,每个工具又有用户级路径和项目级路径,就需要反复执行类似命令。

路径要记,目录要找,创建完还要确认有没有生效。

所以我做了 Kitestring。

它的目标不是发明新的 Skill 格式,也不是重新做一个 Skill 市场。它只做一件事:帮你把已有 Skill 的源文件和各个工具目录之间的 symlink 管起来。

## Kitestring 能把已有 Skill 找出来

很多人真正需要这个工具时,本地早就已经有一堆 skill 了。

它们可能在 Claude Code 或是 Codex 的目录里,可能来自 Claude marketplace,也可能是某个 GitHub 仓库 clone 下来的文件夹。

所以 Kitestring 支持几种导入方式,尽量让你不用从零开始整理。如果你已经在使用 symlink 管理 skill,别担心,导入时会自动识别并标识,同时也会追溯真正的 skill 源文件一并导入。

别再复制 Skills 文件夹了,我做了一个叫 Kitestring 的小工具

**第一种方式,从工具的用户级默认读取路径导入。**

Kitestring 内置了 Claude Code、Copilot CLI、Gemini CLI、Codex 的默认路径,也支持通用的 Agent Folder。

比如 Claude Code 默认路径是:

`~/.claude/skills/`

Codex 默认路径是:

`~/.codex/skills/`

如果这些目录里已经有 Skill,Kitestring 会尝试识别并纳入管理。

对于 Claude Marketplace 下载的 Skill,我也做了专门识别。适配 Claude Marketplace 的 Skill 项目,路径往往是类似这样的层级:

`~/skills/article2ticktick/skills/article2ticktick`

它和一般的 Skill 文件夹路径不同。

所以 Kitestring 默认会扫描`~/.claude/plugins/marketplaces`,在有限深度内递归查找`SKILL.md`,同时跳过`~/.claude/plugins/cache/`这类缓存目录。

只要 Skill 位于 Kitestring 已配置的扫描路径下,并且目录内有`SKILL.md`,Kitestring 会尽量把它识别出来,而不是要求用户先理解每个平台的目录习惯。

**第二种方式,是从本地文件夹导入。**

Kitestring 可以直接从本地文件夹中扫描 Skill。无论这个文件夹里只有一个 Skill,还是包含多个 Skill,它都会递归查找`SKILL.md`,读取里面的`name`和`description`,并把真实文件夹记录为 Skill 源目录。

像我自己有一个独立的`skills`文件夹,用来保存自己创建的 Skill,以及从 GitHub 下载的开源 Skill,就可以用这种方式批量导入。

别再复制 Skills 文件夹了,我做了一个叫 Kitestring 的小工具

**第三种方式,是创建项目并导入。**

一个独立开发项目、一个 Obsidian 仓库,都可以视作 Kitestring 里的「项目」。

在同一个项目中,我们可能会使用多种 Agent 工具。比如我自己就经常同时使用 Claude Code、Codex 和 Copilot CLI。对于某些常用 Skill,每个工具都应该能读到。

通过项目导入后,Kitestring 可以从项目维度查看工具和 Skill 的关系。你可以看到这个项目下有哪些 Skill,也可以看到它们是否已经分发到对应工具路径中。

这个能力很适合探索新工具。

比如我已经在某个项目里用 Claude Code 打磨出一组常用 Skill,现在想试试 Codex,就不用手动复制目录。只要在项目视图里把这些 Skill 分发到 Codex 的项目级路径即可。

别再复制 Skills 文件夹了,我做了一个叫 Kitestring 的小工具

## Kitestring 只做本地管理

导入 Skill 之后,Kitestring 会记录它的源路径、来源类型、Git 信息和分发记录。

你可以看到一个 Skill 来自本地文件夹,还是来自 GitHub。你也可以看到它当前是否位于 Git 仓库中,以及它已经被分发到了哪些工具路径。

这里有一个重要边界:Kitestring 是本地 Skill 管理工具。

导入意味着在 Kitestring 中创建 Skill 记录。原文件仍然保存在原来的位置,Kitestring 不会默认把它复制到自己的项目目录里。

直接从 GitHub URL 导入时除外。这种方式下,Kitestring 会把仓库 clone 到:

`~/.kitestring/repos/`

别再复制 Skills 文件夹了,我做了一个叫 Kitestring 的小工具

我一开始不想把自动更新做得太激进。

Skill 里经常包含工作流、提示词、路径约定和个人习惯。它不是缓存文件,不能被随便覆盖。

如果 Skill 来自 GitHub,或者本地目录本身就是一个 Git 仓库,Kitestring 可以尝试拉取更新。但目前使用的是比较保守的策略:只处理干净工作区里的 fast-forward 更新。

如果存在未提交文件、未跟踪文件,Kitestring 会拒绝拉取。

如果分支已经分叉,Kitestring 也不会强行合并或覆盖。

对 Skill 来说,我更希望更新是可控的,而不是自动替你做危险决定。

## 分发就是创建 symlink

Kitestring 里的「分发」,本质上就是在指定路径创建 symlink。

我最常做的动作很简单:选中一个 Skill,在对应工具路径上点击分发按钮,Kitestring 就会创建 symlink,并记录这条分发关系。

比如我把`mp-article-writor`分发到 Claude Code,也分发到 Codex。Kitestring 会在对应目录下创建 symlink。取消分发时,它只会移除目标路径里的 symlink,不会删除 Skill 源文件。

如果你需要自定义路径,也可以手动输入目标目录。这个功能对不完全遵循默认路径的工具,或者个人自定义配置很有用。

别再复制 Skills 文件夹了,我做了一个叫 Kitestring 的小工具

以前我遇到 Skill 没生效时,常常要在几个目录之间来回检查。到底是 Claude Code 没读到,还是 Codex 目录里没有,还是我复制的是旧版本,还是名字写错了。

Kitestring 至少把这件事变成一个可以被看见的状态。你能看到一个 Skill 分发到了哪里,也能看到某个工具路径下是否已经存在对应 symlink。

## 项目级分发适合多 Agent 工具项目

一个项目里可能同时使用 Claude Code 和 Codex。它们各自有项目级 skill 路径,比如`.claude/skills/`和`.codex/skills/`。如果一个项目级 skill 对这两个工具都有用,Kitestring 可以把它分发到对应路径。

在项目视图里,你可以看到这个项目下的所有 Skill,以及它们在各个工具路径里的状态。

你可以对单个 Skill 分发,也可以按某个工具列,把当前项目内尚未分发的 Skill 逐个分发过去。

这个功能的价值在于,**它把「这个项目使用哪些 Skill」和「这些 Skill 是否已经被各个 Agent 工具读到」放在同一个视图里。**

对我来说,这比手动记路径可靠得多。

别再复制 Skills 文件夹了,我做了一个叫 Kitestring 的小工具

## 现在可以下载试用

Kitestring v0.1.0 现在已经发布,目前仍处于 Early Preview 阶段。

这个版本还不完美。配置格式、交互细节、工具兼容范围,都可能在后续版本里继续调整。

首个公开版本提供 macOS、Windows 和 Linux 的安装包。

如果你已经在使用 Claude Code、Codex、Copilot CLI、Gemini CLI,并且本地已经积累了越来越多 Skills,Kitestring 现在已经可以帮你处理这些工具的默认路径导入、Skill 识别和 symlink 分发。

它现在做的事情很明确:

把散落在不同目录里的 Skill,重新变成一份源文件和几根清楚的线。

企业落地新闻资讯智能化改造

天猫超市数据AI实践总结

2026-7-3 12:08:40

AI知识库企业落地新闻资讯

谷歌发布 Knowledge Catalog 云服务和 OKF 协议,发力 Agent 知识治理

2026-7-3 12:35:10

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
购物车
优惠劵
搜索