如果你已经跟着前面的系列文章把 Codex 的各种核心功能(沙箱、Hook、MCP、Skills 等)都跑通了,那你可能会问:"功能我都会了,但每天用的时候怎么才能真正快起来?"
效率提升的关键不在于知道有哪些功能,而在于怎么把这套工具塞进你的日常流程,让操作变成肌肉记忆。本文整理了 10 个我在日常开发中高频使用的 Codex 技巧,它们不是独立的功能讲解,而是将已有能力组合运用的范式。每一条都经过实际项目验证,能帮你在使用 Codex 时少打字、快定位、多产出。
读完这篇文章,你将掌握:命令速记与别名、上下文精准控制、并行任务策略、以及让 Codex 像"老同事"一样理解你项目习惯的方法。
每次输入 codex exec "..." 或者 codex sandbox exec "..." 都太长了。第一步优化就是给常用操作起别名。
在 .bashrc 或 .zshrc 中加入:
# Codex 常用别名 alias cx="codex exec" alias cxs="codex sandbox exec" alias cxlog="codex log" alias cxconf="codex config" alias cxskill="codex skill"
使用对比:
# 之前 codex exec "为 src/utils/helper.go 中的所有函数添加错误处理" # 之后 cx "为 src/utils/helper.go 中的所有函数添加错误处理"
配合历史搜索(Ctrl+R)复用之前的指令,交互效率可以再翻一倍。如果你经常执行相似的任务,可以把命令模板存成 Shell 函数:
cxrefactor() {
local file=$1
shift
cx "重构 $file: $*"
}
# 使用:cxrefactor src/api/handler.go 拆分过长的 HandleRequest 函数
Codex 默认每次 exec 都是从空白上下文开始的。如果你需要连续处理同一个模块,最好的做法不是反复描述背景,而是把前置上下文内化到 AGENTS.md 或 Session 文件中。
项目根目录下的 AGENTS.md 会在每次 Codex 启动时自动加载。把那些每次对话都要重复交代的事放进去:
<!-- AGENTS.md -->
## 项目架构
- 后端框架:Go + Gin
- 数据库:PostgreSQL,ORM 使用 GORM
- 前端:React + TypeScript,状态管理 Zustand
- API 风格:RESTful,统一返回格式 {code, message, data}
## 编码规范
- Go 代码使用 golangci-lint 检查,配置文件在 .golangci.yml
- 接口命名以 I 开头,实现类以 Impl 结尾
- 所有 API 必须在 api_spec.yaml 中声明
## 当前会话目标
正在开发用户权限模块(RBAC),需要补全角色 CRUD 和权限校验中间件。
这样每次 cx 不需要再解释"我们是做什么的、用什么技术栈"。
一个实用习惯:开两个终端窗口。第一个用于和 Codex 连续对话,第二个用于执行 git、cat、ls 等常规命令。不要把 Codex 窗口关掉再重开,让上下文保持"温热"状态,Codex 会更了解你当下在做什么。
@file 和行号缩小 AI 视野Codex 支持通过 @ 符号在指令中引用文件,这是节省 token 且提升准确率的利器。
错误示范(让 AI 漫无目的地扫描整个项目):
cx "把错误处理改成统一格式"
正确示范(精准定位到大文件和需要改的行):
cx "把 @src/api/user_handler.go:45-120 中的错误处理改成统一格式,调用 @pkg/errors/wrap.go 的 WrapError"
技巧总结:
@文件路径:行号范围 限制上下文窗口cat 或 rg 定位目标代码,再拼入命令很多开发者习惯给 Codex 发"全量指令"——期望一句话完成整个功能。实际效果往往不如把任务拆成 3~5 步,每一步验证结果后再继续。
反面案例:
cx "创建一个完整的用户管理模块,包括 CRUD API、数据库迁移、Swagger 文档、单元测试和前端页面"
这条指令会让 Codex 一次性吐出海量代码,错误率高、难以审查。
正面案例:
# 第 1 步:定义数据模型 cx "创建 User 模型文件,包含 id/name/email/password/role 字段,使用 GORM 标签" # 第 2 步:编写数据库迁移 cx "为 @src/model/user.go 的 User 结构体生成 GORM AutoMigrate 迁移脚本" # 第 3 步:实现 API cx "为 User 模型生成 RESTful CRUD Handler,参考 @src/api/product_handler.go 的写法风格" # 第 4 步:写测试 cx "为 @src/api/user_handler.go 中的所有接口编写 httptest 单元测试" # 第 5 步:生成 Swagger 注解 cx "为 @src/api/user_handler.go 中的接口添加 Swagger 注释"
每一步执行完,你都能用 go build 或 go test 先验证,不会出现"写完 500 行发现从头就错了"的尴尬。
当你需要对多个文件做相同模式的修改时(比如给所有 Handler 加统一日志),让 Codex 一次处理一批比逐个处理高效得多。
cx "给 @src/api/ 目录下所有 *_handler.go 文件的每个 API 函数开头,添加统一的请求日志打印:
log.Printf('[API] %s called', funcName)"
对于模式更固定的批量操作,建议写一个 Shell 循环:
for file in src/api/*_handler.go; do
cx "给 $file 中的每个 public 函数添加 Defer-Recover 错误捕获"
done
注意:Codex 每次调用都有上下文开销,如果文件很多但改动很小(比如统一改一个 import 路径),用 sed 或 IDE 的重构功能更快——不要让 AI 做文本替换。
codex sandbox exec 的魅力不仅在于安全隔离,更在于它给你提供了一个零成本的试错环境。不确定 AI 生成的代码是否正确?先在沙箱里跑一遍。
cxs "帮我写一个 Python 脚本来批量重命名文件,在当前目录创建测试文件验证逻辑是否正确"
Codex 会在沙箱容器中创建测试文件、执行脚本、展示结果——全程不影响你本机的任何文件。确认脚本逻辑无误后,再复制到本地执行。
进阶用法:在 .codex/config.toml 中把测试或临时性任务默认指向沙箱:
[exec] default_mode = "sandbox" # 全局默认用沙箱
而确定性高的代码生成任务(如"添加一个字段"),则显式用 codex exec 直接在本地工作。
Codex 支持切换不同的底层模型。日常开发中大约 60-70% 的任务(补全字段、添加日志、格式化代码)并不需要最强的模型。
在项目的 .codex/config.toml 中为不同场景预设模型:
# .codex/config.toml [models] default = "gpt-5-mini" # 日常任务用轻量模型 refactor = "gpt-5" # 重构/复杂逻辑用强模型 review = "gpt-5" # Code Review 用强模型
使用时通过参数切换:
# 日常简单任务 cx "给 User 结构体添加 UpdatedAt 字段" # 复杂重构时显式切换 cx --model gpt-5 "重构 @src/service/order.go 的 PlaceOrder 函数,消除 3 层嵌套 if"
判断标准:如果你自己 30 秒能在脑子里想清楚的改动,就用 mini 模型;需要推演逻辑分支的,用强模型。养成这个习惯后,模型调用成本能下降 40% 以上。
每次 Codex 改完代码,你都手动跑 go build && go test 吗?用 Post-Exec Hook 自动化这一步。
在 .codex/hooks/post_exec.sh 中写入:
#!/bin/bash
# Codex 执行后自动编译和测试
CHANGED_FILES=$(git diff --name-only HEAD)
if echo "$CHANGED_FILES" | grep -q "\.go$"; then
echo "==> 检测到 Go 文件变更,自动编译..."
go build ./...
if [ $? -eq 0 ]; then
echo "✅ 编译通过"
echo "==> 运行单元测试..."
go test ./... -count=1 2>&1 | tail -20
else
echo "❌ 编译失败,修复后再试"
fi
fi
然后注册 Hook:
# .codex/config.toml [hooks] post_exec = ".codex/hooks/post_exec.sh"
现在每次 cx 执行完成,Hook 都会自动触发编译和测试——你只需要盯着输出等结果。
更进一步,还可以在 Hook 中加入 lint 检查和格式化:
golangci-lint run --new-from-rev=HEAD~1 go fmt ./...
当你发现某个 Codex 任务重复做了 3 次以上,就应该把它抽象成一个 Skill。Skill 本质上是带参数的指令模板,放在 .codex/skills/ 目录下。
示例:快速生成数据验证函数
创建 .codex/skills/add-validation.toml:
[skill]
name = "add-validation"
description = "为指定结构体添加字段校验规则"
[prompt]
template = """
为结构体 {{struct}} 的每个字段添加 validate tag,规则如下:
- 字符串字段:required、min=1
- 数字字段:required、min=0
- Email 字段:required、email
同时生成对应的校验函数 Validate{{struct}}(v *{{struct}}) error
参考项目现有的 validate 模式:@pkg/validate/validator.go
"""
使用:
cxskill add-validation --struct User
适合封装成 Skill 的场景:
Codex 改代码的时候,你给的上下文质量直接决定输出质量。除了 @文件 引用,还可以把编译错误、运行时日志、测试失败信息直接喂给 Codex。
# 把编译错误喂给 Codex go build ./... 2>&1 | cx "修复以下编译错误:$(cat)" # 把测试失败信息喂给 Codex go test ./... 2>&1 | tail -50 | cx "修复以下测试失败:$(cat)" # 把 Lint 问题喂给 Codex golangci-lint run ./... 2>&1 | cx "修复以下 lint 问题:$(cat)"
进阶版:把上面的模式写成 Shell 函数:
cxfix() {
local cmd="$1"
local output
output=$($cmd 2>&1)
if [ $? -ne 0 ]; then
echo "$output" | cx --model gpt-5 "修复以下错误/警告:\n$(cat)"
else
echo "✅ 没有检测到问题"
fi
}
# 使用
cxfix "go build ./..."
cxfix "golangci-lint run --new-from-rev=HEAD~1"
这个模式尤其适合"改完代码 → 编译失败 → 复制错误 → 手动粘贴 → 让 Codex 修复"的四步循环——现在它是一步完成。
这 10 条技巧可以归纳为三个层次:
| 层次 | 技巧 | 核心收益 |
|------|------|----------|
| 输入效率 | #1 Shell 别名、#2 会话复用、#3 @file 引用 | 少打字、快定位 |
| 执行策略 | #4 分步执行、#5 并行 Batch、#6 沙箱验证 | 少犯错、敢试错 |
| 自动化闭环 | #7 模型降级、#8 Post Hook、#9 Skill 封装、#10 日志驱动修复 | 少重复、多沉淀 |
使用 Codex 的终极目标不是"让 AI 替你写代码",而是建立一套以 AI 为执行引擎、以你的判断为决策中枢的协作流程。你越愿意花时间打磨自己的工作流,Codex 就越像一个真正懂你的编程搭档。
把上面你最感兴趣的 2~3 条技巧,今天就用进你的实际开发中去吧。