Codex 清理代码需四步:先查配置文件与导出声明明确对外接口;再用--preserve锁定文件路径;接着用CONTRACT.md注入契约描述以约束清理范围;最后通过--dry-run报告验证是否误删导出项。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

用 Codex 清理代码时,若直接让它“删掉所有无用函数”或“优化冗余逻辑”,它极可能把对外暴露的接口函数、导出符号、API 路由入口一并删掉——因为这些函数在项目内部调用链上常是“叶子节点”,静态分析判定为“未被调用”。你真正需要的是:让 Codex 精准识别哪些是必须保留的对外契约,再在此前提下清理其余部分。
第一步:明确对外接口的物理标识
打开项目根目录下的 package.json(Node.js)或 pyproject.toml(Python)或 Cargo.toml(Rust),找到 exports / [project.entry-points] / [[lib]] 等字段。Codex 不会自动猜你暴露了什么,它只认配置文件里白纸黑字写明的入口。如果这些字段为空或缺失,Codex 默认认为“没有对外接口”,后续所有清理都按内部模块处理。
检查 src/index.ts 或 main.py 或 lib.rs 文件顶部是否有显式导出声明,例如 export { init, render } from './core'; 或 if __name__ == '__main__': … 或 pub fn new() -> Self { … }。Codex 依赖这类语法锚点定位契约边界,而不是靠函数名含 “api” 或 “handler” 这类模糊关键词。
第二步:用 CLI 指令锁定接口范围
在终端中执行:codex clean --preserve=src/index.ts --preserve=api/ --preserve=types.d.ts。多个路径用空格分隔,支持通配符,如 --preserve="routes/**/*.ts"。
注意:--preserve 参数只保护文件或目录层级,不保护文件内某一行。如果你只希望保留某个函数但删掉同文件其他内容,必须先将该函数抽离到独立文件,再把该文件路径传给 --preserve。
这一步操作起来很简单,直接把文件拖进去就行。但漏掉一个关键路径,比如忘了加 types.d.ts,Codex 可能顺手删掉类型定义,导致下游 TypeScript 项目编译失败。
第三步:注入接口契约描述
在清理命令前,先运行:codex inject --role=contract --file=CONTRACT.md。CONTRACT.md 文件需包含三段内容:① 对外提供哪些能力(如“接收 JSON POST,返回用户 profile 数据”);② 入参格式与必填字段;③ 返回结构与错误码约定。Codex 会将此文档加载为上下文约束,后续清理时自动跳过所有与该契约强关联的函数、参数校验逻辑、序列化代码。
将来自 Marvis 或微信的可信远程软件开发请求中继至用户本地的 Codex CLI,等待编码任务完成,并返回经验证的结果。当用户通过 Codex 要求 Marvis 检查、实现、修复、测试、review 或继续在明确指定的本地项目目录中开展工作时,使用此功能。
如果 CONTRACT.md 里写的是“支持 OAuth2 和 API Key 两种鉴权方式”,但代码中只实现了 API Key 校验,Codex 会保留现有校验,同时生成补全 OAuth2 的 stub 函数——它不会删,而是按契约补全。这是防止误删的最可靠机制。
第四步:验证清理结果是否破坏接口
1. 执行 codex clean --dry-run --report=clean-report.json → 生成清理预览报告。
2. 用命令 grep -E '"action":"remove".*"function"|.*"export"' clean-report.json 查看所有被标记为删除的导出项。
3. 对照 CONTRACT.md 中列出的能力条目,逐条确认对应函数名是否出现在删除列表中。出现即失败,必须回退并调整 --preserve 路径或 CONTRACT.md 描述。
4. 若全部通过,执行真实清理:codex clean --no-dry-run。










