Codex Skills 入门指南:五大核心工程决策模块解析

1. 项目概述:Codex Skills 不是插件,是你的第二大脑操作系统

“Codex 必装 Skills 入门:先装这几个就够了”——这句话不是营销话术,而是我过去三个月在真实项目中踩坑、调参、压测、对比、重装、再压测后,亲手写下的经验结论。Codex 不是另一个代码补全工具,它是一套运行在你本地终端里的自主工程代理系统;而 Skills,也不是传统意义上的“插件”,它们是刻进 Codex 行为基因里的可复用、可继承、可组合的工程决策模块。每一个 Skill 都是一个.md文件,存放在~/.agents/skills/下,文件名就是技能名(比如create-plan.md),内容是你用自然语言写的、带明确约束和边界条件的指令集。Codex 在执行任何任务前,会自动扫描这些文件,根据当前任务语义匹配最相关的 Skill,然后把它的行为逻辑“注入”到主模型的思考流中——不是调用一个 API,而是改写它的思维路径。

这背后是 Agent Skills 开放标准的落地实践。它不绑定 Codex,Claude Code、Cursor、Gemini CLI 都支持同一套SKILL.md格式,意味着你今天为 Codex 写的gh-fix-ci.md,明天就能直接复制到 Claude 的~/.claude/skills/目录下生效。这种跨平台一致性,让 Skills 成为真正属于开发者自己的“工程能力资产”,而不是某家厂商的封闭生态附庸。热搜词里反复出现的 “superpowers”、“planning with files”、“context engineering skills”,说的正是这个底层范式:把人类工程师的隐性经验(比如“修 CI 前必须先看日志最后一屏”、“改前端组件前必须确认设计系统版本”)显性化、结构化、自动化。我试过不装任何 Skill 直接跑一个中等复杂度的 feature 开发:Codex 在第 7 分钟开始修改无关文件,第 12 分钟生成了三份重复的 mock 数据,第 18 分钟提交了一个没跑测试就推上来的 PR。装上create-plangh-fix-ci后,同样的任务,它先输出 423 字的分步计划(含文件变更清单、依赖影响分析、测试覆盖说明),我敲回车确认后,它才开始编辑,CI 失败时自动抓取日志、定位到jest.config.ts中缺失的setupFilesAfterEnv配置项,52 秒内提交修复。这不是效率提升,是工作流范式的切换——从“人盯模型跑”,变成“人审模型想,模型自动干”。所以这篇入门,不讲怎么点几下安装,而是带你理解:为什么这五个 Skills 是不可跳过的起点?它们各自接管了工程链路中哪一段最耗神、最易错、最反直觉的环节?参数怎么调才不翻车?哪些场景下必须关掉它们?下面我们就从最核心的底层逻辑开始拆解。

2. 核心技能选型逻辑:为什么是这五个,而不是十个?

2.1 技能选型的三个硬性过滤器

在 Codex 官方文档和社区推荐的几十个 Skills 里,我筛出这五个,并非因为它们“最热门”,而是它们同时满足三个严苛的过滤条件:问题可量化、效果可感知、失败可兜底。很多 Skills 听起来很酷,比如 “auto-merge-pr” 或 “generate-architecture-diagram”,但实际用下来,要么问题边界模糊(什么叫“可以合并”?测试覆盖率 80% 还是 95%?),要么效果无法即时验证(画出来的图对不对,得人工核对半天),要么失败后没有安全出口(自动合并了错误 PR,回滚成本远高于手动操作)。而这五个,每一个都经受住了我用生产级代码库(一个 12 万行 TypeScript + Rust 混合的开源项目)连续两周的暴力测试。

第一个过滤器是问题可量化。以WarpGrep为例,它的价值不是“搜索更快”,而是把“代码搜索”这个动作从一个黑盒耗时过程,变成了一个有明确 SLA 的服务:95% 的搜索请求必须在 5 秒内返回精确的 file:line-range 列表,且不加载任何无关上下文。我在一个 87 个子包的 monorepo 里实测,用 Codex 原生 grep 搜索useEffect调用点,平均耗时 73.2 秒,消耗 12,840 tokens;启用 WarpGrep 后,平均耗时 4.7 秒,消耗 1,023 tokens。数字不会骗人,这个差距直接决定了你能否在一次会话中完成“搜索→分析→修改→测试”的闭环,还是卡在第一步就耗尽上下文。再比如gh-fix-ci,它的量化指标是“CI 日志解析准确率”和“首次修复成功率”。我收集了 317 条真实的 GitHub Actions 失败日志(涵盖 Jest timeout、TypeScript type error、Docker build cache miss、AWS credential expired 四大类),gh-fix-ci对前两类的准确率是 92.4%,后两类是 68.1%——这个数据让我立刻决定:对 Jest 和 TS 错误,完全信任它自动修复;对 Docker 和 AWS 类错误,则强制开启--dry-run模式,只让它输出修复建议,由我来执行。

第二个过滤器是效果可感知create-plan是典型代表。它不改变最终代码质量,但它彻底改变了人机协作的节奏感。没有它时,Codex 的响应像一个急于表现的实习生:你刚说完需求,它已经打开了 5 个文件开始写,你得 constantly interrupt 它,喊停、纠正、重来。装上之后,它第一句话永远是:“我将按以下计划执行:1. 修改src/api/client.ts第 42-58 行,替换 axios 实例为自定义封装;2. 新增src/utils/error-handler.ts,处理 4xx/5xx 状态码;3. 更新src/tests/api/client.test.ts,增加 3 个新 case……请确认是否继续?” 这种“先举手,再行动”的模式,把控制权稳稳交还给人。我统计过,在引入create-plan后,我的平均单次会话中断次数从 3.7 次降到 0.2 次,会话有效时长(从开始到产出可用 PR)提升了 2.3 倍。这种变化,你不需要看数据,第一次用就会本能地觉得“舒服”。

第三个过滤器是失败可兜底stop-slopfrontend-skill是这方面的双保险。stop-slop的作用是清洗 AI 生成文本中的套路化表达,比如自动删除所有 em-dash(—)、替换 “it’s worth noting that” 为更直接的陈述、消灭被动语态堆砌。但它不是粗暴的字符串替换,而是基于一套轻量级规则引擎。我故意给它喂了一段充满 AI 味的 README 片段,它成功识别并改写了 92% 的问题句式,剩下 8% 是它认为“语境特殊,需人工判断”的部分,会原样保留并加注<!-- STOP-SLOP: MANUAL REVIEW REQUIRED -->。这种“尽力而为,留白给人”的设计,比那些号称 100% 自动化的工具可靠得多。frontend-skill同理,它不会强行给你生成一个丑陋的 UI,而是当检测到 Codex 即将使用 Inter 字体或 8px 圆角时,立刻中断并抛出提示:“检测到默认字体 Inter。请指定设计系统(如 Material Design v3 / Ant Design v5)或提供字体栈(如 -apple-system, BlinkMacSystemFont, 'Segoe UI')。” 这个提示本身,就是一次微型的设计决策训练。

2.2 被筛掉的“高热度”Skills 及原因

当然,热搜词里那些高频出现的名字,我也一一验证过。比如Superpowers,它确实强大,本质是一个 Skill 编排框架,能自动串联create-planWarpGrepgh-fix-ci形成流水线。但它的问题在于抽象层级过高,调试成本巨大。当一整条流水线卡在某个环节(比如WarpGrep返回了空结果),你得层层展开日志,定位到具体是哪个 Skill 的哪个子步骤出了问题。对于新手,这无异于在迷宫里找出口。我的建议是:先单点精通这五个基础 Skill,等你能清晰说出每个 Skill 的输入/输出契约、失败模式、fallback 策略后,再用Superpowers把它们串起来。它不是起点,而是进阶的指挥中心。

再比如Valyu,那个能查 ArXiv 论文、GitHub PR、DeepSpeed 文档的“全能搜索 Skill”。它技术上非常惊艳,但在我真实工作流中,使用频次极低。原因很简单:绝大多数日常开发问题,答案都在你的代码库、文档和团队知识库里,根本不需要跨出防火墙。我统计过自己过去一个月的所有 Codex 查询,93.7% 的问题可以通过WarpGrep在本地代码中找到答案,5.2% 通过gh-fix-ci解决 CI 问题,剩下 1.1% 才需要查外部资料。而Valyu的 API 调用成本(token + 延迟 + 配额)远高于本地操作。它更像是一个“战略储备武器”,适合做技术预研或解决罕见疑难杂症,不适合作为每日必装的基础件。

还有Codex Security,虽然它是 OpenAI 官方出品,但注意:它不是 Skill,而是 Codex Cloud 的一项云服务功能。你无法通过skill-installer安装它,必须开通 Codex Cloud 并授权仓库访问权限。它的价值在于持续威胁建模,但对个人开发者或小团队,初期投入产出比不高。我建议把它放在“第二梯队”,等你用熟了这五个基础 Skill,建立了稳定的本地开发流,再考虑接入云安全层。

3. 五大核心 Skills 深度实操指南:从安装到调优

3.1 WarpGrep:把代码搜索从“盲猜”变成“精准制导”

WarpGrep 的核心价值,是终结 Codex 最耗时的“上下文污染”问题。传统做法是让主模型自己去grepcathead,结果大量 token 被浪费在读取无关文件、解析日志格式、猜测函数调用关系上。WarpGrep 的设计哲学是“分治”:用一个轻量、专用、经过强化学习调优的子代理(subagent)来干搜索这件苦活,主模型只负责接收精炼后的file:line-range列表,专注逻辑推理。

安装与配置
官方推荐通过 MCP(Model Context Protocol)服务器方式安装,这是最稳定的方式:

# 1. 安装 Morph MCP 服务器 npm install -g @morphllm/morphmcp # 2. 获取 API Key(免费额度足够个人使用) # 访问 https://morphllm.com/register,注册后在 Dashboard 获取 key # 3. 编辑 ~/.codex/config.toml,添加 MCP 服务器配置 [mcp_servers.warp-grep] command = "npx" args = ["-y", "@morphllm/morphmcp"] [mcp_servers.warp-grep.env] MORPH_API_KEY = "your_actual_api_key_here"

注意:不要用skill-installer warp-grep,那个是旧版 CLI 工具,已废弃。MCP 方式是唯一被官方长期支持的集成路径。

关键参数调优
WarpGrep 的config.toml区块里有几个隐藏但极其重要的参数,直接影响搜索精度:

[mcp_servers.warp-grep.env] # 控制搜索深度:0=只搜当前目录,1=递归1层,-1=全递归(默认) WARP_GREP_DEPTH = "-1" # 控制结果数量:太多会淹没主模型,太少可能漏关键文件 WARP_GREP_MAX_RESULTS = "15" # 强制排除的文件类型,避免搜索 node_modules、dist 等垃圾目录 WARP_GREP_EXCLUDE_PATTERNS = "node_modules/,dist/,build/,*.log,*.tmp" # 搜索超时时间(秒),防止在巨型 repo 里卡死 WARP_GREP_TIMEOUT = "8"

我实测发现,WARP_GREP_DEPTH = "-1"在大多数项目里是最佳选择,但如果你的 monorepo 有 50+ 子包,建议设为"1",配合WARP_GREP_EXCLUDE_PATTERNS精准过滤,否则搜索会变慢。WARP_GREP_MAX_RESULTS = "15"是黄金值,超过 15 个文件的结果,主模型很难有效利用,反而会分散注意力。

实操现场记录
场景:在一个 React + Express 全栈项目中,查找所有调用了fetchUserById函数的地方。

  • 未启用 WarpGrep:Codex 先grep -r "fetchUserById" .,得到 23 个结果,然后逐个cat这些文件的前后 10 行,花了 68 秒,消耗 8,920 tokens,最后给出的修改建议里混入了 3 个误报(其实是同名但不同模块的函数)。
  • 启用 WarpGrep 后:Codex 发送查询到 WarpGrep 子代理,子代理并行执行grepreadlist,5.2 秒后返回精确的 7 个file:line对(src/api/user.ts:42,src/components/UserProfile.tsx:156,src/tests/api/user.test.ts:88...),主模型基于这 7 个精准锚点,12 秒内就完成了接口升级方案设计。整个过程耗时 17.2 秒,token 消耗降至 1,450。

避坑心得

  • 陷阱一:.gitignore不等于WARP_GREP_EXCLUDE_PATTERNS.gitignore里可能有*.env,但WARP_GREP_EXCLUDE_PATTERNS必须显式写成"*.env",否则 WarpGrep 仍会搜索它。我吃过亏,一次搜索意外暴露了本地.env里的测试密钥。
  • 陷阱二:符号链接(symlink)处理。WarpGrep 默认不跟随 symlink,如果你的项目用pnpm linkyarn link做本地依赖,记得在config.toml里加WARP_GREP_FOLLOW_SYMLINKS = "true",否则会搜不到链接的目标文件。
  • 终极技巧:用--debug查看 WarpGrep 的原始输出。当你怀疑搜索结果不准时,在 Codex 命令后加--debug,它会打印 WarpGrep 子代理返回的原始 JSON,里面包含每个匹配项的fileline_numbercontext_beforecontext_after,一目了然。

3.2 create-plan:强制 Codex 先交“施工图纸”,再开工

create-plan是所有 Skills 里,对开发者心智负担改善最直接的一个。它本质上是在 Codex 的思考流中,硬性插入一个“计划生成”阶段,并用一套强约束的模板来规范这个计划的内容。这个模板不是随意写的,它源于软件工程中经典的“设计评审”(Design Review) Checklist。

安装与配置
create-plan是纯本地 Skill,无需 API Key,安装最简单:

# 创建 Skills 目录(如果不存在) mkdir -p ~/.agents/skills # 下载官方推荐的 create-plan.md curl -o ~/.agents/skills/create-plan.md \ https://raw.githubusercontent.com/openai/codex-skills/main/create-plan.md

提示:不要用skill-installer create-plan,那个命令在 2026 年 3 月后已被弃用,官方源码已迁移到 GitHub 统一管理。

核心模板解析与自定义
打开~/.agents/skills/create-plan.md,你会看到一个结构严谨的 Markdown 模板。它的每一行都是精心设计的约束:

# create-plan ## Goal [The single, unambiguous objective of this task] ## Files to Modify - `path/to/file1.ts`: [Specific lines or sections to change, e.g., "lines 42-58, function `initApi`"] - `path/to/file2.ts`: [e.g., "add new export at end of file"] ## Dependencies & Impact - [List all functions/modules this change depends on] - [List all other modules/files that will be affected by this change] ## Edge Cases & Error Handling - [What happens if input is null/undefined?] - [How are network errors handled?] - [What are the failure modes and their recovery paths?] ## Tests to Write/Update - [New test cases needed] - [Existing tests that must be updated] - [How will we verify correctness?] ## Approval Required - [Yes/No] I have reviewed and approved this plan.

这个模板的威力在于,它强迫 Codex 去思考那些人类工程师会本能关注、但 AI 容易忽略的维度。比如Dependencies & Impact这一节,Codex 以前可能只改一个文件,现在它必须列出所有被波及的模块,这直接避免了“改 A 文件,崩 B 功能”的经典事故。我曾用它来重构一个状态管理模块,Codex 在计划里明确写出:“修改src/store/auth.ts将影响src/components/LoginForm.tsxsrc/hooks/useAuth.tssrc/api/authClient.ts,需同步更新其类型定义”,这让我提前发现了 3 个潜在的 breaking change。

如何定制你的专属模板
模板不是一成不变的。比如你的团队有严格的“可观测性”要求,你可以在模板末尾加一节:

## Observability Requirements - [Which metrics must be emitted? e.g., "auth.login.duration_ms"] - [Which logs must be added? e.g., "INFO: User login attempt for user_id={id}"] - [Which traces must be propagated? e.g., "trace_id from request header"]

Codex 会严格遵循你新增的这一节。这就是 Skills 的魅力:它不是黑盒,而是你工程文化的可执行说明书。

实操现场记录
任务:“为用户订单列表页添加‘按最近下单时间排序’功能”。

  • 未启用 create-plan:Codex 直接打开OrderList.tsx,开始写useEffectsort()逻辑,15 分钟后,我才发现它把排序逻辑写在了组件内部,导致每次渲染都重新排序,性能爆炸。
  • 启用 create-plan 后:它先输出一份 512 字的计划,其中Files to Modify明确写着:“src/api/orderService.ts: 新增getOrdersSortedByDate()函数;src/store/orderSlice.ts: 添加sortByDatereducer;src/components/OrderList.tsx: 仅修改useSelectorhook,不添加任何业务逻辑”。我一眼就看出这个架构是合理的,敲回车后,它才开始编码。最终产出的代码,排序逻辑完全在 service 层,组件层干净得像一张白纸。

避坑心得

  • 陷阱:过度信任“Approval Required”。模板里有[Yes/No] I have reviewed and approved this plan.,但这只是个占位符,Codex 不会真的等你输入 Yes/No。它输出计划后,会自动进入执行阶段。所以,你必须养成习惯:看到计划,立刻暂停,逐字阅读,确认无误后再按回车。我设置了一个终端别名alias codex='codex --pause-on-plan',让它在输出计划后自动暂停。
  • 终极技巧:用create-plan做“反向需求澄清”。当产品经理给的需求模糊时(比如“让搜索更快”),我直接让 Codex 运行create-plan,它会基于这个模糊需求,输出一份包含GoalFiles to ModifyEdge Cases的详细计划。这份计划本身就是一份绝佳的需求澄清文档,拿去和产品对齐,效率极高。

3.3 gh-fix-ci:让 CI 失败从“噩梦”变成“后台任务”

gh-fix-ci是我最常使用的 Skills,没有之一。它把原本需要 20-45 分钟的人工 CI 故障排查,压缩到 1-2 分钟的全自动流程。它的核心不是“猜错”,而是“模式识别”——它内置了对 GitHub Actions 日志结构的深度解析能力,能精准定位到日志中最关键的那一行错误信息,然后基于一个庞大的“错误-修复”映射知识库,给出最优解。

安装与配置
gh-fix-ci依赖 GitHub 的 API,需要个人访问令牌(PAT):

# 1. 创建 GitHub Personal Access Token # Settings → Developer settings → Personal access tokens → Tokens (classic) # 权限勾选:`repo` (读写私有仓库), `workflow` (读写 Actions) # 2. 安装 Skill skill-installer gh-fix-ci # 3. 设置环境变量(重要!) echo 'export GITHUB_TOKEN="your_github_pat_here"' >> ~/.zshrc source ~/.zshrc

注意:GITHUB_TOKEN必须是 classic token,Fine-grained token 不支持workflow权限。而且,这个 token 必须有repo权限,否则gh-fix-ci无法读取你的仓库代码来定位问题。

关键参数与模式库
gh-fix-ci的强大,源于它背后一个不断更新的 YAML 模式库。这个库定义了数百种常见 CI 错误的正则匹配规则和对应的修复指令。你可以查看它的默认库:

# 查看内置模式库位置 ls ~/.agents/skills/gh-fix-ci/patterns/ # 输出:jest-timeout.yaml, typescript-error.yaml, docker-cache-miss.yaml...

每个 YAML 文件都长这样:

# jest-timeout.yaml error_pattern: "Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout." fix_instructions: - "Increase timeout in jest.config.ts: set 'testTimeout: 10000'" - "Check for infinite loops or unmocked async operations in the failing test" - "Add 'jest.setTimeout(10000)' to the top of the test file as a temporary workaround"

实操现场记录
场景:一个 TypeScript 项目,CI 报错src/utils/dateUtils.test.ts:23:14 - error TS2339: Property 'format' does not exist on type 'Date'.

  • 人工排查:我得先git checkout到 CI 的 commit,npm installnpm run test复现,然后打开dateUtils.test.ts,看到它用了new Date().format('YYYY-MM-DD'),意识到是date-fns库的format函数没导入,再查package.json确认版本,最后写 import 语句……全程约 8 分钟。
  • 启用 gh-fix-ci 后:Codex 自动抓取 GitHub Actions 的完整日志,匹配到typescript-error.yaml模式,识别出错误是Property 'format' does not exist,然后执行fix_instructions:1. 检测到date-fns已安装但未导入;2. 在dateUtils.test.ts文件顶部自动插入import { format } from 'date-fns';;3. 提交修复。整个过程 47 秒,我只做了两件事:复制粘贴 CI 失败链接,敲回车确认。

避坑心得

  • 陷阱:权限不足导致静默失败gh-fix-ci在找不到匹配模式时,会安静地退出,不报错也不提示。如果你发现它“没反应”,第一件事就是检查GITHUB_TOKEN是否有repoworkflow权限,并用gh auth status验证。
  • 终极技巧:贡献你自己的模式。当你遇到一个gh-fix-ci无法识别的新错误时,不要只是手动修复。把它写成一个 YAML 模式,提交到官方仓库。我贡献的aws-credential-expired.yaml模式,现在已经被合并进主库,帮助了上百个 AWS 用户。这才是真正的“开源精神”。

3.4 stop-slop:给 AI 生成的文本做一次“外科手术”

stop-slop解决的是一个被严重低估的问题:AI 生成的文本(README、commit message、代码注释)自带一种难以言喻的“AI 味”,这种味道会削弱代码库的专业感和可信度。stop-slop不是简单的“润色”,而是一次精准的“外科手术”,它用一套基于语言学规则的过滤器,切除所有典型的 AI 写作肿瘤。

安装与配置
stop-slop是纯本地 Skill,安装即用:

mkdir -p ~/.agents/skills git clone https://github.com/hardikpandya/stop-slop.git ~/.agents/skills/stop-slop

核心规则引擎详解
stop-slop的规则定义在~/.agents/skills/stop-slop/rules/目录下,每个.yaml文件对应一类问题。最核心的三个规则是:

  • passive-voice.yaml:识别并重写被动语态。例如,“The data is processed by the function” → “The function processes the data”。
  • throat-clearing.yaml:清除所有“throat-clearing”(清嗓子)式开头。例如,“It is worth noting that…” → 直接删除,或根据上下文改为更直接的陈述。
  • em-dash.yaml:将所有 em-dash(—)替换为更专业的标点,如逗号、冒号或破折号(–)。

实操现场记录
任务:为一个新功能生成 README。

  • 未启用 stop-slop:Codex 输出的 README 开头是:“It is worth noting that this new feature provides a robust solution for asynchronous data fetching — allowing developers to handle loading states with ease.” 全文充斥着 em-dash、被动语态和冗余短语。
  • 启用 stop-slop 后:它输出:“This new feature provides a robust solution for asynchronous data fetching. It allows developers to handle loading states with ease.” 开头简洁有力,全文无 em-dash,被动语态被主动化,阅读体验专业度飙升。

避坑心得

  • 陷阱:“一刀切”式禁用stop-slop默认会修改所有输出,包括代码注释。但有些注释(比如 JSDoc)需要特定格式。解决方案是在~/.agents/skills/stop-slop/config.yaml中配置exclude_patterns
    exclude_patterns: - ".*\\.d\\.ts$" - ".*\\.jsdoc.*"
    这样,它就不会碰.d.ts类型声明文件和 JSDoc 注释块。
  • 终极技巧:用stop-slop做“代码审查助手”。我把stop-slop集成到我们的 pre-commit hook 里,每次git commit前,它会自动扫描README.mdCHANGELOG.md和所有新添加的.md文件,如果发现 AI 味过重,就阻止提交,并给出修改建议。这成了我们团队代码质量的第一道防线。

3.5 frontend-skill:让 AI UI 不再“千篇一律”

frontend-skill是前端工程师的救星。它终结了 Codex 生成 UI 时那种令人绝望的“模板感”:Inter 字体、中性灰、8px 圆角、Flex 布局万金油。它的核心思想是“约束即自由”——通过强制 Codex 在生成任何 UI 代码前,必须先明确回答一系列设计决策问题,从而让输出的 UI 具备真实项目应有的个性和一致性。

安装与配置

mkdir -p ~/.agents/skills git clone https://github.com/vipulgupta2048/codex-skills.git /tmp/codex-skills cp -r /tmp/codex-skills/frontend-design ~/.agents/skills/ rm -rf /tmp/codex-skills

设计决策问答流
frontend-skill的魔力在于它启动时的一系列强制问答。当你让 Codex “创建一个登录表单”时,它不会立刻写代码,而是依次提问:

  1. “Which design system are you using? (e.g., Material Design v3, Ant Design v5, Bootstrap 5, or custom)”
  2. “What is the primary color palette? (e.g., #3B82F6 for blue, #10B981 for green)”
  3. “What font stack should be used? (e.g., -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif)”
  4. “What is the preferred border radius? (e.g., 4px, 6px, 8px, or 'none')”
  5. “Should form validation be client-side only, or include server-side hints?”

实操现场记录
任务:“创建一个符合我们公司设计规范的仪表盘卡片组件”。

  • 未启用 frontend-skill:Codex 生成了一个用 Inter 字体、#6B7280灰色、8px圆角、display: flex的卡片,看起来像 Figma 的默认模板。
  • 启用 frontend-skill 后:它先问我:“Which design system? Our internal ‘Nova’ system uses#2563EBas primary,#F9FAFBas background, and4pxradius.” 我回答 “Nova”。它接着问:“Font stack?” 我答 “-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Nova Sans', sans-serif”。然后它才开始编码,生成的卡片完美契合公司设计系统:蓝色标题、浅灰背景、4px 圆角、自定义字体,连阴影的box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05)都和设计稿一致。

避坑心得

  • 陷阱:问答流打断工作流。频繁的提问有时会让人烦躁。解决方案是创建一个design-context.md文件,放在项目根目录,内容是你的设计系统摘要:
    ## Design Context for This Project - System: Nova Design System v2.1 - Primary Color: #2563EB - Background: #F9FAFB - Font Stack: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Nova Sans', sans-serif - Border Radius: 4px - Spacing Scale: 4px base (8px, 12px, 16px...)
    然后在frontend-skill.md的配置里,添加context_file: "design-context.md"。这样,Codex 会自动读取这个文件,跳过大部分问答。
  • 终极技巧:用frontend-skill做“设计系统审计”。我让 Codex 用frontend-skill扫描整个src/components/目录,对每个组件提问:“这个组件使用的设计系统是什么?颜色、字体、圆角是否符合 Nova v2.1?”。它生成了一份详细的审计报告,帮我们发现了 17 个不符合规范的组件,全部一键修复。

4. 常见问题与实战排查技巧:从“装不上”到“用得溜”

4.1 安装类问题:为什么skill-installer总是报错?

这是新手遇到的第一个拦路虎。skill-installer命令本身没问题,但报错往往源于环境配置的“隐形坑”。我整理了一份高频报错速查表:

报错信息根本原因排查与解决
command not found: skill-installer@openai/codexCLI 未全局安装,或 PATH 未生效运行npm list -g @openai/codex确认是否安装;若已安装,执行echo $PATH/usr/local/bin(macOS)或%APPDATA%\npm(Windows)是否在 PATH 中;重启终端或source ~/.zshrc
Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules'npm 全局安装权限不足(常见于 macOS)不要用sudo npm install!改用npm config set prefix ~/.local,然后npm install -g @openai/codex,最后把~/.local/bin加入 PATH
Failed to fetch skill metadata from registry网络问题或技能仓库 URL 变更skill-installer依赖一个中央 registry。如果失败,直接去 GitHub 手动下载.md文件(如curl -o ~/.agents/skills/gh-fix-ci.md https://raw.githubusercontent.com/.../gh-fix-ci.md
Skill 'xxx' not found in registry该 Skill 已被作者移除,或名称拼写错误查看官方 Skills 仓库(https://github.com/openai/codex-skills)的README.md,确认 Skill 名称和最新安装方式。很多 Skill 已从skill-installer迁移到手动git clone

独家技巧:用codex --debug看清安装全过程
当你不确定skill-installer到底在干什么时,加--debug参数:

codex --debug skill-installer create-plan

它会打印出每一步的 shell 命令、HTTP 请求、文件操作,让你像看监控录像一样,精准定位卡在哪一步。这是我排查 90% 安装问题的首选方法。

4.2 运行类问题:为什么 Skill 装上了,但 Codex 就是不用?

装上不等于生效。Skills 的加载有一套严格的“匹配-激活”逻辑,很多问题出在这里。

问题一:Skills 目录位置错误
Codex