Codex: Codex 规则与钩子
最后更新:2026-08-31
AGENTS.md 和钩子机制让你精确控制 Codex 在项目中的行为——什么能做、什么不能做、按什么规则做。
📋 前置知识:了解 Codex 基本配置
1. 你将学到
- AGENTS.md 规则文件详解
- 钩子(Hooks)机制
- 规则优先级
- 实战配置
2. AGENTS.md 详解
AGENTS.md 是项目根目录的规则文件,Codex 启动时自动读取,作为持久上下文。
(1) 基本结构
MARKDOWN
# AGENTS.md
## 项目概述
项目名称:E-Commerce API
技术栈:FastAPI + PostgreSQL + Redis
代码规范:PEP 8 + Black formatter
## 代码规则
- 所有函数必须有类型注解
- 所有 API 端点必须有输入验证
- 使用 dependency injection
- 错误处理使用自定义异常类
## 文件结构
- src/api/ - API 路由
- src/models/ - 数据模型
- src/services/ - 业务逻辑
- src/tests/ - 测试文件
## 禁止操作
- 不要修改 .env 文件
- 不要删除现有测试
- 不要安装新依赖(需人工确认)
- 不要修改 database/migrations/ 中的已有迁移
(2) 规则类型
| 类型 | 说明 | 示例 |
|---|---|---|
| 代码风格 | 编码规范 | "使用 TypeScript strict 模式" |
| 架构约束 | 设计限制 | "所有 API 必须通过 service 层" |
| 禁止操作 | 不可做的事 | "不要修改 .env 文件" |
| 验证要求 | 完成标准 | "确保 pytest 通过" |
| 项目上下文 | 背景知识 | "项目使用微服务架构" |
▶ 示例 1: Alice 的 AGENTS.md
MARKDOWN
# AGENTS.md
## 项目概述
Next.js 14 电商网站,使用 App Router + TypeScript + Prisma
## 代码规则
- 组件使用函数式组件 + TypeScript
- 使用 server actions 而非 API routes
- 数据获取使用 RSC (React Server Components)
- 样式使用 Tailwind CSS
- 表单使用 React Hook Form + Zod 验证
## 目录约定
- app/ - 页面和路由
- components/ - 可复用组件
- lib/ - 工具函数和配置
- types/ - TypeScript 类型定义
## 禁止操作
- 不要使用 'use client' 除非必要
- 不要安装新的 UI 库(使用已有的 shadcn/ui)
- 不要修改 prisma/schema.prisma 中的已有模型(只添加新的)
- 不要修改 middleware.ts
3. 钩子(Hooks)机制
钩子是在特定事件触发时自动执行的脚本。
(1) 钩子类型
| 钩子 | 触发时机 | 用途 |
|---|---|---|
| pre-task | 任务执行前 | 准备环境、加载上下文 |
| post-task | 任务完成后 | 运行测试、格式化代码 |
| pre-commit | 提交前 | Lint 检查、代码审查 |
| on-error | 出错时 | 错误报告、回滚 |
(2) 配置钩子
TOML
# .codex/config.toml
[hooks]
# 任务完成后自动运行测试
post-task = "npm test"
# 提交前自动格式化
pre-commit = "npm run format && npm run lint"
# 出错时发送通知
on-error = "curl -X POST https://hooks.slack.com/xxx -d 'Codex error'"
(3) 钩子脚本
BASH
# .codex/hooks/post-task.sh
#!/bin/bash
# 运行测试
npm test
if [ $? -ne 0 ]; then
echo "Tests failed! Fixing..."
codex --full-auto "修复所有失败的测试"
fi
# 格式化代码
npm run format
# 检查 lint
npm run lint
▶ 示例 2: Bob 的自动化钩子
TOML
# Bob 的钩子配置
[hooks]
post-task = "bash .codex/hooks/post-task.sh"
# .codex/hooks/post-task.sh
#!/bin/bash
npm test # 运行测试
npm run lint -- --fix # 修复 lint
npm run format # 格式化
echo "Hook: post-task completed"
4. 多级 AGENTS.md
Codex 支持多级 AGENTS.md,从根目录到子目录逐级生效:
TEXT
📖 仅展示
project/
├── AGENTS.md # 全局规则
├── src/
│ ├── AGENTS.md # src 目录规则
│ ├── api/
│ │ └── AGENTS.md # API 模块规则
│ └── auth/
│ └── AGENTS.md # Auth 模块规则
(1) 优先级
TEXT
📖 仅展示
子目录 AGENTS.md > 父目录 AGENTS.md > 根目录 AGENTS.md
(2) 实际使用
MARKDOWN
<!-- src/api/AGENTS.md -->
# API 模块规则
- 所有端点必须有 Swagger 文档
- 使用 Pydantic 做请求/响应验证
- 返回标准响应格式:{ data: ..., error: ... }
5. 规则优先级
TEXT
📖 仅展示
AGENTS.md 子目录 > AGENTS.md 根目录 > Skills > 配置文件 > 默认行为
❓ 常见问题
Q AGENTS.md 必须放在项目根目录吗?
A 根目录 AGENTS.md 是必须的,子目录 AGENTS.md 是可选的。Codex 会自动读取当前工作目录及其父目录的所有 AGENTS.md。
Q 钩子可以跳过吗?
A 可以。使用
--no-hooks 参数启动 Codex 会跳过所有钩子。Q AGENTS.md 会占用上下文窗口吗?
A 会,但占用很小。Codex 会压缩 AGENTS.md 的内容以减少 token 消耗。
Q 钩子脚本出错怎么办?
A 钩子出错不会影响 Codex 的主任务。Codex 会记录错误并继续执行。
Q 可以给不同文件类型设不同规则吗?
A 可以。在 AGENTS.md 中按文件类型或目录分别定义规则,Codex 会根据操作的文件匹配对应规则。
📖 小节
- AGENTS.md 是项目级规则文件,Codex 自动读取
- 规则类型:代码风格、架构约束、禁止操作、验证要求
- 钩子:pre-task / post-task / pre-commit / on-error
- 多级 AGENTS.md:子目录 > 父目录 > 根目录
- 规则优先级:AGENTS.md > Skills > 配置 > 默认
📝 作业
- 基础题(难度⭐):为你的项目创建 AGENTS.md,定义代码风格和禁止操作。
- 进阶题(难度⭐⭐):配置 post-task 钩子,实现任务完成后自动运行测试和格式化。
- 挑战题(难度⭐⭐⭐):设计多级 AGENTS.md 方案——根目录通用规则 + 各模块专用规则。