Appearance
用 Codex 读懂陌生代码库
接手陌生项目时,最浪费时间的做法是让 Codex“介绍一下整个仓库”。它很容易给出正确但无用的框架常识。更有效的方法是选择一条真实业务链路,要求每个结论都落到文件、函数、配置或运行结果上。
本章交付物
完成后你应该得到一份可核对的项目地图,至少包括:
- 项目用途与主要运行单元;
- 启动、测试、构建和部署入口;
- 一条真实请求或用户操作的完整链路;
- 关键数据结构及读写位置;
- 配置、外部服务和环境变量边界;
- 修改这条链路时最容易踩的坑;
- 已确认、推断和未验证信息的区分。
第一步:建立仓库基线
bash
cd /path/to/project
git status --short --branch
git log -5 --oneline然后只读启动:
bash
codex --sandbox read-only -C /path/to/project首次提示不要问业务细节,先找地图:
text
只读盘点当前仓库,不修改文件、不安装依赖。
请找出:
1. 仓库包含哪些可独立运行的应用或包;
2. 每个应用的入口、启动、测试和构建命令;
3. 主要配置文件、数据存储和外部服务;
4. 哪些目录是生成物、第三方代码或不应直接修改的内容;
5. 结论对应的文件路径。
把明确事实、合理推断和未验证项分开。第二步:只追一条真实链路
选择一个可以明确描述的行为,例如:
- 用户提交登录表单;
- API 请求
/orders/{id}; - 定时任务结算账单;
- 点击“保存”后数据落库;
- 消费一条消息并更新状态。
提示模板:
text
追踪“[用户动作或请求]”的真实执行链路。
从入口开始,按执行顺序列出:
- 路由或事件入口;
- 参数解析与校验;
- 业务服务;
- 数据查询/写入;
- 外部调用;
- 响应或状态变化;
- 错误处理和日志。
每一步给出文件路径、函数/类名和关键数据形状。找不到时停在已确认位置,不要按框架习惯补全。第三步:让代码地图接受反向验证
对 Codex 的链路反问三次:
text
这条链路里,哪个结论最可能因为动态路由、依赖注入或配置覆盖而判断错误?请重新检查证据。text
从最终数据库写入或响应构造位置反向追踪到入口,看看是否存在另一条分支。text
搜索同一字段名、路由名和事件名的所有引用,区分生产代码、测试、迁移和废弃实现。正向阅读容易漏掉旁路,反向追踪和全局引用能发现第二个入口、旧实现或异步分支。
第四步:运行最小验证
如果项目能启动,让 Codex先解释命令来源,再在可写权限下执行最小检查。例如:
text
先说明你建议的启动或测试命令来自哪个配置文件。然后只运行与这条请求链路直接相关的最小测试,不修改文件。报告命令、退出码和关键输出。无法启动时,也要得到明确原因:缺依赖、缺环境变量、服务不可达、平台不兼容,还是命令本身错误。
第五步:输出一份可交接的地图
让 Codex按下面结构整理,不要追求漂亮长文:
text
请生成项目链路交接说明:
1. 一句话用途
2. 运行单元与入口表
3. [目标行为] 的编号调用链
4. 关键数据结构与生命周期
5. 配置和外部依赖
6. 最小验证命令
7. 修改风险清单
8. 未验证项
9. 关键文件索引你应该能够打开索引中的任意文件,验证它为什么出现在说明里。
多仓库项目怎么处理
不要让 Codex一次扫描整块工作区后猜关系。先分别回答:
- 请求最先到哪个仓库;
- 通过 HTTP、消息、数据库还是文件跨仓库;
- 每个边界的真实 URL、Topic、表或配置字段;
- 哪个仓库负责鉴权、计费和最终响应;
- 本地分支与线上部署版本是否一致。
每跨一个仓库都建立一个可搜索的“连接点”,例如环境变量名、路由前缀、Header 或消息 Topic。
常见失败模式
只生成目录树
目录树不能解释运行时行为。要求追踪一个具体请求或事件。
把测试实现当生产实现
要求每个引用标明来源类型,并优先验证生产入口。
忽略配置覆盖
同一字段可能被环境变量、项目配置、用户配置或部署平台覆盖。要求列出优先级和当前环境实际值的来源,但不要打印秘密值。
看到接口就假设前端在使用
搜索真实调用方、网络请求封装和路由。没有调用证据时写成“未确认”。
完成门槛
- [ ] 至少追踪一条端到端链路。
- [ ] 每个关键结论都能定位到文件或运行结果。
- [ ] 区分了同步、异步和替代分支。
- [ ] 找到了最小验证命令。
- [ ] 列出了未验证信息,而不是补全猜测。
下一步
掌握调用链后,继续学习 复现并修复 Bug。