当你让 Codex 帮你写一段代码,它怎么知道你的项目是 Vue 还是 React?怎么知道你的数据库是 MySQL 还是 PostgreSQL?怎么知道你的团队缩进用 2 个空格还是 4 个 Tab?答案就是 AGENTS.md——Codex 的项目级指令文件。它就像给 AI 编程助手的一份"项目说明书",让它在正确的上下文中做出正确的决策。
本文将从零开始,深入讲解如何编写和优化 AGENTS.md,帮你在实际项目中充分发挥 Codex 的上下文感知能力。
AGENTS.md 是一个放在项目根目录下的 Markdown 文件,Codex 在启动时会自动读取它。它的作用是为 AI 代理提供项目级别的上下文信息,包括但不限于:
可以把它理解为 Codex 的"项目级系统提示词"——它不会直接生成代码,但会影响 Codex 生成代码时的每一个决策。
touch AGENTS.md
Codex 会从项目根目录递归向上查找 AGENTS.md 文件,直到找到一个或到达文件系统根目录。这意味着你可以在单体仓库(monorepo)的子目录中放置独立的 AGENTS.md。
一个最小可用的 AGENTS.md 大概长这样:
# 项目概述 这是一个基于 Laravel 10 的电商后端 API 项目,使用 MySQL 作为主数据库,Redis 作为缓存。 ## 技术栈 - PHP 8.2 - Laravel 10.x - MySQL 8.0 - Redis 7.x - Docker Compose 用于本地开发环境 ## 代码规范 - 使用 PSR-12 代码风格 - 数据库迁移文件命名遵循 `yyyy_mm_dd_hhmmss_描述.sql` 格式 - 所有 API 响应统一使用 `ApiResponse` 类包装 - 控制器方法不超过 7 行,业务逻辑放在 Service 层 ## 测试 - 使用 PHPUnit - 运行测试命令:`php artisan test` - 功能测试放在 `tests/Feature/` 目录 - 确保新功能有对应的测试覆盖
保存后,当你在这个项目中与 Codex 交互,它就会自动遵循这些约定。
一个好的 AGENTS.md 应该层次分明、信息密度高。推荐以下结构:
# [项目名称] 简短的项目描述(1-2 句话)。 ## 技术栈 列出主要技术栈,帮助 Codex 确定语言、框架、数据库等上下文。 ## 项目结构 说明关键目录的作用,帮助 Codex 理解代码组织方式。 ## 编码规范 团队约定的代码风格、命名规范、注释规范等。 ## 工作流程 开发、构建、测试、部署的命令和流程。 ## 注意事项 特殊的业务逻辑、已知的坑、性能注意事项等。
# ShopAPI - 电商后端服务 为移动端和 Web 端提供 RESTful API 的电商系统。 ## 技术栈 - PHP 8.2 + Laravel 10 - MySQL 8.0(主库)+ Redis(缓存 / 队列) - 队列驱动:Redis(通过 Laravel Horizon 管理) - 全文搜索:Meilisearch - 对象存储:AWS S3(通过 Flysystem 抽象) - API 文档:Scribe(自动生成) ## 项目结构 - `app/Models/` — Eloquent 模型 - `app/Services/` — 业务逻辑层,所有复杂逻辑放这里 - `app/Http/Controllers/` — 控制器,仅做参数验证和响应封装 - `app/Http/Requests/` — 表单验证类,每个请求独立一个类 - `app/Jobs/` — 异步任务 - `app/Enums/` — PHP 8.1 枚举类 - `database/migrations/` — 数据库迁移 ## 编码规范 - 严格遵循 PSR-12 - 类名使用帕斯卡命名(PascalCase),方法名使用驼峰命名(camelCase) - 数据库字段使用蛇形命名(snake_case) - 每个 Service 方法必须声明返回类型 - 使用 Repository 模式封装数据库操作 - 禁止在控制器中直接写 SQL 查询 ## 关键命令
./vendor/bin/sail up -d
./vendor/bin/sail test
./vendor/bin/pint
./vendor/bin/phpstan analyse
php artisan scribe:generate
php artisan horizon
## API 约定
- 所有响应格式为 `{ "code": 0, "message": "success", "data": {} }`
- 错误码定义在 `app/Enums/ErrorCode.php`
- 分页参数统一使用 `page` 和 `per_page`
- 需要用户认证的接口通过 `auth:sanctum` 中间件保护
如果你有一些自动生成的文件或敏感的配置文件不希望 Codex 改动,可以在 AGENTS.md 中明确说明:
## 禁止修改的文件 - `config/services.php` — 包含生产环境密钥,通过环境变量注入 - `routes/api.php` — 路由文件通过 OpenAPI 规范自动生成,请勿手改 - `public/build/` — 前端构建产物,由 CI 自动生成
Codex 在生成代码时可能会引入第三方包。提前声明包管理偏好可以避免"自己发明轮子":
## 依赖管理偏好 - HTTP 客户端:优先使用 Laravel HTTP Client,避免直接用 Guzzle - Excel 处理:使用 `maatwebsite/excel` - 权限管理:使用 `spatie/laravel-permission` - 图片处理:使用 `intervention/image` - 日期处理:优先使用 Carbon
明确的迁移规范能避免 Codex 生成不合规的迁移代码:
## 数据库约定
- 所有表名使用复数形式(`users`, `orders`, `products`)
- 外键命名格式:`{表名}_{字段名}_foreign`
- 索引命名格式:`{表名}_{字段名}_index`
- 时间戳字段统一使用 `$table->timestamps()` 和 `$table->softDeletes()`
- 金额字段使用 `decimal(10, 2)`,单位为人民幣「元」
如果你的项目支持多语言,告诉 Codex 可以避免硬编码字符串:
## 国际化(i18n)
- 所有用户可见的文本必须通过 `__()` 或 `@lang()` 函数输出
- 翻译文件位置:`lang/{locale}/messages.php`
- 默认语言:zh_CN
- 支持语言:zh_CN, en, ja
当你运行 codex 并开始一段对话时,Codex 会执行以下步骤:
发现阶段:从当前工作目录向上遍历,查找 AGENTS.md 文件
加载阶段:将 AGENTS.md 的内容作为上下文注入到 AI 模型的系统提示中
交互阶段:在你的每一次追问中,AGENTS.md 的内容都会作为"背景知识"持续生效
这意味着 AGENTS.md 不是一次性的——它会影响整个会话中 Codex 的所有行为。
你可以用一句话来验证 AGENTS.md 是否被正确加载:
codex "根据项目规范,我应该用什么命令来运行测试?"
如果 Codex 能准确回答你在 AGENTS.md 中定义的测试命令(比如 php artisan test),那就说明配置生效了。
AGENTS.md 不是项目文档,不需要长篇大论。每个模块用 2-3 句话说明即可。大模型的上下文窗口虽然很大,但信息密度越高,AI 越容易抓住重点。
项目在演进,AGENTS.md 也要跟上。建议把 AGENTS.md 的更新纳入 Code Review 流程——每当你引入新的技术栈或修改了编码规范,同步更新 AGENTS.md。
不需要写"使用 Git 进行版本控制"或"代码要写注释"这种废话。把宝贵的上下文留给真正关键的信息。
命令行、配置示例、代码片段都应该放在代码块里,方便 AI 精确解析:
## 构建与部署
composer install --no-dev
npm run build
composer dump-autoload --optimize
php artisan config:cache
php artisan route:cache
php artisan view:cache
绝对不要!AGENTS.md 是纯文本文件,通常会被提交到 Git 仓库中。任何 API 密钥、数据库密码、内部 IP 地址等敏感信息都应通过环境变量管理。
首先检查文件是否在正确的位置(项目根目录或父目录)。其次,检查你的指令是否足够明确和具体。模糊的指令(如"写好代码")AI 无法执行;具体的指令(如"使用 PSR-12 标准,每个方法不超过 30 行")效果更好。
如果问题仍然存在,可以尝试在对话中明确引用你的 AGENTS.md:
请仔细阅读 AGENTS.md 中的编码规范,然后帮我实现这个功能。
Codex 会从当前目录向上查找 AGENTS.md,最接近当前目录的文件优先级最高。但 Codex 不会自动合并多个 AGENTS.md——它使用的是找到的第一个文件。
AGENTS.md 是连接你的项目现实和 AI 编程能力之间的桥梁。一份精心编写的 AGENTS.md 能让 Codex 从一个"通用代码生成器"变成一个"懂你项目的专属程序员"。
写好 AGENTS.md 不需要复杂的技术,需要的是对你项目的深入理解和对 AI 行为的合理预期。建议你今天就在正在工作的项目中创建一个 AGENTS.md,从技术栈和关键命令开始,然后逐步丰富。
当你习惯了这种工作方式,你会发现 Codex 生成代码的质量和相关性会有质的飞跃——因为它终于"认识"你的项目了。