当多个 AI 工具都需要读取同一套 Skills 时,最直接的做法是复制多份文件。但这种方式很快会产生一个问题:你修改了其中一份,却忘了同步其他目录。
更稳妥的思路是把 Skills 放进一个真实目录,再让各工具目录通过 Windows 的目录符号链接指向它。这样,内容只有一份,入口可以有多个。
想解决的问题
假设一个项目同时被多个 AI 编程工具使用:
{项目根目录}
├─ .claude
│ └─ skills
└─ .codex
└─ skills
如果两个 skills 都是真实目录,就需要长期维护两份内容。更适合共享的结构是:
{项目根目录}
├─ .ai
│ └─ skills ← 唯一真实目录
├─ .claude
│ └─ skills ← 指向 .ai\skills
└─ .codex
└─ skills ← 指向 .ai\skills
工具仍然从自己的默认位置读取文件,但操作系统会把访问转到同一个目录。
为什么不用普通快捷方式
Windows 的 .lnk 快捷方式主要用于桌面和资源管理器。许多命令行工具不会把它当成目录,而是把它视为一个普通文件。
目录符号链接属于文件系统层面的映射。对大多数程序来说,它和普通目录的使用方式相同,因此更适合配置共享。
第一步:整理唯一来源
先在项目中创建集中目录:
cd /d "{项目根目录}"
mkdir ".ai\skills"
如果旧目录已经有内容,先把文件复制到 .ai\skills,确认内容完整并做好备份。不要在没有备份的情况下直接删除旧目录。
第二步:移走旧目录
链接名称不能与已有目录重名。确认备份和迁移完成后,可以把旧目录重命名:
ren ".claude\skills" "skills.backup"
ren ".codex\skills" "skills.backup"
相比立即删除,重命名更容易回滚。等新结构稳定使用一段时间后,再决定是否清理备份。
第三步:创建目录链接
mklink 是 CMD 的内置命令,/D 表示创建目录符号链接:
mklink /D "{项目根目录}\.claude\skills" "{项目根目录}\.ai\skills"
mklink /D "{项目根目录}\.codex\skills" "{项目根目录}\.ai\skills"
路径中有中文或空格时,双引号不能省略。如果出现权限错误,可以使用管理员身份打开 CMD,或检查系统的开发者模式和符号链接权限设置。
第四步:验证是否真的共享
不要只看命令有没有报错。可以在真实目录中创建一个临时文件:
{项目根目录}\.ai\skills\link-check.txt
然后分别进入 .claude\skills 和 .codex\skills,确认两个入口都能看到并读取这个文件。最后从任一入口修改文件,再确认其他入口中的内容同步变化。
验证完成后删除临时文件。
如何回滚
符号链接本身不保存真实内容,删除链接不会删除它指向的 .ai\skills:
rmdir "{项目根目录}\.claude\skills"
rmdir "{项目根目录}\.codex\skills"
然后把之前的备份目录改回原名即可:
ren ".claude\skills.backup" "skills"
ren ".codex\skills.backup" "skills"
回滚前仍应检查路径,确保操作对象是链接或备份目录,而不是唯一的真实数据目录。
这套方式适合什么场景
- 多个 AI 工具共享 Skills、提示词或规则文件
- 多个开发工具读取同一套配置
- 希望保留各工具默认目录,同时避免重复维护
- 配置需要频繁修改,复制同步已经成为负担
它不适合需要各工具独立修改、独立版本控制的配置。共享之前,先确认这些内容的语义确实一致。
最后
这个方案真正减少的不是磁盘占用,而是配置分叉。把唯一来源放在一个明确的位置,再为不同工具提供兼容入口,维护成本会低很多。
但文件系统操作最重要的仍然是可回滚:先备份、再替换、最后验证。只要这三个步骤没有省略,调整目录结构就不会变成一次不可逆的冒险。