1. 从一次技能失效说起:Codex Agent Skills 到底解决什么问题
你可能遇到过这种场景:团队里有一套固定的代码审查流程,每次都要在对话里重复粘贴同样的提示词,步骤一多就容易漏掉某一步。Codex Agent Skills 就是为这类重复性工作流准备的机制,它把「做什么、什么时候做、怎么做」写进一个标准目录,让 Codex 在合适的时机自动加载并执行。简单说,Skill 是给 Codex 写的标准操作流程,Plugins 则是把这套流程分发给别人的打包格式。
我第一次接触这套系统时,最困惑的不是怎么写指令,而是搞不清 SKILL.md、skill-creator、Plugins 三者的关系。实测下来可以这样理解:SKILL.md 是技能的核心文件,skill-creator 是帮你生成这个文件的交互式工具,Plugins 是当你想把技能分享给其他开发者时的分发容器。三者串起来就是一条从编写到落地的完整路径。
这套机制适合谁?如果你在团队里维护固定的代码规范、部署流程、文档模板,或者你希望把某个高频操作固化下来减少重复输入,Agent Skills 就值得花时间配置。它同时支持 Codex CLI、IDE 扩展和 Codex App,本地开发和仓库内共享都能覆盖。
Codex 采用渐进式信息披露机制管理上下文窗口。启动时只加载每个技能的名称、描述和文件路径作为初始列表,只有决定使用某个技能时才读取完整的 SKILL.md。初始列表的字符数被限制在模型上下文窗口的约 2%,上下文窗口未知时限制在 8000 字符。这意味着技能数量多了之后,description 的编写质量直接决定匹配准确率。
2. TaoToken 前置准备:把 API Key 和 Base URL 配到位
在动手写 SKILL.md 之前,需要先把 Codex 的模型调用通道配好。TaoToken 提供兼容的 API 接入方式,你可以在官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 了解接入方式,API 地址是 https://taotoken.net/api。这一步的目的是让 Codex 能正常调用模型,否则后面技能注册了也无法验证。
配置的核心是三件套:Base URL、API Key、Model ID。以 Codex 的配置文件为例,路径通常在~/.codex/config.toml。你需要先到控制台创建 API Key,地址是 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite ,创建后复制保存,这个 Key 只显示一次。
拿到 Key 之后,在 config.toml 里写入模型提供方配置。下面是一个可复制的片段,注意把sk-你的实际Key替换成真实值:
# 文件路径:~/.codex/config.toml model = "claude-sonnet-4-20250514" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"这里env_key指定的是环境变量名,你需要把 Key 写进环境变量而不是硬编码在配置文件里。在终端执行:
export TAOTOKEN_API_KEY="sk-你的实际Key"如果你用的是 Windows PowerShell,对应命令是$env:TAOTOKEN_API_KEY="sk-你的实际Key"。写入 shell 配置文件(如~/.bashrc或~/.zshrc)可以让它持久生效。
Model ID 的选择上,如果你主要做代码类任务,可以选 Claude 系列中偏 coding 的型号;如果只是验证技能是否触发,任意可用模型都能跑通。配置完成后可以用模型对话页面 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 先确认通道正常,再进入技能编写环节。
这一步踩过的坑是:有人把 base_url 写成了带/v1的路径,结果请求 404。TaoToken 的 API 地址就是https://taotoken.net/api,不要自行拼接版本号。另外wire_api字段要和实际协议匹配,chat 和 responses 两种模式不能混用。
3. 可复制配置:SKILL.md 目录结构与 skill-creator 实战
技能的本质是一个包含 SKILL.md 的目录。最小结构只需要一个文件,但完整结构可以包含脚本、参考文档和资源。下面是推荐的目录布局:
my-skill/ ├── SKILL.md # 必备:元数据 + 执行指引 ├── scripts/ # 可选:可执行脚本 ├── references/ # 可选:参考文档 ├── assets/ # 可选:模板、静态资源 └── agents/ └── openai.yaml # 可选:UI 元数据与调用策略SKILL.md 的头部是 YAML 格式的元数据,必须包含 name 和 description 两个字段。description 的写法直接决定隐式匹配的准确率,建议把核心触发词前置。下面是一个代码审查技能的完整示例:
--- name: code-review description: 当用户要求审查代码、检查代码质量、review PR 时触发。对指定文件执行规范检查并输出问题清单。 --- # 代码审查技能 ## 执行步骤 1. 读取用户指定的文件或目录 2. 按以下维度检查:命名规范、错误处理、边界条件、性能隐患 3. 每个问题标注严重程度(高/中/低)和行号 4. 输出格式为 Markdown 表格 ## 输出模板 | 行号 | 严重程度 | 问题描述 | 建议修改 | |------|----------|----------|----------|如果你不想手写,可以用内置的 skill-creator 交互式生成。在 Codex 中输入$skill-creator启动创建流程,它会依次询问三个问题:这个技能做什么、什么时候触发、纯指令还是包含脚本。回答完之后它会生成目录框架,你再补充具体指令内容。
对于需要声明工具依赖的技能,在agents/openai.yaml里配置。下面是一个带 MCP 工具依赖的片段:
# 文件路径:agents/openai.yaml interface: display_name: "代码审查" short_description: "对指定文件执行规范检查" brand_color: "#3B82F6" policy: allow_implicit_invocation: true dependencies: tools: - type: "mcp" value: "openaiDeveloperDocs" description: "OpenAI Docs MCP server" transport: "streamable_http" url: "https://developers.openai.com/mcp"allow_implicit_invocation默认是 true,设为 false 后 Codex 不会根据提示词自动匹配该技能,但显式用$技能名调用仍然有效。这个开关适合那些不希望被误触发的技能。
技能的存储位置分四个层级。仓库级别从当前工作目录向上扫描到仓库根目录,查找.agents/skills目录;用户级别在$HOME/.agents/skills;管理员级别在/etc/codex/skills;系统级别由内置打包。同名技能不会被合并,两者都会出现在选择器中,所以命名时要注意避免冲突。
如果要临时禁用某个技能而不删除文件,在~/.codex/config.toml里加配置:
# 文件路径:~/.codex/config.toml [[skills.config]] path = "/path/to/skill/SKILL.md" enabled = false修改后需要重启 Codex 生效。
4. 验证请求:技能注册、调用与结果确认
配置写完之后,最关键的一步是验证技能是否真的被加载和触发。Codex 会自动检测技能文件的变更,但如果没有立即生效,重启 Codex 即可。
验证分两步走。第一步确认技能出现在列表中,在 CLI 或 IDE 中输入/skills命令,应该能看到你刚创建的技能名称和描述。如果没出现,检查 SKILL.md 的 YAML 头部格式是否正确,name 和 description 字段是否都有值。
第二步测试触发。显式调用最直接,输入$code-review加上你要审查的文件路径,比如:
$code-review 请审查 src/utils/parser.js显式调用时 Codex 不做匹配判断,直接加载完整 SKILL.md 并执行。你应该能看到它按你定义的步骤逐条输出,最后给出 Markdown 表格格式的问题清单。
隐式匹配的测试方式是直接描述任务而不引用技能名,比如输入「帮我检查一下 parser.js 的代码质量」。如果 description 写得准确,Codex 会自动选中这个技能。实测下来,description 里前置了「审查代码、检查代码质量」这些触发词之后,隐式匹配的成功率明显提升。
验证成功的标志有三个:技能出现在/skills列表中、显式调用能按步骤执行、隐式匹配能在相关任务中被选中。三个都通过,说明技能注册和调用链路是通的。
如果你需要安装别人分享的精选技能,可以用$skill-installer。例如安装 linear 技能:
# 安装 linear 技能到本地 Codex $skill-installer linearskill-installer 适合本地设置和实验,如果你要把自己的技能分发给其他开发者,应该用 Plugins 机制打包。一个 Plugin 可以包含一个或多个技能,还可以选择性打包应用映射和 MCP 服务器配置。
5. 常见报错排查:401、技能不触发、列表被截断
配置过程中最容易碰到的问题集中在认证和匹配两个环节。下面按真实报错对照排查。
401 Unauthorized:这个报错说明 API Key 没有正确传入。检查三个地方:环境变量TAOTOKEN_API_KEY是否在当前终端会话中生效(用echo $TAOTOKEN_API_KEY确认)、config.toml 里的env_key字段名是否和实际环境变量名一致、Key 是否复制完整没有多余空格。如果是在 IDE 扩展里报 401,可能是 IDE 没有继承终端的环境变量,需要在 IDE 的设置里单独配置。
local proxy failed / connection refused:这类报错通常是 base_url 写错了。确认写的是https://taotoken.net/api,不要加/v1或其他路径后缀。另外检查网络是否能正常访问该地址,可以用curl https://taotoken.net/api测试连通性。
技能不触发(隐式匹配失败):先检查 description 是否清楚描述了使用场景和边界。把核心触发词放在描述最前面,避免关键信息出现在后半部分被截断。如果某个技能不需要隐式匹配,在agents/openai.yaml里把allow_implicit_invocation设为 false,只用显式调用。
reading choices 相关报错:这类问题通常出现在模型返回格式和预期不符时。检查wire_api字段是否和实际使用的协议匹配,chat 模式对应wire_api = "chat"。如果切换过模型,确认新模型支持的协议类型。
初始技能列表被截断:当安装的技能过多,初始列表超出上下文窗口 2% 的限制时,Codex 会先缩短描述文字,仍然超出则部分技能不显示并给出警告。解决办法是精简每个技能的 description,确保最核心的触发词在最前面。对于当前任务不常用的技能,用[[skills.config]]暂时禁用。
OAuth 相关报错:如果你在配置过程中看到 OAuth 认证失败的提示,说明当前走的是 OAuth 流程而不是 API Key 流程。检查 config.toml 里是否正确设置了model_provider和对应的[model_providers.xxx]段。使用 API Key 方式时不需要走 OAuth 授权。
技能更新后没生效:Codex 会自动检测文件变更,但有时缓存没刷新。重启 Codex 是最直接的解决办法。如果重启后仍然没出现,检查文件路径是否在扫描范围内,仓库级别只扫描.agents/skills目录。
排查时建议按「认证 → 地址 → 技能格式 → 匹配逻辑」的顺序逐层确认,不要一上来就改技能内容。大部分问题出在前两步。
6. 从 Skills 到 Plugins:分发路径与长期使用建议
当你把技能调通之后,下一步考虑的是怎么让它持续产生价值。如果只是自己用,放在$HOME/.agents/skills就够了。如果要在团队仓库里共享,放在仓库根目录的.agents/skills下,所有子目录都能扫描到。
需要分发给其他开发者、打包多个技能、或与应用集成一起发布时,就该用 Plugins 格式了。Skills 是编写格式,Plugins 是分发格式,两者不是替代关系而是协作关系。你先用 Skills 把工作流设计好,验证通过后再打包成 Plugin 分发。
长期使用有几个实用建议。一个技能只做一件事,职责单一便于维护和匹配。能用指令描述的流程就不要写脚本,除非需要确定性行为或调用外部工具。指令用祈使句式,明确每个步骤的输入和输出。写完 description 后用实际提示词测试匹配效果,确保精准度。
如果你需要长期跑编码类任务或 Agent 工作流,可以了解 Coding Plan 的接入方式 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite ,它在调用配额和稳定性上做了针对性优化。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 可以查到完整的配置说明和字段解释。
技能系统的价值在于把重复劳动固化下来,让 Codex 在合适的时机自动执行标准流程。从写第一个 SKILL.md 开始,到用 skill-creator 加速创建,再到用 Plugins 分发给团队,这条路径走通之后,你会发现很多之前需要反复粘贴提示词的工作都可以交给技能来处理。