Claude Code 和 Codex 的代码越写越脏,我加了一层 Fallow 做代码清理
最近在跟AI协作写代码的过程中,遇到了一个挺普遍的烦恼——项目代码越写越“脏”。
通常的做法是让第二个Agent做Review,比如Claude Code写完之后,让Codex去检查。但时间一长,项目里还是积累了大量没人用的export、没必要的依赖,package.json也越来越臃肿。关键是,这些问题ESLint根本发现不了。
后来发现了一个叫Fallow的工具,GitHub地址是github.com/fallow-rs/f…。它是用Rust写的静态代码分析工具,专门用来揪TypeScript和Ja vaScript项目里的死代码、重复代码,以及依赖管理问题。
Fallow 的安装与常用命令
安装很简单:
npm install --sa ve-dev fallow
常用命令涵盖了几个高频场景:
# 全量分析
npx fallow
# 只检测死代码
npx fallow dead-code
# 检测重复代码
npx fallow dupes
# 变更风险
npx fallow audit
# 预览清理结果(不实际修改)
npx fallow fix --dry-run
实际项目测试
拿自己的项目You Pencil做了测试。虽然平时已经有意识地做代码清理,但扫完之后还是发现了不少隐藏问题。控制台输出内容太长,不太方便阅读。后来干脆把输出结果导出成Markdown格式,让AI自己去读:
npx fallow --format markdown > .fallow-report.md
然后告诉Claude Code去处理那些报告内容。
把 Fallow 集成到 Claude Code / Codex 工作流
手动执行还是有点繁琐,索性就把这步直接嵌入到工作流里。
Fallow内置了一个agent hook安装器,可以自动生成配置文件:
npx fallow hooks install --target agent --agent claude
执行后会在 .claude/ 下生成两个文件:
.claude/settings.json
.claude/hooks/fallow-gate.sh
其中 settings.json 配置了一个Claude Code的PreToolUse hook。也就是说,每次Claude准备执行Bash命令时,都会先经过 fallow-gate.sh 这道关卡。
整体流程大致是这样的:
- Claude 执行
git commit - hook 拦截,自动运行
fallow audit - 如果检查失败,脚本 exit 2,并把结果输出到 stderr
- Claude 收到错误信息,自己尝试修复
- 修复完成后,重新 commit
最后形成了一个自动循环:commit 被拦住 → 读错误信息 → 自动修复 → 再次尝试 commit。
Codex的配置方式类似:
# Codex:自动在 AGENTS.md 中追加 managed block
npx fallow hooks install --target agent --agent codex
人工改代码,也最好加一道拦截
上面那套主要防AI,但很多脏东西其实也是人手改出来的。所以后来又在Git层加了一层hook:
npx fallow hooks install --target git
这样无论谁提交代码,都得先过一遍检查。
目前的用法
走完这套流程之后,项目确实干净了不少。