我在交叉使用了 claude code 和 codex 后,对于这些 IDE工具的使用有了一些心得。
首先是很火的 skills,虽然它们都叫 Skills,但其实不是一回事。
想研究的起因是一件很小的事。
一开始我照着教程,让 Codex 自己去安装几个 Skills。装完,感觉应该没问题了,就开始正常用。
然后发现 AI 并不会每次都调用这些 Skills。
有时候用,有时候不用,完全看心情。我就直接问它:你为什么不用这个 Skill?
它想了一下,然后自己写了一个 AGENTS.md 文件,把这个 Skill 的说明加进去,告诉自己"下次记得用这个"。
我当时有点懵——装了还不算数,还得再写一遍文档告诉它这东西存在?

然后我去 Claude Code 里做了同样的事。没有这个问题。
Skill 装进去,该调用的时候就调用,不需要我再补一个说明文件。
这才让我开始认真想:同样叫 Skill,这两个东西到底有什么不一样?
后来我又注意到另一件事。很多 Skill 文件的开头,会写明"这个 Skill 是给哪个 Agent 使用的"。
我之前一直没在意,后来看多了,就在想:不同平台的 Agent 用同一套 Skill,会不会有区别?
带着这个问题,我跟 AI 聊了很久,才把里面的原理搞大概清楚。

先说 Codex 那个问题为什么会发生。
最大的区别,其实Codex 的 Skill 更像是是可复用的 workflow 。它发现 Skill 的方式,是从当前目录往上扫 .agents/skills 文件夹,匹配到了才加载正文。
但"匹配"这个动作,靠的就是 Skill 文件里那段描述这个 Skill 是干什么的说明。如果 description 写得模糊,或者当前任务跟描述对不上,Codex 就当它不存在。
所以 AI 有时候用有时候不用,不是随机的。是任务描述没有触发 Skill的匹配逻辑。
它后来自己补写 AGENTS.md,是在走另一条路:把"应该什么时候调用这个 Skill"写进持久规则层,不靠描述匹配,直接明文规定。
所以这才是 Codex 的正确用法
AGENTS.md 管规则,Skills 管 workflow,两层分开,各管各的。我一开始以为装好就完事了,其实少走了关键的一步。

Claude Code 为什么没这个问题?
因为它的 Skill 机制不一样。
Claude Code 的 Skill 是可调用的能力单元,它和整个能力系统绑得很紧
CLAUDE.md、subagent、plugin,是一套组合
触发方式有两种,一种是 /skill 手动调用,另一种是自动触发。
而且可以细粒度控制:disable-model-invocation: true 就只允许手动触发,user-invocable: false 就菜单隐藏但 Claude 自己还能调。
这些参数说明一件事:Claude Code 的 Skill 从一开始就在能力系统里注册好了,不需要靠 description 匹配,也不需要另外写文档提醒它"这个东西存在"。
装进去就是系统的一部分。

然后是那些写了"给哪个 Agent 使用"的 Skill,它们在不同平台上,确实有区别。
OpenClaw 的 Skill 是运行时的调度层。它在 session 启动的时候就做了环境快照,可以注入 env 变量和 API Key,可以做 load-time gating
意思是如果运行环境里缺了某个配置文件或者依赖,这个 Skill 直接不加载,不是加载了然后报错,是压根就不出现。
所以专门写"给哪个 Agent 用",在 OpenClaw 里是有实际意义的,它影响的是这个 Skill 在哪个运行环境下才会被激活。
在 Claude Code 和 Codex 里,这行说明更多是给人看的,帮你记住这个 Skill 的用途,对系统本身的影响没有 OpenClaw 那么直接。

综合来看,三个平台,三个层级。
Claude Code 的是:这个能力,边界在哪,谁可以调用
Codex 的是:这个 workflow,怎么复用,规则和执行分开管
OpenClaw 的是:这个 Agent 跑起来的时候运行环境该长什么样?
我最开始踩的那个坑,其实就是把 Codex 当成了 Claude Code 用
以为装进去就完事,没有意识到 Codex 的 Skill 需要靠说明书触发,或者配合 AGENTS.md 明文规定调用时机。
少了让它知道"该用这个"的那一步
搞清楚这个,再去写 Skill,才知道自己在做什么。
结尾附上 3 月 skills 下载排行榜,顺便下期讲一下我是怎么挑选 skills 以及最推荐的 skills 是哪几个。
做内容不易,还得麻烦大家多多支持,点个赞评个论,感谢大家。

夜雨聆风