文章

How to Write AGENTS.md

总结为 Codex 编写 AGENTS.md 的方法,涵盖结构建议、约束表达与可执行性要求。

How to Write AGENTS.md

以下是一份由 AI 生成的、针对 Codex 编写的 AGENTS.md 模板和指南。当作一个备忘录,希望有帮助。

随着 AI 编程代理(如 Codex)的兴起,越来越多的开发者开始使用它们来辅助代码修改、功能实现和问题修复。但由于这些代理是基于语言模型的,它们在理解项目上下文、工程规范和安全边界方面存在局限。因此,编写一份清晰、具体的 AGENTS.md 成了确保 AI代理能够正确、有效地为你的项目服务的关键。

如何为 Codex 编写 AGENTS.md

本文是给仓库维护者的实操指南:你可以把 AGENTS.md 看成“给 AI 编程代理的项目协作手册”。

写得好的 AGENTS.md 可以让代理:

  • 更快进入状态(少问问题、少走弯路)
  • 按你的工程规范做事(测试、风格、提交流程)
  • 避免高风险行为(误删文件、错误发布、越权操作)

1. AGENTS.md 是什么

AGENTS.md 是放在仓库中的约定文件,告诉 Codex(或其他代理)在这个项目里应该如何工作。

你可以把它理解为以下内容的组合:

  • 项目背景与目标
  • 本地开发与测试命令
  • 代码修改范围和边界
  • 质量门槛(测试、Lint、类型检查)
  • 交付标准(提交信息、PR 说明、变更记录)

2. 推荐放置位置

通常放在仓库根目录:

  • ./AGENTS.md

如果你有多模块仓库,也可以:

  • 根目录放“全局规则”
  • 子目录放局部 AGENTS.md(覆盖该子项目特殊约束)

示例:

  • AGENTS.md(全局)
  • services/api/AGENTS.md(API 子项目规则)
  • web/AGENTS.md(前端子项目规则)

3. 一份好 AGENTS.md 的结构

建议按下面顺序组织:

  1. 项目简介(做什么、技术栈、运行环境)
  2. 快速开始(安装依赖、启动命令)
  3. 必跑检查(test/lint/typecheck/build)
  4. 修改边界(哪些可改、哪些不能动)
  5. 编码规范(风格、命名、注释)
  6. 提交流程(分支、commit、PR 模板)
  7. 安全与敏感操作(禁止项、需确认项)
  8. 参考资料(关键文档路径)

4. 编写原则(非常关键)

原则 A:给“可执行指令”,不要写口号

差的写法:

  • “请保证质量”

好的写法:

  • “每次改动后必须执行 pnpm test && pnpm lint && pnpm typecheck,失败不得提交。”

原则 B:约束要具体到命令和路径

差的写法:

  • “不要改核心模块”

好的写法:

  • “未明确要求时,不得修改 infra/scripts/release/.github/workflows/。”

原则 C:区分“必须”和“建议”

建议使用关键词:

  • MUST(必须)
  • SHOULD(建议)
  • MUST NOT(禁止)

原则 D:写清失败处理策略

例如:

  • 测试失败怎么办
  • 依赖安装失败怎么办
  • 遇到脏工作区怎么办

5. 常用内容模板(可直接复用)

5.1 任务执行策略

1
2
3
4
## Execution Policy
- MUST 先阅读与任务相关的目录和测试用例,再改代码。
- MUST 优先做最小改动,避免无关重构。
- SHOULD 把复杂改动拆成多个可审阅提交。

5.2 测试与质量门槛

1
2
3
4
5
## Quality Gates
- MUST 运行:`pnpm lint`
- MUST 运行:`pnpm test`
- MUST 运行:`pnpm typecheck`
- MUST 在提交说明里记录测试结果摘要。

5.3 风险控制

1
2
3
4
## Safety Rules
- MUST NOT 执行破坏性命令(如 `rm -rf`, `git reset --hard`),除非用户明确要求。
- MUST NOT 修改生产环境配置文件:`deploy/prod/*`- MUST 在执行数据库迁移前先征求确认。

6. 你可以直接填写的骨架

把下面保存为 AGENTS.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
# AGENTS.md

## Project Overview
- Name: <项目名>
- Stack: <语言/框架>
- Goal: <项目目标>

## Setup
- Install: `<安装命令>`
- Dev: `<启动命令>`
- Build: `<构建命令>`

## Quality Gates
- MUST run: `<lint命令>`
- MUST run: `<test命令>`
- MUST run: `<typecheck命令>`

## Scope
- Editable paths: `<可修改目录>`
- Restricted paths: `<限制目录>`

## Coding Rules
- Style: `<风格规范>`
- Naming: `<命名规范>`
- Comments: `<注释要求>`

## Git Workflow
- Branch: `<分支策略>`
- Commit: `<提交规范>`
- PR: `<PR要求>`

## Safety
- MUST NOT: `<禁止行为>`
- Ask before: `<需确认操作>`

## References
- `<文档路径1>`
- `<文档路径2>`

7. 完整示例:一个可落地的 AGENTS.md

下面是一份完整示例(Node.js + TypeScript + Monorepo 场景):

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# AGENTS.md

## Project Overview
- Repository: acme-platform
- Architecture: pnpm monorepo (`apps/*`, `packages/*`)
- Main apps:
  - `apps/web`: Next.js frontend
  - `apps/api`: Fastify backend
- Shared packages:
  - `packages/ui`
  - `packages/config`
  - `packages/utils`

## Environment
- Node.js: 20.x
- Package manager: pnpm 9.x
- Database: PostgreSQL 15
- Copy `.env.example` to `.env` before local run.

## Setup & Run
- Install dependencies:
  - `pnpm install`
- Start all apps in dev mode:
  - `pnpm dev`
- Start single app:
  - `pnpm --filter @acme/web dev`
  - `pnpm --filter @acme/api dev`

## Required Quality Gates
Before any commit, agent MUST run all of:
- `pnpm lint`
- `pnpm typecheck`
- `pnpm test`

If task touches build config or dependency graph, also run:
- `pnpm build`

If a command fails:
- Include failure summary in final response.
- Do not claim success.

## Code Change Policy
- MUST keep changes minimal and task-focused.
- MUST preserve public API compatibility unless task explicitly requests breaking changes.
- SHOULD add or update tests for behavioral changes.

### Editable by default
- `apps/**`
- `packages/**`
- `tests/**`
- `docs/**`

### Restricted (need explicit user request)
- `.github/workflows/**`
- `infra/**`
- `scripts/release/**`
- `deploy/prod/**`

## Coding Standards
- TypeScript strict mode must pass.
- Prefer explicit types on exported functions.
- Avoid introducing new dependencies unless necessary.
- Keep functions small and cohesive.
- Add comments only for non-obvious logic.

## Testing Rules
- For unit logic changes:
  - update/add unit tests near changed module.
- For API contract changes:
  - update integration tests under `apps/api/test`.
- For UI behavior changes:
  - add/update React Testing Library tests.

## Git & PR Rules
- Branch naming:
  - `feat/<short-topic>`
  - `fix/<short-topic>`
  - `chore/<short-topic>`
- Commit convention:
  - `feat: ...`
  - `fix: ...`
  - `chore: ...`
  - `test: ...`
  - `docs: ...`
- PR description MUST include:
  - What changed
  - Why changed
  - Risk/impact
  - Test evidence (commands + key results)

## Safety Constraints
- MUST NOT run destructive commands (e.g. `rm -rf`, `git reset --hard`) unless explicitly requested.
- MUST NOT modify secrets or real credentials files.
- MUST ask for confirmation before:
  - DB schema migrations
  - production config changes
  - mass file deletion or renaming

## Collaboration Behavior
- If workspace is dirty, do not revert unrelated changes.
- If unexpected external edits appear during task, pause and report.
- Prefer `rg` for search and `rg --files` for file discovery.

## Reference Docs
- `README.md`
- `docs/architecture.md`
- `docs/contributing.md`
- `docs/testing.md`

8. 自检清单(写完后检查)

在你提交 AGENTS.md 前,确认:

  • 规则是否可执行(都能落到命令/路径)
  • 禁止项是否明确(尤其破坏性操作)
  • 质量门槛是否闭环(失败时如何处理)
  • 是否区分必须/建议
  • 是否覆盖了该仓库的真实技术栈

如果这些都满足,这份 AGENTS.md 基本就能稳定指导 Codex 做出可控改动。

本文由作者按照 CC BY 4.0 进行授权