Ratchet:让 AI 编程助手守规矩的「单向棘轮」——GitHub Trending 日榜精选

你有没有这种感觉:让 AI 帮你写代码,一开始它规规矩矩,写着写着就开始擅自加依赖、引入新库、写出过度设计的东西?你明明在 prompt 里写了「尽量用标准库」「不要加不必要的依赖」,但它好像从来不放在心上。

这就是 Ratchet 要解决的问题。它的名字来自机械中的「棘轮」——只能朝一个方向转,不能倒退。用在代码管理上就是:复杂度只许下降,不许上升

项目上线不到 3 天就拿下 400+ Star,被 Claude Code、Codex 社区热烈讨论。它不是另一个 prompt 模板,而是一个真正会检查 AI 每次编辑的钩子工具。

🔧 核心机制:不止是「建议」,是真的在检查

传统的做法是在 system prompt 里写规则,让模型「自觉遵守」。问题是模型经常忽略这些规则,等 code review 发现的时候已经晚了。

Ratchet 的做法完全不同:它通过 PostToolUse 钩子,在 AI 每次编辑文件后实时检查。新增了依赖?写了冗余的 wrapper?重复造了标准库的轮子?它会立刻把发现问题注入回对话中,让 AI 当场修正:

you    给设置页加个日期选择器

agent   [安装 flatpickr,写个 wrapper 组件,加样式表]

hook   ratchet guard  ·  +71 -0 行 (净增 +71/150)  ·  2/3 新文件  ·  1/1 新依赖

       certain
         package.json:14       dep     发现新依赖 flatpickr
                                       说明为何不用标准库,否则移除
         src/DatePicker.jsx:4  native  日期选择器组件库
                                       <input type="date">
       likely
         src/DatePicker.jsx:22 wrapper  DatePicker 仅转发调用到 Flatpickr
                                       直接调用即可,删除 wrapper

agent   [回退改动,改用 <input type="date">]

📊 三大运行模式

模式 新文件上限 新依赖上限 净增行数 超出时行为
advise 8 3 400 仅报告发现
guard(默认) 3 1 150 发现 + 预算警告
strict 1 0 60 直接阻止编辑

日常开发用 guard,重构项目切 strict,探索原型时切 advise。在对话中随时用 /ratchet strict 切换,灵活实用。

🔍 八大检测器,精准捕获「过度设计」

检测器 检测内容
dep 新增的依赖项(支持 package.json、requirements.txt、go.mod、Cargo.toml 等)
exists 名称已存在于项目中的重复符号(如 formatDuration 已存在)
stdlib 手写的「标准库已经有的功能」
native 用第三方库做的事情,平台原生 API 已经能做
wrapper 函数体仅转发到另一个函数(毫无意义的包装层)
yagni 只有一个实现的接口/抽象类(你不需要它)
validation 手写邮箱正则(永远是错的)
budget 新文件数、新依赖数、净增行数的运行统计

每个发现都按可信度分级:certain(精确解析)→ likely(结构分析)→ heuristic(模式匹配)。只有 certain 级别的发现在 strict 模式下才会阻止编辑。这个设计让误报不会影响工作流,但真正的隐患不会被漏掉。

📈 真实的数据追踪——你的代码在变好吗?

Ratchet 不像那些只会说「帮你省了多少时间」的工具。它记录的是硬数据:

ratchet report

complexity trend, last 3 sessions
─────────────────────────────────

  ▁█▆  18 to 22 lines

when        mode   added  removed  deps  flagged  repo
2026-08-01  guard     +3       -0     0        0  18 new
2026-08-01  guard     +5       -0     1        1  24 ▲ 6
2026-08-01  guard     +0       -2     0        0  22 ▼ 2

mark  14 lines, 8 lines above the mark
      reason: initial mark

净增行数、新增依赖数、被标记的问题数……这些都是实际数字,没有任何水份。.ratchet/ledger.jsonl 会记录每个 session 的数据,ratchet report 以可视化趋势展示。

🚀 安装与使用(5 分钟上手)

安装

git clone https://github.com/0xwilliamortiz/ratchet.git
cd ratchet
npm install -g .

要求 Node 20+,Git 需在 PATH 中。

初始化项目

cd your-project
ratchet

一行命令搞定:自动注册钩子、建立基线、启动仪表窗口。重启你的 AI 编程助手即可生效。

在对话中使用

命令 功能
/ratchet advise|guard|strict|off 切换运行模式
/ratchet-review 对当前 diff 做过度设计审查
/ratchet-audit 对整个仓库做全面审查
/ratchet-ledger 查看趋势、标记和延迟的快捷方式
/ratchet-accept 提高复杂度基准(需附理由)

终端命令

命令 功能
ratchet doctor 用真实 payload 测试所有钩子是否正常
ratchet report 从 ledger 中展示趋势数据
ratchet audit 扫描整个仓库,列出可优化的地方
ratchet log 查看钩子在真实 session 中的输出
ratchet baseline 接受当前代码为基线,此后只标记新增问题
ratchet uninstall 移除钩子和会话状态

🎯 适用场景

  • AI 辅助开发的团队:防止 AI 在长 session 中逐渐引入不必要的复杂度
  • 个人开发者:在用 Claude Code / Codex 等 AI 工具编程时,自动保持代码简洁
  • 代码审查辅助:在 CI 中集成 ratchet audit,自动发现过度设计
  • 重构项目:切换到 strict 模式,强制只减不增
  • 教学场景:帮助新手理解什么是「过度设计」和「YAGNI 原则」

⚡ 为什么不直接用 prompt?

Prompt 是「建议」,Ratchet 是「执行」。Prompt 依赖模型自觉遵守,Ratchet 在模型行动之后检查结果。Prompt 可能被忽略,Ratchet 把发现问题直接注入回对话。两者互补,不是替代。

Ratchet 内置了一套经过优化的 ruleset,会自动注入到你的 agent 中。它的检测器和 prose 部分是分开的:检测器做 regex 和 git grep 能做到的事,prose 部分覆盖需要判断力的场景。

🔩 技术亮点

  • 零外部依赖的检测引擎:基于 regex 和 git grep,不依赖 tree-sitter 或其他解析器,启动极快
  • 符号索引缓存:冷启动几百毫秒,热启动约 4ms,上限 3000 个文件
  • 净行数追踪:删 50 行就赚 50 行额度,鼓励真正的简化
  • 指纹识别而非行号匹配:baseline 在代码格式化或移动后仍然有效
  • 115 个测试用例:覆盖所有检测器和平台兼容性(含 Windows 路径转义等边界情况)
  • Windows GUI 仪表盘:ratchetui.exe 实时显示 session 状态,通过 PowerShell Start-Process 异步启动

💡 设计哲学

「棘轮只朝一个方向转。代码复杂度要么下降,要么保持,除非有人故意反向转动并写下理由。」

这个设计哲学体现在两个关键机制上:

  1. 基线化:ratchet baseline 接受现有代码为基线,不追究历史债务,只关注新增问题
  2. 提高基线需要声明理由:node scripts/accept-mark.js 要求写一句话说明原因,避免悄悄增加复杂度

⚠️ 注意事项

  • 检测器是 regex 和 git grep,不是类型检查器,会有误报。默认模式只报告不阻止,strict 模式才是可选的强制模式
  • 测试文件默认不扫描(tests/、spec/ 等目录),避免标记测试夹具中的故意错误模式
  • 没有 git 的仓库仍可使用 ruleset 和检测器,但基线、ledger 和 audit 功能需要 git init
  • 阻止功能依赖宿主环境支持 PostToolUse 的 decision 字段

📋 项目信息

  • 项目名称:Ratchet
  • GitHub:github.com/0xwilliamortiz/ratchet
  • 作者:0xwilliamortiz
  • Stars:408+(3 天内)
  • 许可证:MIT
  • 语言:JavaScript(Node.js)
  • 当前日榜排名:#3

🏁 总结

Ratchet 解决了一个被长期忽视的问题:AI 编程助手没有反馈回路。你告诉它「保持简洁」,但它写多写少、加不加依赖,全凭自觉。Ratchet 在每一次编辑后加上了一个自动检查步骤,让「保持简洁」从一个模糊的愿望变成了一个可测量、可执行的标准。

它不是要取代你的 prompt ruleset,而是弥补 promt 做不到的部分——实际测量代码变更。如果你在用 Claude Code、Codex 或任何支持 PostToolUse 钩子的 AI 编程工具,Ratchet 值得一试。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享