Claude Code 和 Codex 的代码越写越脏,我加了一层 Fallow 做代码清理

1 阅读2分钟

大家好,我是印刻君。最近我一直在用 AI 写代码。

我一般会让第二个 Agent 做 Review,比如 Claude Code 写、Codex 查,但时间长了,项目还是越来越脏。

AI 很喜欢 export 一堆没人用的东西,package.json 里也会慢慢积累无用依赖。这类问题,ESLint 很难发现。

后来我发现了一个工具:Fallow。github.com/fallow-rs/f…

它是 Rust 写的静态代码分析工具,专门查 TypeScript / JavaScript 里的死代码、重复代码和依赖问题。

Fallow 的安装与常用命令

安装:

npm install --save-dev fallow

常用命令:

# 全量分析
npx fallow

# 只检测死代码
npx fallow dead-code

# 检测重复代码
npx fallow dupes

# 变更风险
npx fallow audit

# 预览清理
npx fallow fix --dry-run

我自己的尝试

我拿自己的项目 You Pencil(youpencil.com)进行了尝试。

虽然我平时有意识地做了代码清理,还是扫出不少问题。

image.png

控制台输出太长,不太方便看。

我后来直接导成 Markdown,让 AI 自己读:

npx fallow --format markdown > .fallow-report.md

image.png

然后告诉 Claude Code:

读一下 .fallow-report.md,把 Unused exports、Unused type exports、Unused dependencies 按优先级处理掉。

把 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

整个流程大概是:

  1. Claude 执行 git commit
  2. hook 拦截,自动运行 fallow audit
  3. 如果检查失败,脚本 exit 2,并把结果输出到 stderr
  4. Claude 收到错误信息
  5. 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

这样无论是谁提交代码,都会先跑一遍检查。

目前就这么用着

我走完这套流程之后,项目确实干净了不少。

以上就是我的使用过程,分享给有同样需求的人。