<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>SKILL.md on AI博士 万戈</title>
        <link>https://www.yesmiracle.net/tags/skill.md/</link>
        <description>AI博士万戈的技术博客，聚焦 Agentic AI、AI Infra 与 Agent Security，分享 AI 基础设施与工程落地实践。</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <managingEditor>admin@yesmiracle.net (万戈)</managingEditor>
        <webMaster>admin@yesmiracle.net (万戈)</webMaster>
        <lastBuildDate>Fri, 23 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.yesmiracle.net/tags/skill.md/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Codex 怎么装 Skill：六个扫描位置、三种装法、一份可抄的命令</title>
        <link>https://www.yesmiracle.net/post/20261023-codex-skills-install-guide/</link>
        <pubDate>Fri, 23 Oct 2026 00:00:00 +0000</pubDate>
        <author>admin@yesmiracle.net (万戈)</author>
        <guid>https://www.yesmiracle.net/post/20261023-codex-skills-install-guide/</guid>
        <description>&lt;img src="https://www.yesmiracle.net/post/20261023-codex-skills-install-guide/cover.svg" alt="Featured image of post Codex 怎么装 Skill：六个扫描位置、三种装法、一份可抄的命令" /&gt;&lt;p&gt;想给 Codex 加一个 Skill，搜中文教程，出现频率最高的操作是把想要的文件夹复制到 Codex 的技能目录。这个动作本身没错，但「复制到哪」这句话，各家说法不一样：有说 &lt;code&gt;~/.codex/skills/&lt;/code&gt; 的，有说 &lt;code&gt;.agents/skills/&lt;/code&gt; 的，还有让人先 clone 一个仓库再挑目录的。&lt;/p&gt;
&lt;p&gt;这篇按官方文档、内置安装器 &lt;code&gt;$skill-installer&lt;/code&gt; 的 SKILL.md 原文、以及开放标准的规范，把当前该怎么做理一遍。命令可以直接抄，那张六个位置的表可以当清单用。顺带说两处官方材料自己没对齐的地方。&lt;/p&gt;
&lt;h2 id=&#34;先分清-skill-是什么&#34;&gt;先分清 Skill 是什么&lt;/h2&gt;
&lt;p&gt;Codex 里的 Skill，定义比很多人想的窄：&lt;strong&gt;一个目录，里面有一个 &lt;code&gt;SKILL.md&lt;/code&gt;&lt;/strong&gt;，其余全都可以没有。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;my-skill/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── SKILL.md          # 必需：元数据 + 指令
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── scripts/          # 可选：可执行代码
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── references/       # 可选：文档
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── assets/           # 可选：模板、资源
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;└── agents/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    └── openai.yaml   # 可选：外观与依赖
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;SKILL.md&lt;/code&gt; 是 YAML frontmatter 加 Markdown 正文。frontmatter 里只有两个字段是必需的，而这两个字段的约束比想象中严：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;字段&lt;/th&gt;
          &lt;th&gt;必需&lt;/th&gt;
          &lt;th&gt;约束&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;最长 64 字符，只能用小写字母、数字和连字符，不能以连字符开头或结尾，不能有连续两个连字符，&lt;strong&gt;而且必须和父目录同名&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;是&lt;/td&gt;
          &lt;td&gt;1 到 1024 字符，要同时写清「做什么」和「什么时候用」&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;license&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;否&lt;/td&gt;
          &lt;td&gt;许可证名，或指向目录里的许可证文件&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;compatibility&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;否&lt;/td&gt;
          &lt;td&gt;最长 500 字符，环境要求（目标产品、系统依赖、是否需要联网）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;metadata&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;否&lt;/td&gt;
          &lt;td&gt;任意键值对，键和值都是字符串&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;allowed-tools&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;否&lt;/td&gt;
          &lt;td&gt;空格分隔的预批准工具列表，实验性&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最后那条「必须和父目录同名」是最常见的第一号坑。你的目录叫 &lt;code&gt;pdf-tools&lt;/code&gt;，frontmatter 里写 &lt;code&gt;name: pdf-processing&lt;/code&gt;，这个 Skill 就是加载不起来，而且 Codex 通常不会给你一句明确的报错。&lt;/p&gt;
&lt;p&gt;那为什么值得费这个劲装 Skill，而不是把同样的话写进 &lt;code&gt;AGENTS.md&lt;/code&gt;？因为它的加载方式不一样。&lt;/p&gt;
&lt;p&gt;Codex 用的是&lt;strong&gt;渐进式披露&lt;/strong&gt;：启动时只把每个 Skill 的名字、描述和文件路径列进上下文，等你真要干某件事，它判断某个 Skill 对得上，才去读那个 &lt;code&gt;SKILL.md&lt;/code&gt; 的完整内容。没被匹配上的 Skill 一点都不占上下文。&lt;/p&gt;
&lt;p&gt;这个初始列表有预算：默认最多占上下文窗口的 &lt;strong&gt;2%&lt;/strong&gt;，上下文窗口未知时按 &lt;strong&gt;8,000 字符&lt;/strong&gt;算。装得太多的话，Codex 会&lt;strong&gt;先截短描述&lt;/strong&gt;；再多就会&lt;strong&gt;直接从初始列表里省掉一些 Skill，并给一个警告&lt;/strong&gt;。想调预算，在配置里设 &lt;code&gt;skills.max_context_tokens&lt;/code&gt;，上限 10,000 tokens。&lt;/p&gt;
&lt;p&gt;最后这句值得记：装了五十个 Skill 不是本事，能保证常看的那个不被挤出列表才是。&lt;/p&gt;
&lt;h2 id=&#34;装到哪里六个扫描位置&#34;&gt;装到哪里：六个扫描位置&lt;/h2&gt;
&lt;p&gt;官方文档给了一张扫描位置表，我原样搬过来，照着抄就行：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;范围&lt;/th&gt;
          &lt;th&gt;位置&lt;/th&gt;
          &lt;th&gt;建议用途&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;REPO&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$CWD/.agents/skills&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;你启动 Codex 的当前目录。团队可以把只跟某个微服务或模块相关的 Skill 签进仓库&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;REPO&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$CWD/../.agents/skills&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;在 Git 仓库里启动、CWD 的上一级。适合多层嵌套目录里的共享区域&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;REPO&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$REPO_ROOT/.agents/skills&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;仓库最顶层。放全仓库任何子目录都能用到的 Skill&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;USER&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;$HOME/.agents/skills&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;个人目录，适用于你在任何仓库里都会用到的 Skill&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ADMIN&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;/etc/codex/skills&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;机器或容器级的共享位置。适合 SDK 脚本、自动化，以及给机器上每个用户都装一份默认 Skill&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;SYSTEM&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;随 Codex 由 OpenAI 内置&lt;/td&gt;
          &lt;td&gt;面向广泛受众的 Skill，比如 &lt;code&gt;skill-creator&lt;/code&gt; 和 plan 类技能，所有人开箱可用&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;三件需要额外记住的事。&lt;/p&gt;
&lt;p&gt;第一，仓库范围内看的是一整条路径：&lt;strong&gt;从当前工作目录一路向上扫到仓库根&lt;/strong&gt;，每一层的 &lt;code&gt;.agents/skills&lt;/code&gt; 都会被看到。&lt;/p&gt;
&lt;p&gt;第二，如果两层里有两个 Skill 的 &lt;code&gt;name&lt;/code&gt; 相同，Codex &lt;strong&gt;不会合并&lt;/strong&gt;，两个都会出现在选择器里。这种情况最容易让人误判：你以为后一个覆盖了前一个，其实是两个并列。&lt;/p&gt;
&lt;p&gt;第三，Codex &lt;strong&gt;支持符号链接的技能文件夹&lt;/strong&gt;，扫描时会跟随链接目标。对想把一批 Skill 集中放一个目录、再往各个项目里软链的人来说，这条省事。&lt;/p&gt;
&lt;p&gt;⚠️ 还有一个方向性的提醒：&lt;code&gt;.codex/&lt;/code&gt; 这个目录是用来放 &lt;code&gt;config.toml&lt;/code&gt; 这类&lt;strong&gt;配置&lt;/strong&gt;的，不要凭直觉把技能文件夹建到 &lt;code&gt;~/.codex/skills/&lt;/code&gt; 去。规范路径是 &lt;code&gt;.agents/skills&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;三种装法按推荐顺序&#34;&gt;三种装法，按推荐顺序&lt;/h2&gt;
&lt;h3 id=&#34;方式一手动放目录最稳推荐&#34;&gt;方式一：手动放目录（最稳，推荐）&lt;/h3&gt;
&lt;p&gt;一次安装就是一个文件夹。没有隐藏状态，没有版本解析，出问题肉眼可见。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 项目级：只对这个仓库生效&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p .agents/skills
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -R /path/to/my-skill .agents/skills/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 用户级：任何仓库都能用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mkdir -p ~/.agents/skills
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cp -R /path/to/my-skill ~/.agents/skills/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;从 GitHub 上拿的话，先只拉那一个子目录会干净很多：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone --depth &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; --filter&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;blob:none --sparse https://github.com/&amp;lt;owner&amp;gt;/&amp;lt;repo&amp;gt; /tmp/skill-src
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd /tmp/skill-src &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git sparse-checkout set &amp;lt;path/to/skill&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;方式二用内置的-skill-installer&#34;&gt;方式二：用内置的 &lt;code&gt;$skill-installer&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Codex 自带一个 SYSTEM 级的 Skill 叫 &lt;code&gt;skill-installer&lt;/code&gt;，它的 SKILL.md 我读了，行为写得很具体。&lt;/p&gt;
&lt;p&gt;在 Codex 里直接这么说：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$skill-installer gh-address-comments
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;它会按名字去 curated 列表里找并安装。装实验性的技能要给出路径：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$skill-installer install https://github.com/openai/skills/tree/main/skills/.experimental/create-plan
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;它的实际行为有两处值得先知道：&lt;/p&gt;
&lt;p&gt;它&lt;strong&gt;装到 &lt;code&gt;$CODEX_HOME/skills/&amp;lt;技能名&amp;gt;&lt;/code&gt;&lt;/strong&gt;，默认就是 &lt;code&gt;~/.codex/skills&lt;/code&gt;。也就是说，官方这套安装器自己默认落在 &lt;code&gt;.codex&lt;/code&gt; 目录下，而不是前面那张表里的 &lt;code&gt;.agents/skills&lt;/code&gt;。这两处的不一致我放到后面单独讲。&lt;/p&gt;
&lt;p&gt;它&lt;strong&gt;默认走直接下载&lt;/strong&gt;，遇到鉴权或权限错误才回退到 git 稀疏检出；如果目标是私有仓库，可以靠已有的 git 凭据，也可以给 &lt;code&gt;GITHUB_TOKEN&lt;/code&gt; 或 &lt;code&gt;GH_TOKEN&lt;/code&gt;。另外，&lt;strong&gt;如果目标目录已经存在，它会直接中止&lt;/strong&gt;，不会覆盖。想覆盖就先手动删。&lt;/p&gt;
&lt;p&gt;支持的参数有几个：&lt;code&gt;--repo &amp;lt;owner&amp;gt;/&amp;lt;repo&amp;gt;&lt;/code&gt;、&lt;code&gt;--path &amp;lt;路径&amp;gt;&lt;/code&gt;（可以一次给多个）、&lt;code&gt;--url&lt;/code&gt;、&lt;code&gt;--ref &amp;lt;ref&amp;gt;&lt;/code&gt;（默认 &lt;code&gt;main&lt;/code&gt;）、&lt;code&gt;--dest &amp;lt;路径&amp;gt;&lt;/code&gt;、&lt;code&gt;--method auto|download|git&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;补一句取数来源：&lt;code&gt;$skill-installer&lt;/code&gt; 默认是从 &lt;code&gt;openai/skills&lt;/code&gt; 这个仓库的 &lt;code&gt;.curated&lt;/code&gt; 目录按名字取技能的，所以那个仓库仍然是官方安装器的默认来源。它最近的定位变过，作为示例和对外贡献的入口已经搬到插件那边，但这不影响你用它装东西。&lt;/p&gt;
&lt;h3 id=&#34;方式三打包成插件要分发给别人就用这个&#34;&gt;方式三：打包成插件（要分发给别人就用这个）&lt;/h3&gt;
&lt;p&gt;如果只是自己或团队用，前两种够了。一旦要把 Skill 发给仓库外的人，官方给的答案是把 Skill 做成插件再发。&lt;/p&gt;
&lt;p&gt;插件就是把 Skill 和（可选的）MCP server 依赖打包成一个可安装单元。官方提供了 &lt;code&gt;@plugin-creator&lt;/code&gt; 来脚手架一个插件，生成的结构大致是这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;my-plugin/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── .codex-plugin/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;│   └── plugin.json      # 始终会创建
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── .mcp.json            # 可选
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── .app.json            # 可选
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── skills/              # 把你的 Skill 文件夹放这儿
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── hooks/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;├── scripts/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;└── assets/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;清单里会声明 &lt;code&gt;skills: &amp;quot;./skills/&amp;quot;&lt;/code&gt;，所以只要把做好的 Skill 文件夹放进 &lt;code&gt;skills/&lt;/code&gt; 就能被引用。文档还提了一句兼容性：新的可移植格式把 OpenAI 特有的呈现配置放在根 &lt;code&gt;plugin.json&lt;/code&gt; 的 &lt;code&gt;extensions.com.openai&lt;/code&gt; 下，而老的 &lt;code&gt;.codex-plugin/plugin.json&lt;/code&gt; 仍然作为兼容回退被支持。&lt;/p&gt;
&lt;h2 id=&#34;两处官方材料自己没对齐的地方&#34;&gt;两处官方材料自己没对齐的地方&lt;/h2&gt;
&lt;p&gt;我不想把这两处含糊过去，因为你照着做的时候很可能撞上。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一处是安装目录。&lt;/strong&gt; 官方那份 Build skills 文档的扫描表把 &lt;code&gt;USER&lt;/code&gt; 范围定为 &lt;code&gt;$HOME/.agents/skills&lt;/code&gt;；而 &lt;code&gt;skill-installer&lt;/code&gt; 自己的 SKILL.md 明明白白写着「安装到 &lt;code&gt;$CODEX_HOME/skills&lt;/code&gt;（默认 &lt;code&gt;~/.codex/skills&lt;/code&gt;）」。一个指向 &lt;code&gt;.agents&lt;/code&gt;，一个指向 &lt;code&gt;.codex&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;我的处理办法是：&lt;strong&gt;想跨工具通用的，手动放到 &lt;code&gt;.agents/skills&lt;/code&gt;&lt;/strong&gt;，因为这是那个开放标准的位置，Claude Code 之类的工具也认；&lt;strong&gt;用 &lt;code&gt;$skill-installer&lt;/code&gt; 装的，就接受它在 &lt;code&gt;~/.codex/skills&lt;/code&gt; 里&lt;/strong&gt;，反正它自己认得自己的目录。真要较真，装完之后把目录移到 &lt;code&gt;.agents/skills&lt;/code&gt; 再验证一遍，成本很低。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二处是生效时机。&lt;/strong&gt; Build skills 文档说「Codex 会自动检测 Skill 变更，如果更新没出现就重启 Codex」；而 &lt;code&gt;openai/skills&lt;/code&gt; 的 README 直接说「安装完 Skill 之后重启 Codex 以加载新技能」。一个说自动，一个说重启。&lt;/p&gt;
&lt;p&gt;实操结论很简单：&lt;strong&gt;没出现就重启&lt;/strong&gt;。这不是一个值得纠结的问题，但它说明这套机制还在快速演进，别把任何一处的措辞当成保证。&lt;/p&gt;
&lt;h2 id=&#34;怎么确认装上了&#34;&gt;怎么确认装上了&lt;/h2&gt;
&lt;p&gt;装完别急着信，验证一下。&lt;/p&gt;
&lt;p&gt;在 Codex CLI 或 IDE 扩展里跑 &lt;code&gt;/skills&lt;/code&gt;，或者直接输入 &lt;code&gt;$&lt;/code&gt;，会列出当前可见的 Skill。列表里出现，说明位置和 frontmatter 都对。&lt;/p&gt;
&lt;p&gt;还要分清两种调用方式：&lt;strong&gt;显式调用&lt;/strong&gt;是你在提示里直接点它（Codex 里用 &lt;code&gt;/skills&lt;/code&gt; 或 &lt;code&gt;$&lt;/code&gt;，ChatGPT 里用 &lt;code&gt;@&lt;/code&gt;）；&lt;strong&gt;隐式调用&lt;/strong&gt;是 Codex 自己判断当前任务匹配某个 Skill 的 &lt;code&gt;description&lt;/code&gt;，然后去加载。&lt;/p&gt;
&lt;p&gt;隐式匹配失败通常是 &lt;code&gt;description&lt;/code&gt; 写得太泛，跟 Codex 本身没关系。给一个最小验收流程：让 Codex 复述一下这个 Skill 要求它做的步骤，再让它跑一个只读的小任务。复述得出来，说明 &lt;code&gt;SKILL.md&lt;/code&gt; 真被读进去了。&lt;/p&gt;
&lt;p&gt;几个高频故障，照着排：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;症状&lt;/th&gt;
          &lt;th&gt;原因&lt;/th&gt;
          &lt;th&gt;处理&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;列表里根本没有&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;name&lt;/code&gt; 和目录名不一致，或目录层级放错&lt;/td&gt;
          &lt;td&gt;让两者同名；确认它在六个位置之一&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;有，但从来不被自动用上&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;description&lt;/code&gt; 太泛或没写触发词&lt;/td&gt;
          &lt;td&gt;把使用场景和关键词前置到描述开头&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;装了很多之后有些不见了&lt;/td&gt;
          &lt;td&gt;初始列表预算被打满&lt;/td&gt;
          &lt;td&gt;用 &lt;code&gt;skills.max_context_tokens&lt;/code&gt; 调预算；或删掉不用的 Skill&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;改完没反应&lt;/td&gt;
          &lt;td&gt;缓存或需要重启&lt;/td&gt;
          &lt;td&gt;重启 Codex&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;自己写一个最短路径&#34;&gt;自己写一个，最短路径&lt;/h2&gt;
&lt;p&gt;三条路，按省事程度排：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$skill-creator&lt;/code&gt; 是内置的创建器，会问你三件事：这个 Skill 做什么、什么时候该触发、以及只要指令还是也要带脚本（默认只要指令）。&lt;/p&gt;
&lt;p&gt;如果那个工作流你更擅长演示而不是描述，用 Record &amp;amp; Replay：它录下你的操作，检查步骤，然后起草出一个可复用的 Skill。&lt;/p&gt;
&lt;p&gt;最后是手写，一个文件夹加一个 &lt;code&gt;SKILL.md&lt;/code&gt; 就行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-md&#34; data-lang=&#34;md&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;name: my-skill
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;description: 干什么，以及在什么情况下该用、什么情况下不该用。
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;给 Codex 执行的指令，一步一步写。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;写 &lt;code&gt;description&lt;/code&gt; 的原则只有一条：&lt;strong&gt;它决定了隐式匹配，所以要写成「给匹配器看的」，不是「给人看的」&lt;/strong&gt;。把触发词前置，因为 Codex 在装得太多时会先截短描述，前面那几个词是唯一稳的部分。反过来，明确写出「什么时候不该触发」也很值钱，不然这个 Skill 会在不该出现的时候冒出来。&lt;/p&gt;
&lt;h2 id=&#34;装第三方-skill-之前请读一遍它的内容&#34;&gt;装第三方 Skill 之前，请读一遍它的内容&lt;/h2&gt;
&lt;p&gt;这一点我想单独说，因为它是这套机制里风险最高的地方。&lt;/p&gt;
&lt;p&gt;装一个 Skill，等于让 Codex 按&lt;strong&gt;别人写的指令&lt;/strong&gt;干活；而且 Skill 目录允许带 &lt;code&gt;scripts/&lt;/code&gt;，那是会真被执行的可执行代码。这正好是「技能供给链」这一类攻击的入口，站内之前写过 ClawHavoc 那批恶意 Skill 的事，335 个恶意技能、30 万个 Agent 暴露在风险里，机制跟这个是一样的。&lt;/p&gt;
&lt;p&gt;我给三条可操作的建议：装之前把 &lt;code&gt;SKILL.md&lt;/code&gt; 和 &lt;code&gt;scripts/&lt;/code&gt; 读一遍，尤其是脚本里有没有往外发数据、有没有读凭据文件；把来源固定到具体 commit，别跟着 &lt;code&gt;main&lt;/code&gt; 漂；不用了就删掉，一个不再使用的 Skill 只是一份留在磁盘上的信任。&lt;/p&gt;
&lt;h2 id=&#34;写在最后&#34;&gt;写在最后&lt;/h2&gt;
&lt;p&gt;给 Codex 装 Skill 这件事本身很简单，一个文件夹复制过去就完事了。麻烦的从来是「我照的那份教程是不是还成立」。&lt;/p&gt;
&lt;p&gt;这次查下来最值得抄的是那张六个位置的表，它把「装到哪」从各家说法里收敛成了一份清单。另外官方文档内部有两处对不上（安装目录、生效时机），我按能实测的方式处理了，也在正文里标了出来。&lt;/p&gt;
&lt;p&gt;所以这篇的用法是：前面那张六个位置的表可以直接抄，&lt;code&gt;$skill-installer&lt;/code&gt; 的行为按上面写的预期去验，然后&lt;strong&gt;每次照教程做之前，先确认那份教程对应的版本还在不在&lt;/strong&gt;。这套东西还在动。&lt;/p&gt;
&lt;p&gt;相关阅读：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20261018-codex-daemon-default-trust/&#34; &gt;《Codex CLI 默认装常驻守护进程引发反弹》&lt;/a&gt;：同一个工具的另一面。那篇讲默认行为与信任边界，这篇讲能力怎么装进来。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260820-agent-supply-chain-poisonedskills/&#34; &gt;《Agent Supply Chain Attack: PoisonedSkills 解析》&lt;/a&gt;：技能供给链的攻击面，装第三方 Skill 前值得先读。&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260122-orchestrating-agent-skills-in-opencode-tailoring-resume-in-workflow/&#34; &gt;《在 OpenCode 里编排 Agent Skills》&lt;/a&gt;：同一套 &lt;code&gt;SKILL.md&lt;/code&gt; 标准在另一个工具里的用法，可以对照着看目录约定的差异。&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
