Codex CLI一次改十几个文件并不稀奇。它读到一个需求后,可能同时动接口、类型、测试、文档和配置。看起来效率很高,风险也在这里。人手写代码时,一次改太多都容易漏;AI改得更快,评审压力会被放大。安全不安全,关键不在文件数量,而在你有没有把范围、验证和回滚管住。
开始前要把任务边界写窄。不要说“优化订单模块”,可以说“只修复订单导出时间格式错误,优先查看export目录,不改支付和库存逻辑”。边界越具体,Codex越不容易顺手做无关重构。遇到它提出大范围改造时,先让它列计划,不要马上批准。计划里如果出现“顺便统一命名”“顺便抽公共方法”,要问一句:这和当前Bug有什么关系。
改动完成后第一眼看文件列表。配置文件、锁文件、数据库迁移、权限策略、全局类型、公共工具函数,这些都是高风险位置。一个小Bug如果牵出这些文件,说明任务范围可能扩大了。不要急着看代码细节,先判断影响面。文件列表就是风险地图,地图太大,PR就该拆小。
第二步看diff里的删除内容。新增代码容易吸引注意,真正危险的常常是删除了旧逻辑、吞掉了异常、改了默认值。特别要看条件判断有没有被简化,错误码有没有变,日志有没有被删,边界情况有没有丢。AI有时会为了让测试通过,把原本业务上需要保留的分支合并掉。这类问题不看diff很难发现。
测试命令要写进提交说明。可以让Codex建议要跑哪些测试,但最终由你决定。小改动可以跑相关单测和lint,涉及接口可以跑契约测试,影响前端页面要跑构建或关键页面检查。没有条件跑的测试也要写清原因,比如“未跑e2e,缺少测试账号”。这句话看着朴素,却能让评审者知道风险在哪里。
如果团队统一使用Codex / Claude Code入口,最好把测试、Key配置、模型选择和最小请求流程写进内部文档。下面这份教程链接可以放在接入说明里,避免每个新人都从聊天记录里复制不同版本的命令:
https://my.feishu.cn/wiki/NIgLwuuj1ibzJIkLGM0cgVNinzg
PR描述不要只让Codex写“完成需求”。更有用的格式是:改了哪些文件,为什么改,验证命令是什么,哪些风险还要人工看,回滚方式是什么。让工具根据diff生成初稿没问题,但你要补上业务判断。比如“订单状态枚举新增一项,历史数据不受影响”这种信息,AI未必知道真实背景。
对多文件改动,建议采用两段式提交。第一段只做机械修改,比如补类型、改路径、加测试壳;第二段处理业务逻辑。这样回滚更清楚,评审也更轻松。不要让一个提交里同时出现格式化、依赖升级、业务修复和文档调整。Codex速度快,但Git历史仍然要给人看。
有些目录可以设置为默认只读。生产配置、数据库迁移、密钥文件、CI/CD脚本、权限策略,不要让Codex在没有确认的情况下直接改。你可以让它输出建议补丁或说明,让维护者手动处理。AI编程工具不是危险,危险的是把所有权限一次性放开,又不看它做了什么。
一次改多个文件可以安全,前提是每一步都能解释。范围清楚、diff可读、测试可复现、风险写明、回滚容易,这五件事做到,Codex CLI会很省力。反过来,如果你只看一句“任务完成”,不看文件、不跑测试、不写记录,哪怕只改一个文件也可能埋坑。工具越快,人越要把关口设在对的位置。
提示词里可以加入“暂停点”。例如“列出计划后停下,等我确认”,“发现需要改配置文件时停下”,“测试失败超过两次时停下并说明原因”。暂停点能防止任务一路滚大。很多多文件PR失控,原因未必是最初需求复杂,常常是工具在执行中不断顺手扩张。
文件格式化要单独处理。Codex有时会触发格式化,导致diff里出现大量无关变化。评审者看到几百行格式变化,很容易错过真正的业务修改。可以在任务里写明不要全量格式化,或把格式化作为单独提交。这样PR会干净很多。
依赖升级要特别谨慎。一个小修复如果带出package-lock、pnpm-lock、requirements或go.sum大面积变化,需要问清原因。依赖升级可能影响整个项目,不该混在业务Bug里。让Codex解释新增依赖的必要性,能用现有库解决就不要新增。
测试失败时,不要让工具无限自修。可以给它两次尝试机会,仍失败就停下来输出已尝试方案、当前错误和可能原因。无限自修很容易把代码改得越来越远,最后测试过了,业务逻辑却变了。人要在关键节点介入。
合并后也要观察。多文件改动进入主分支后,关注相关日志、错误率和用户反馈。让Codex帮你整理上线观察清单也很实用:看哪些指标、看多久、出现什么情况回滚。PR合并不是结束,真正安全来自上线前后的完整闭环。
如果PR太大,可以让Codex帮你拆分提交。让它按照文件类型、业务模块或风险等级建议拆法。比如测试单独一笔,文档单独一笔,业务逻辑单独一笔。拆分并不是为了形式好看,目的是让评审者能逐块理解。理解成本下降,合并风险也会下降。
对公共函数的改动要追调用方。一个工具函数可能被十几个模块使用,Codex改它时只看当前Bug,很容易影响其他路径。可以要求它列出所有调用位置,并标记本次是否覆盖测试。调用方越多,越应该保守。公共函数不是不能改,改之前要知道波纹会传到哪里。
生成PR说明后,最好让熟悉业务的人补一段“业务影响”。工具能总结代码变化,却未必知道客户、运营、财务或客服会受什么影响。比如导出字段变化,研发看是小改,运营却可能依赖旧列名。把业务影响写清楚,评审会更稳。
多文件改动进入主分支前,还可以跑一次只读复查。让Codex根据当前diff找潜在遗漏,但不允许改文件。它可能提醒未更新文档、未补边界测试、某个异常分支没有覆盖。这个动作成本低,常常能发现人眼漏掉的小问题。
评审时可以让Codex自己扮演审查者,但要限制它只提问题。比如“根据diff列出五个需要人工确认的风险点,不要修改文件”。这种复查常能提醒你看遗漏的异常分支、配置变化或测试空白。AI写完后再让AI挑刺,仍然要由人做最终判断。
如果任务涉及前端页面,截图或本地预览也要进验证流程。只跑构建不代表页面没问题。按钮文案、空状态、移动端宽度、错误提示,都可能被代码修改影响。让Codex列出需要手工点击的页面,比只看单元测试更完整。
多文件改动还要关注提交顺序。先提交低风险的测试和文档,再提交业务逻辑,最后提交配置变化,这样评审和回滚都会更清晰。顺序混乱时,即使每段代码都没错,维护者也要花更多时间理解。