乐于分享
好东西不私藏

AI 代理写代码太啰嗦?这个工具让它每行都三思

AI 代理写代码太啰嗦?这个工具让它每行都三思

AI 代理写代码太啰嗦?这个工具让它每行都三思

深度拆解 GitHub 优质开源项目

用 AI 编程代理(Claude Code、Cursor、Copilot 等)写过代码的人大概都领教过一种情况:让它加一个日期选择功能,它给你返回了一个 400 行的 DatePicker 组件,带 npm 依赖、自定义主题、国际化支持——你要的只是一个能用的日期输入框。

DietrichGebert/ponytail 就是针对这个问题做的。

它在 GitHub 上 79.5k Star,MIT 许可证,最新版本 v4.8.4。核心思路就一条:让 AI 代理像公司里最懒的高级开发者一样思考——"最好的代码是你从未写过的代码"。

项目名字的来源:一个留马尾辫、戴椭圆眼镜、在公司待得比版本控制系统还久的老开发者,你看他写五十行代码解决一个问题,他一言不发替换成一行。

"懒人梯子":写代码前的七层决策

Ponytail 的核心机制是一套 7 层决策梯子。代理在写任何代码之前,从第一层开始逐级攀登,在第一层满足条件的地方停下。

第 1 层:这东西到底需不需要存在?遵循 YAGNI 原则——你没那么需要它。投机性需求直接跳过,一句话说明原因。

第 2 层:代码库里是不是已经有了?先读代码再想怎么写。把隔壁文件里已有的 helper 重新实现一遍,是最常见的废代码。

第 3 层:标准库能不能做?语言自带的功能先用上。很多时候 3 行标准库调用就能替代一个 200 行的自定义实现和一个新依赖。

第 4 层:平台原生功能覆盖了吗?`` 比日期选择库少一个依赖、少 5kB、少一个 CVE。CSS 能做的别上 JS,数据库约束能做的别在应用层写校验。

第 5 层:已经安装的依赖能解决吗?用已有依赖。绝不为了几行代码能搞定的事添加新依赖。

第 6 层:能一行搞定吗?就一行。一个 `@lru_cache` 装饰器比手写 TTL 缓存类少了 40 行代码和一个 bug 温床。

第 7 层:才走到这——写最少能工作的代码。

梯子上有一个关键前置条件:先在理解问题之后运行,永远不代替理解。你先读完任务和涉及的代码、端到端追踪真实的执行流程,然后才去爬梯子。跳过理解直接写最小 diff——那不是懒,是第二个 bug。

Ponytail 的规则也明确划了"绝对不能省"的领域:信任边界的输入验证、防止数据丢失的错误处理、安全性、可访问性。这些不管在哪一层停下都不能削减。规则原文写的是:"懒于方案,不懒于阅读。"

基准测试能说明问题

项目在 headless Claude Code 环境下对真实开源项目 `tiangolo/full-stack-fastapi-template` 跑了 12 个功能任务,n=4,跟控制组做了对比。

开启 Ponytail 后:代码行数减少 54%,token 消耗降 22%,成本降 20%,完成时间缩短 27%。控制组代码行数少 20%,但 token 消耗反而多了 7%。

四个指标全部下降,同时安全性保持 100%——对比组里有一个方案在削减 tokencount 时把验证逻辑也砍了,安全性掉到 95%。

项目中也给了一些极端案例:一个日期选择器从 404 行减到 23 行,一个颜色选择器从 287 行减到 23 行,最高减少比例 94%。

不是给 AI 写代码,是给 AI 装规则

Ponytail 本身不是代码,而是一套代理指令(agent instructions)和规则文件。它通过插件、配置或规则文件复制的方式注入到 AI 代理的上下文中,影响代理后续所有编码决策。

支持 20 多种 AI 编程工具。Claude Code 里直接 `/plugin marketplace add DietrichGebert/ponytail` 装插件;Codex、Copilot CLI、Devin 各有自己的插件安装命令。Cursor、Windsurf、Cline 这些工具只需复制对应的规则文件到项目目录即可,不依赖插件系统。

提供四个强度级别:lite(正常生成,只给一行替代建议)、full(默认,阶梯强制执行)、ultra(YAGNI 极端主义者,删除优先于添加,交付一行方案同时挑战其余需求)、off(关闭)。还附带审查命令 `/ponytail-review` 检查当前 diff 的过度工程,以及 `/ponytail-audit` 审计整个仓库。

标记"刻意简化"

Ponytail 允许用 `ponytail:` 注释标记有意识的简化选择。比如一个全局锁注释写 `# ponytail: 全局锁, 当并发写入>100/s 时升级为读写锁`。规则鼓励标记已知上限和升级路径,不是遮遮掩掩地假装不存在。

这也对应了 Ponytail 的一个态度:没写的代码扩展性无限——零 bug、零 CVE、100% 正常运行时间。等你真的遇到了那个上限,再回来改。

适合谁用

适合大量依赖 AI 编程代理的项目和团队。如果 AI 天天给你产出过度抽象的代码、引入不必要的依赖、写一堆"以后可能用到"的样板,Ponytail 可以直接从源头上掐断这种行为。

不适合对代码有严格风格或架构要求、需要通过完整抽象和显式类型来约束工程质量的场景。Ponytail 选择的是"足够正确且足够少"这条路线,不追求完备性。

项目地址:https://github.com/DietrichGebert/ponytail

关注编码者视角

持续拆解 GitHub 最热开源项目

开源项目深度解读