1. 为什么 Skill 用完不能直接写进 AGENTS.md
GitHub Skill 这类外部规则集,本质上是别人在别的项目里踩坑总结出来的经验包。你把它拉下来,让 Codex 在本次任务里参考,它确实能帮你把 Vue 列表操作区的选择状态、批量参数、按钮禁用这些细节处理得更稳。但任务做完之后,很多人会顺手把 Skill 里的规则一股脑塞进AGENTS.md,觉得这样下次就不用再找了。
问题就出在这里。外部 Skill 的规则是为通用场景写的,它不知道你的项目是 Vue 还是 React,不知道你只改一个后台列表的操作区,也不知道你的团队有没有浏览器自动化验收的条件。你直接把规则写进长期文档,Codex 以后每次读AGENTS.md都会把这些规则当成硬约束,项目会越来越重,冲突也会越来越多。
我试过在一个 Vue 后台项目里,把某个 Skill 的 React 骨架规则留在了AGENTS.md,结果后面每次让 Codex 改页面,它都会先问要不要建 React 组件目录。这就是规则放错位置的成本。
所以正确的流程是:Skill 用完,先让 Codex 交一份规则复盘,把采用、排除、冲突、证据和去处说清楚,再决定哪些写进AGENTS.md。这篇就按这个流程走一遍,同时把 Codex 的auth.json和 Base URL 改到 TaoToken 的配置检查也带上,确保复盘请求本身走的是正常调用链路。
适合谁看:用 Vue 或 React 维护中后台项目、已经在用 Codex 读 GitHub Skill、但还没建立规则沉淀习惯的前端同学。核心检索词就是 Codex、GitHub Skill、AGENTS.md 规则复盘,以及 TaoToken 配置检查。
2. TaoToken 前置:Codex auth.json 与 Base URL 配置检查
在让 Codex 做规则复盘之前,先确认它的请求出口是通的。Codex 的配置入口在~/.codex/auth.json,这个文件同时管认证信息和模型端点。如果你之前用的是默认端点,现在要改到 TaoToken,需要把OPENAI_BASE_URL和对应的 Key 一起换掉。
TaoToken 的 API 地址是https://taotoken.net/api,注意这里不加任何查询参数。官网入口是https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=,需要看文档或拿 Key 的时候从这边进。
先看auth.json的结构。Codex 读的是 JSON,字段名要和它预期的一致,否则会直接报解析错误。下面是一份可复制的配置片段,路径就是~/.codex/auth.json:
{ "OPENAI_API_KEY": "sk-你的TaoTokenKey", "OPENAI_BASE_URL": "https://taotoken.net/api", "model": "gpt-5-codex" }三个字段对应三件事:Key 是身份,Base URL 是请求打到哪,model 是这次会话默认用哪个模型。如果你在项目里用config.toml覆盖,也可以写成 TOML 形式,路径是~/.codex/config.toml:
model = "gpt-5-codex" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "OPENAI_API_KEY"这里env_key指向环境变量名,实际 Key 还是从auth.json或环境变量里读。两种写法选一种就行,不要同时配两套互相打架。
配置改完,先别急着跑复盘。用一条最小请求验证链路,确认 Base URL 和 Key 都对得上。可以在终端里直接发一条 chat 请求:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-5-codex", "messages": [{"role": "user", "content": "ping"}] }'返回里如果有choices字段,说明链路通了。如果返回 401,说明 Key 不对或者没带上;如果返回local proxy failed这类错误,说明 Base URL 写错了或者本地有残留的代理配置在拦截。这一步过了,再让 Codex 做规则复盘,才能保证复盘结果不是被网络问题干扰出来的。
3. 可复制配置:让 Codex 按模板交规则复盘
配置通了之后,下一步是给 Codex 一个明确的复盘模板。不要只说“帮我复盘一下这次用的 Skill”,那样它只会写自己用了什么,不会写排除了什么、冲突在哪。模板要强制它把采用和排除分开,每条规则配证据,冲突单独留档,最后按三个去处分类。
下面这份模板可以直接放进你的 prompt,或者写进项目的AGENTS.md里作为交付要求。我把它整理成 Codex 能直接读的格式:
请在交付最后补一份 GitHub Skill 规则复盘。 必须包含: - 本次采用的规则,每条对应证据(测试文件、代码位置、浏览器路径、未完成检查)。 - 本次排除的规则,每条说明原因。 - 与当前项目冲突的外部规则,说明冲突点和后续适用范围。 - 建议保留到项目长期规则的条目,最多三条。 - 只适合留在本次任务记录的条目。 - 下次遇到同类任务时,建议优先加载哪些 Skill。 不要把没有证据的规则写进长期建议。这份模板的关键在于“证据”这一列。规则有没有用,不能只看感觉。比如“选择状态先写失败测试”这条,证据就是测试文件路径、第一次失败的原因、通过后的结果。没有证据的规则,不要写进AGENTS.md,它可能只是这次任务里一句好听的话。
再给一个 Vue 项目的实际复盘输出示例,方便你对照 Codex 交上来的东西是否合格:
| 规则 | 状态 | 证据 | 去处 |
|---|---|---|---|
| 选择状态先写失败测试 | 采用 | tests/list-select.spec.ts,首次失败原因:未处理全选反选 | 项目长期规则 |
| 按钮禁用和焦点可见 | 采用 | ListToolbar.vue第 42 行,键盘操作说明 | 项目长期规则 |
| 小屏不溢出 | 采用 | 移动端尺寸截图,人工复核项 | 本次任务记录 |
| React 骨架规则 | 排除 | 当前是已有 Vue 页面,不需要 React 结构 | 冲突记录 |
| 完整浏览器自动化 | 后备 | 当前只保留关键路径验证,成本偏高 | 本次任务记录 |
这张表能还原当时的取舍。以后别人看这次改动,也知道为什么没有把外部 Skill 全部塞进来。规则放错位置也是一种成本,临时规则进了长期文档,Codex 以后每次都要读它,项目会越来越重。
4. 验证请求:用一次 Skill 复盘确认调用链路正常
配置和模板都准备好之后,跑一次真实的复盘请求。这一步不只是看 Codex 能不能输出表格,还要确认它读到的 Skill 内容、项目上下文和模型端点都是对的。
我用的验证方式是:在一个 Vue 列表操作区任务结束后,让 Codex 按上面的模板交复盘。请求里带上项目路径和本次用到的 Skill 名称,比如test-driven-development、webapp-testing、frontend-design。Codex 会先读AGENTS.md和项目文件,再结合 Skill 内容生成复盘。
一次合格的输出应该长这样:
本次采用规则: 1. 选择状态先写失败测试 证据:tests/list-select.spec.ts,首次失败原因未处理全选反选,通过结果 12 passed。 2. 按钮禁用和焦点可见 证据:ListToolbar.vue 第 42 行,键盘操作说明已补充。 本次排除规则: 1. React 骨架规则 原因:当前是已有 Vue 页面,不需要 React 结构。 冲突记录: - React 骨架规则与已有 Vue 项目冲突,后续仅用于独立页面。 - 新视觉方向与当前后台列表风格冲突,后续只保留可访问性和响应式检查。 建议保留到项目长期规则(最多三条): 1. 选择状态先写失败测试。 2. 按钮禁用和焦点可见。 3. 动态 class 用映射表。 只适合留在本次任务记录: - 本次批量操作区小屏下按钮换行。 下次优先加载 Skill: - test-driven-development - webapp-testing看到这个输出,说明三件事都正常:Codex 读到了 Skill 内容,项目上下文没丢,TaoToken 的请求链路也通。如果输出里只有“我改完了”没有证据列,说明模板没生效,需要检查 prompt 是不是被截断。如果输出里出现了 React 骨架建议但项目是 Vue,说明冲突记录没被正确识别,要回去看AGENTS.md里有没有残留的旧规则。
这一步跑通之后,你才真正知道哪些规则值得写进AGENTS.md。至少要再过一次同类任务,看它下一次是否仍然成立。比如“动态 class 用映射表”这类规则,很多 Tailwind 项目都会反复遇到,适合进入长期规则。比如“本次批量操作区小屏下按钮换行”,它只和当前页面有关,放进任务记录就够了。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
配置和复盘过程中,最容易卡在几个固定报错上。下面按真实报错对照排查,每个都给出原因和改法。
401 Unauthorized。这个最常见,原因是 Key 没带上、带错了,或者auth.json里的字段名写成了api_key而不是OPENAI_API_KEY。Codex 读的是固定字段名,写错就等于没配。改法是打开~/.codex/auth.json,确认OPENAI_API_KEY的值是sk-开头,并且没有多余空格。如果你用环境变量,确认echo $OPENAI_API_KEY有输出。
local proxy failed。这个报错说明请求没打到 TaoToken,被本地某个代理配置拦截了。检查两个地方:一是auth.json里的OPENAI_BASE_URL是不是写成了https://taotoken.net/api,有没有多写/v1或者结尾斜杠;二是终端环境里有没有残留的HTTP_PROXY、HTTPS_PROXY变量。用env | grep -i proxy看一下,有的话先清掉再跑。
reading choices 报错。这个通常出现在返回体解析阶段,说明请求发出去了,但返回结构不是 Codex 预期的。原因可能是 Base URL 指向了一个不兼容的端点,或者 model 名写错了。确认model字段用的是 TaoToken 支持的模型 ID,比如gpt-5-codex。如果 model 名不对,返回里不会有choices,Codex 解析时就会报这个错。
OAuth 相关报错。Codex 某些版本会走 OAuth 流程,如果你在auth.json里同时配了 OAuth token 和 API Key,可能会冲突。改法是只保留一种认证方式。用 TaoToken 的话,走 API Key 就够了,把 OAuth 相关字段删掉,只留OPENAI_API_KEY和OPENAI_BASE_URL。
排查顺序建议从 401 开始,再到 local proxy failed,最后看 reading choices。因为 401 是认证问题,local proxy failed 是网络路径问题,reading choices 是返回解析问题,一层一层往下查,不要跳步。
6. 把复盘变成习惯:规则沉淀的下一步
规则复盘这件事,做一次不难,难的是每次都做。我的做法是把复盘模板写进项目的AGENTS.md,作为交付要求的一部分。这样 Codex 每次任务结束都会自动带上复盘,不需要你每次手动提醒。
模板里最关键的一条是“不要把没有证据的规则写进长期建议”。这条能挡住大部分拍脑袋的规则。外部 Skill 里的规则,很多是特定场景下的经验,换个项目就不成立。只有经过至少两次同类任务验证、并且有测试或代码位置作为证据的规则,才值得写进AGENTS.md。
如果你想让 Codex 长期承担这类复盘和编码任务,可以考虑用 Coding Plan 把调用额度固定下来,入口在https://taotoken.net/api对应的控制台里。需要看模型对话效果的话,模型对话入口也能直接试。接入文档和 API Keys 在官网对应页面都能找到,从https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=进去按导航走就行。
规则沉淀的节奏,我建议是:本次任务记录留在交付说明里,项目长期规则最多三条,冲突记录单独留档。下次遇到同类任务,先加载上次验证过的 Skill,再看这次有没有新冲突。这样项目会轻很多,Codex 读到的长期规则越干净,它后面写前端代码越稳。