Codex Skills 怎么写自己的工作流:从重复提示词到可复用 SKILL.md

Codex Skills 自定义工作流实操教程:什么时候该写 skill,SKILL.md 怎么组织,description 怎么写,什么时候拆 references、scripts 和 assets,以及如何测试和维护自己的工作流。

Codex skills 怎么写自己的工作流?最简单的理解是:把你反复复制粘贴给 Codex 的那套操作说明,整理成一个可以被 Codex 自动发现、按需读取、可长期维护的 SKILL.md

如果只是一次性任务,直接在提示词里说清楚就行。只有当一个流程会重复出现,步骤相对固定,且经常需要读取同类文件、运行同类命令、产出同类结果时,才值得写成 skill。

官方文档对 skills 的定位很明确:skill 是一个目录,里面必须有 SKILL.md,可以附带 scripts/references/assets/ 等资源。Codex 会先看 skill 的 namedescription 做发现,真正决定使用时才读取完整 SKILL.md。这意味着,写 skill 的关键不是把所有知识塞进去,而是让 Codex 能在正确场景选中它,并在选中后按稳定步骤执行。

快速结论

一个好用的 Codex skill,通常满足四点:

  1. description 写清楚“什么时候用”,不要只写“这是一个工具”。
  2. SKILL.md 写流程、边界、输入、输出和验证,不要写成散文。
  3. 长资料放进 references/,重复命令放进 scripts/,模板放进 assets/
  4. 每次修改后用真实任务跑一遍,确认 Codex 会在该用的时候选中,也不会在不该用的时候误触发。

可以先从一个很小的 skill 开始,例如:

1
2
3
4
5
把站内中文文章改写成可发布版本
把某类日志整理成日报
把 PR review 固定成安全、测试、回归三段
把部署流程固定成 build、sync、purge、submit
把产品图片处理成统一规格

真正适合写成 skill 的,不是“知识点”,而是“可重复执行的工作方式”。

Skill、AGENTS.md、Hooks、MCP 分别放什么

写 skill 前,先别急着建目录。很多混乱来自放错位置。

需求 更适合放哪里
当前这次任务的临时要求 直接写在提示词里
仓库长期编码规范、测试命令、提交要求 AGENTS.md
一套可复用的任务流程 Skill
工具调用前后必须执行的机械规则 Hook
访问外部系统、数据库、私有服务 MCP server 或 app connector
定时检查、周期性报告 Automation
安装给别人复用的一整套扩展 Plugin

例如“每次改完代码都必须跑格式化”更像 hook;“审查 PR 时按安全、边界条件、测试缺口输出 findings”更像 skill;“这个仓库默认用 pnpm,不要用 npm”更像 AGENTS.md

不要把 skill 写成万能说明书。它应该有一个明确任务。

最小目录结构

一个最小 skill 可以只有一个文件:

1
2
my-workflow/
  SKILL.md

稍微完整一点,可以这样:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
my-workflow/
  SKILL.md
  references/
    checklist.md
    examples.md
  scripts/
    validate.ps1
    collect-data.py
  assets/
    report-template.md

常见分工是:

  • SKILL.md:入口说明,必须简洁,告诉 Codex 何时使用、怎么执行、怎么验证。
  • references/:较长背景、规则表、范例、领域资料。只有需要时再读。
  • scripts/:稳定可重复的命令,避免让 Codex 每次手写长脚本。
  • assets/:模板、样例文件、提示词片段、报告格式。

如果 skill 很小,不要为了“看起来专业”强行拆目录。先让 SKILL.md 工作起来。

SKILL.md 的基本模板

可以从这个模板开始:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
---
name: my-workflow
description: Use when the user asks to <具体任务触发条件>. Handles <输入>, produces <输出>, and verifies <完成标准>.
---

# My Workflow

## Purpose

说明这个 skill 解决什么重复任务,不解决什么。

## When To Use

- 用户明确提到某个关键词时使用。
- 任务需要固定步骤、固定输出或固定校验时使用。
- 如果只是普通问答,不使用。

## Inputs

- 需要用户提供什么。
- 可以从仓库里自动发现什么。
- 缺少什么信息时应该如何假设或询问。

## Workflow

1. 检查当前状态。
2. 读取必要文件。
3. 执行核心处理。
4. 运行轻量验证。
5. 汇报结果和未完成事项。

## Constraints

- 不要改哪些文件。
- 不要运行哪些命令。
- 哪些字段必须保留。
- 遇到冲突怎么处理。

## Verification

- 检查输出文件是否存在。
- 检查格式是否有效。
- 检查命令是否通过。
- 检查是否有风险残留。

## Reporting

最终回复需要包含:

- 改了什么。
- 没改什么。
- 验证结果。
- 需要用户注意的风险。

真正写的时候,不一定每个标题都要保留,但这几个问题都要回答。

description 是最重要的一行

很多 skill 不好用,是因为 description 太虚。

不好的写法:

1
description: Help with reports.

Codex 很难判断什么时候该用它。

更好的写法:

1
description: Use when the user asks to turn Git commits, issue updates, or daily work notes into a weekly engineering report with sections for completed work, risks, blockers, and next actions.

这行应该包含:

  • 触发场景;
  • 输入类型;
  • 输出类型;
  • 关键边界。

如果 skill 名字很短,description 就更要具体。

把提示词改成流程,而不是照搬

很多人第一次写 skill,会把过去常用的一大段提示词直接复制进去。这能用,但不稳定。

提示词通常是一次性对话:

1
你是一个资深工程师,请帮我检查这次改动有没有问题,重点关注边界条件和测试。

Skill 应该改成流程:

1
2
3
4
5
6
7
## Workflow

1. 先运行 `git status --short`,确认当前改动范围。
2. 读取 diff,而不是只看文件名。
3. 按严重程度列出 findings。
4. 优先找 bug、回归风险、安全问题和缺失测试。
5. 如果没有问题,明确说明未发现高置信问题,并列出剩余风险。

这样 Codex 更容易执行,也更容易复查。

什么时候拆 references

SKILL.md 不适合无限变长。下面几类内容更适合放进 references/

  • 很长的风格指南;
  • 大量示例输出;
  • 术语表;
  • API 字段说明;
  • 评分规则;
  • 多语言翻译对照;
  • 复杂业务规则;
  • 不一定每次都要读的背景资料。

SKILL.md 里只写路由:

1
2
3
4
5
## References

- 需要判断报告质量时,读取 `references/report-rubric.md`- 需要生成完整模板时,读取 `assets/weekly-report-template.md`- 普通摘要任务不要读取完整示例库。

这样可以减少上下文浪费。Codex 官方文档里也强调了 progressive disclosure:先看元数据,选中 skill 后再按需读取完整说明和附加资源。

什么时候写 scripts

只要某个步骤稳定、机械、容易写错,就适合脚本化。

适合放进 scripts/ 的例子:

  • 扫描文件并生成清单;
  • 校验 front matter;
  • 把 JSON 转成 Markdown 表格;
  • 下载固定来源的数据;
  • 跑固定构建命令;
  • 批量转换图片;
  • 检查链接、slug、日期、语言文件。

不适合脚本化的例子:

  • 需要判断文章角度;
  • 需要代码审查;
  • 需要选择方案;
  • 需要根据上下文写解释;
  • 需要和用户确认风险。

一个好习惯是:让 Codex 判断和组织,让脚本做机械执行。

示例:写一个周报 skill

假设你经常让 Codex 根据 Git 提交和工作记录写周报,可以建一个 skill:

1
2
3
4
5
6
weekly-report/
  SKILL.md
  assets/
    weekly-report-template.md
  scripts/
    collect-git-summary.ps1

SKILL.md 可以这样写:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
---
name: weekly-report
description: Use when the user asks to create a weekly work report from Git commits, notes, issue updates, or chat summaries. Produces a concise Chinese report with completed work, impact, blockers, and next week plan.
---

# Weekly Report

## Workflow

1. Confirm the report date range. If missing, use the current week.
2. Collect source material from user-provided notes first.
3. If the user asks to include Git work, run `scripts/collect-git-summary.ps1`.
4. Group work by project or theme, not by raw commit order.
5. Produce a concise Chinese report using `assets/weekly-report-template.md`.
6. Mark uncertain items as uncertain instead of inventing progress.

## Constraints

- Do not expose private commit hashes unless the user asks.
- Do not claim shipped work if the source only shows drafts or experiments.
- Keep blockers separate from completed work.

## Reporting

Return the report content and list which sources were used.

这个 skill 的重点不是“会写周报”,而是固定了:先确认范围、优先用户资料、可选 Git 汇总、按主题分组、不能编造成果。

示例:写一个代码审查 skill

代码审查更适合写成流程,因为输出格式和关注点都很固定。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
---
name: focused-code-review
description: Use when the user asks for a code review of the current working tree, a commit, or a pull request. Prioritize bugs, regressions, security risks, and missing tests; do not rewrite code unless asked.
---

# Focused Code Review

## Workflow

1. Inspect `git status --short`.
2. Read the relevant diff.
3. Identify behavior changes before style issues.
4. List findings first, ordered by severity.
5. Include file and line references when possible.
6. If no issues are found, say so directly and mention remaining test gaps.

## Constraints

- Do not make code edits during review.
- Do not focus on formatting unless it can cause a real bug.
- Do not summarize before findings.

这个 skill 可以让 Codex 每次 review 都保持同一种姿势,而不是一会儿像导师,一会儿像 lint 工具,一会儿又直接帮你改代码。

示例:写一个博客发布 skill

站点内容工作也很适合 skill,因为它通常有固定规则:目录编号、front matter、语言文件、构建检查、提交边界。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
---
name: blog-post-publish
description: Use when the user asks to create or update a Hugo blog post in this repository. Handles post numbering, front matter, Markdown structure, lightweight validation, and publish-ready reporting.
---

# Blog Post Publish

## Workflow

1. Check `git status --short`.
2. If creating a new post, find the next numeric directory.
3. Create only the requested language file.
4. Preserve slug and date for existing posts.
5. Validate front matter, code fences, links, and encoding.
6. Do not run a full Hugo build unless requested.

## Constraints

- Do not overwrite the active article when the user asks for a new post.
- Do not generate translations unless the user explicitly asks.
- Do not change published URL fields casually.

这类 skill 的收益很大:它能防止“写错目录”“改错语言”“误改 slug”这类低级但代价很高的问题。

测试自己的 skill

写完 skill 后,不要只看 Markdown 漂不漂亮。要测三件事。

第一,能不能被选中。

你可以直接在提示词里显式调用:

1
$weekly-report 根据这周提交生成一版周报

也可以用自然语言测试:

1
帮我根据这周 git 提交写一版周报

如果自然语言任务经常触发不到,通常是 description 写得不够具体。

第二,选中后步骤是否够清楚。

观察 Codex 是否会:

  • 先检查状态;
  • 读取正确文件;
  • 调用正确脚本;
  • 遵守“不该做什么”;
  • 给出符合预期的最终报告。

第三,会不会误触发。

如果一个普通问答也触发 skill,说明 description 太宽,或者 skill 名字太泛。把触发条件写窄一点。

常见错误

把 skill 写成百科

Skill 不是知识库。它应该告诉 Codex 怎么做事。背景资料可以放 references,入口文件保持短而清楚。

description 只有关键词

只写 “Codex, workflow, automation” 没有用。Codex 需要知道什么时候用、输入是什么、输出是什么。

没有完成标准

如果 skill 没写验证步骤,Codex 很容易“做完就说做完”。至少要写清楚如何检查文件、命令、格式或结果。

脚本太危险

不要在 skill 脚本里默认做删除、覆盖、发布、付费调用、批量重命名。高风险动作应该先确认,或者放到单独 skill 里。

所有流程都写成一个 skill

“我的万能工作流”通常很难维护。更好的方式是拆成几个小 skill:写文章、翻译、部署、SEO、代码审查、周报,各管一件事。

维护建议

Skill 写完以后,也要像代码一样维护。

建议每次踩坑后只改一小处:

  • 如果 Codex 没选中,改 description
  • 如果 Codex 选中了但步骤不稳,改 Workflow
  • 如果输出格式不稳定,补 Reporting 或模板。
  • 如果经常手写同一段命令,抽到 scripts/
  • 如果 SKILL.md 太长,把背景拆到 references/

不要一次性把所有规则塞进去。Skill 越像一份可执行操作规程,越容易长期可用。

参考资料

总结

Codex skills 不是把提示词换个地方保存,而是把一套可重复工作流变成可发现、可执行、可验证的项目资产。

先从一个小流程开始:写清楚触发条件,列出输入和输出,把步骤拆成编号,把风险边界写明,把机械动作交给脚本,把长资料放到 references。测试时重点看三件事:该用时能不能选中,选中后能不能按流程做,不该用时会不会误触发。

当一个 skill 能让你少重复解释一次流程、少犯一次目录或命令错误,它就已经值得存在。

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计