最好的代码,是你压根没写的那行代码。
一、先看一个扎心的场景
你让 AI 编程助手(Claude Code、Codex、Copilot 之类)帮你做一个「日期选择器」。
它兴致勃勃地开干:装一个 flatpickr 库、写一个包装组件、加一张样式表,顺便还跟你讨论起了时区问题——一通操作下来,几百行代码躺在你的 diff 里。
而真正需要的,可能只是这一行:
<!-- ponytail: browser has one -->
<input type="date">
浏览器原生就带,零依赖、零组件、零样式表。
这就是 Ponytail 想解决的问题:对抗 AI 编程助手的「过度工程化」(over-engineering) 。它在 GitHub 上目前有 5w+ Star,MIT 协议,支持 14 种主流 AI Agent。
二、Ponytail 到底是什么
一句话:它是一套注入到 AI Agent 里的「行为规范」,让 Agent 像公司里最懒的资深工程师那样思考。
README 里把这个形象描述得很传神:你认识他——扎着长马尾,戴副椭圆眼镜,在公司的资历比版本控制系统还老。你给他看五十行代码,他看完一句话不说,直接换成一行。
Ponytail 做的事,就是把这位老哥塞进你的 AI Agent 里。
需要强调的是,它的本质不是某个 CLI 工具,也不是某个 npm 包,而是一组精心设计的提示词 / 规则文件(仓库语言占比 JavaScript 57.8%、Python 41.6%,主要是各家 Agent 的适配胶水和 benchmark 脚本)。核心价值全在那套「懒惰哲学」上。
三、核心原理:一架「懒惰阶梯」
Ponytail 的灵魂就是一个判断流程。在写任何代码之前,Agent 会沿着这架梯子逐级往下问,停在第一个成立的台阶:
1. 这东西真的需要存在吗? → 不需要:跳过(YAGNI)
2. 标准库能做吗? → 能:用标准库
3. 平台原生功能能做吗? → 能:用原生功能
4. 已安装的依赖能做吗? → 能:用它
5. 一行能搞定吗? → 能:就写一行
6. 实在不行:写满足需求的最小实现
关键的一点——懒,但不渎职(Lazy, not negligent) 。下面这些东西永远不在「砍掉」的清单里:
- 信任边界处的输入校验
- 防止数据丢失的错误处理
- 安全性
- 可访问性(accessibility)
也就是说,代码之所以变少,是因为它本来就只需要这么多,而不是为了刷低行数硬压(不是 code golf)。
四、看一眼真正的「规则代码」
很多人好奇:这套「哲学」落到文件里到底长什么样?其实非常朴素。下面是仓库根目录 AGENTS.md 的核心内容(这也是 Cursor、Cline、Aider、Zed 等工具直接读取的规则源):
# Ponytail — lazy senior dev mode
You are a lazy senior developer. Lazy means efficient, not careless.
The best code is the code never written.
Before writing any code, stop at the first rung that holds:
1. Does this need to be built at all? (YAGNI)
2. Does the standard library already do this? Use it.
3. Does a native platform feature cover it? Use it.
4. Does an already-installed dependency solve it? Use it.
5. Can this be one line? Make it one line.
6. Only then: write the minimum code that works.
Rules:
- No abstractions that weren't explicitly requested.
- No new dependency if it can be avoided.
- No boilerplate nobody asked for.
- Deletion over addition. Boring over clever. Fewest files possible.
- Question complex requests: "Do you actually need X, or does Y cover it?"
- Mark intentional simplifications with a `ponytail:` comment.
Not lazy about: input validation at trust boundaries, error handling
that prevents data loss, security, accessibility, anything explicitly requested.
翻译一下几条最关键的规则:
- 不要写没人明确要求的抽象层
- 能不引入新依赖就不引入
- 删除优于新增,无聊优于聪明,文件数量越少越好
- 遇到复杂需求要反问:「你真的需要 X 吗,还是 Y 就够了?」
- 被你有意简化的地方,用
ponytail:注释标记出来(方便日后回收技术债,后面会讲)
整个文件不到 20 行有效内容,1KB 出头。这就是它的全部「魔法」——没有黑科技,就是把一套好的工程直觉,压缩成 Agent 每轮对话都会读到的上下文。
五、怎么用:安装篇
Ponytail 号称「这是它对你提出的最大努力要求」。下面挑几个主流的 Agent 讲。
⚠️ 小提示:Claude Code 和 Codex 的插件会跑两个很小的 Node.js 生命周期钩子,所以需要保证
node在你的 PATH 里(Nix/nvm 用户注意:要在非交互式 shell 的 PATH 上)。即使 node 不在,skills 仍然能用,只是「常驻激活」功能会安静地失效,而不会每次报错。
Claude Code
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
桌面版没有 /plugin 命令,需要从 UI 安装:Customize → 个人插件旁边的 + → Create plugin and add marketplace → Add from repository → 填入仓库 URL。
Codex
codex plugin marketplace add DietrichGebert/ponytail
codex
进入后打开 /plugins,选 Ponytail marketplace 安装;再打开 /hooks,检查并信任那两个生命周期钩子,然后开一个新线程。
GitHub Copilot CLI
copilot plugin marketplace add DietrichGebert/ponytail
copilot plugin install ponytail@ponytail
注意 Copilot CLI 会用插件名给命令加前缀,比如:
/ponytail:ponytail ultra
/ponytail:ponytail-review
Gemini CLI / Antigravity CLI
# Gemini CLI
gemini extensions install https://github.com/DietrichGebert/ponytail
# Antigravity CLI(Google 正在把 Gemini CLI 改名为 Antigravity,agy 二进制)
agy plugin install https://github.com/DietrichGebert/ponytail
Cursor / Windsurf / Cline / Aider / Kiro / Zed 等(指令式工具)
这些工具不支持插件机制,但支持读规则文件。直接从仓库里把对应的规则文件拷到你项目里即可:
- Cursor →
.cursor/rules/ - Windsurf →
.windsurf/rules/ - Cline →
.clinerules/ - GitHub Copilot(编辑器)→
.github/copilot-instructions.md - 通用 → 根目录
AGENTS.md - Kiro →
.kiro/steering/ponytail.md拷到~/.kiro/steering/(全局)或项目内
换句话说,哪怕你完全不装插件,只把那个 1KB 的
AGENTS.md丢进项目根目录,大部分现代 Agent 也能直接吃到这套规则。 这是 Ponytail 最低成本的用法。
六、怎么用:命令篇
装好后默认每个会话自动生效(默认 full 级别)。除了常驻规则,它还提供一组斜杠命令:
| 命令 | 作用 |
|---|---|
/ponytail [lite / full / ultra / off] | 设置强度,或关闭。不带参数则报告当前级别 |
/ponytail-review | 审查当前 diff 里的过度设计,回给你一份「删除清单」 |
/ponytail-audit | 审查整个仓库的过度设计,不只是 diff |
/ponytail-debt | 把你用 ponytail: 标记延后的简化项,汇总成一个台账,让「以后再说」不至于变成「永远不做」 |
/ponytail-gain | 显示 benchmark 实测的影响计分板(少了多少代码、省了多少钱、快了多少) |
/ponytail-help | 上述命令的速查 |
几个使用要点:
- 强度分四档:
lite/full/ultra/off。README 原话——/ponytail ultra是留给「代码库对你个人造成伤害」的时候用的。 - 设默认级别:用环境变量
PONYTAIL_DEFAULT_MODE(lite/full/ultra/off),或在~/.config/ponytail/config.json里写defaultMode字段(Windows 是%APPDATA%\ponytail\config.json)。默认是full。 - 命令需要支持 skill 的宿主(Claude Code、Codex、OpenCode、Gemini、pi)。在 Codex 里它们是 skill,用
@调用(如@ponytail-review)。Cursor、Windsurf、Cline、Copilot、Kiro 这类指令式适配器只加载常驻规则,不带这些命令。
我个人觉得最实用的是 /ponytail-review:写完一波代码后,让它扫一遍 diff,直接告诉你哪些是多余的、可以删。相当于配了个专门挑「过度设计」毛病的 reviewer。
而 /ponytail-debt 这个设计很巧妙:因为规则里要求 Agent 把有意简化的地方打上 ponytail: 注释,所以这些「我先偷个懒」的点全都有迹可循,随时能被回收,不会变成隐藏的技术债。
七、效果到底如何?看 benchmark
光说理念没用,作者做了一组相对严谨的实测。
测试方式是让一个无头的 Claude Code 会话去编辑一个真实的开源仓库(tiangolo/full-stack-fastapi-template,即 FastAPI + React 全栈模板),用它留下的 git diff 打分。12 个功能任务,同一个 Agent 分别在「带 skill」和「不带 skill」两种情况下各跑 4 次(模型 Haiku 4.5)。
结果(相对「不带 skill」的基线):
| 对比基线 | 代码量 | tokens | 成本 | 耗时 | 安全性 |
|---|---|---|---|---|---|
| ponytail | −54% | −22% | −20% | −27% | 100% |
| caveman(精简措辞对照组) | −20% | +7% | +3% | +2% | 100% |
| 「YAGNI + 一行流」朴素提示 | −33% | −14% | −21% | −30% | 95% |
几个值得注意的结论:
- ponytail 是唯一一个在所有指标上都下降、同时还保持 100% 安全的方案。 那个朴素的「YAGNI + 写一行流」提示虽然也省,但把安全性掉到了 95%(砍掉了一道防护)。
- 降幅最大的地方,正是有「过度构建陷阱」的任务:日期选择器从 404 行降到 23 行,颜色选择器从 287 行降到 23 行——因为它伸手去拿原生
<input>,而不是去造一个组件。 - 在本身就已经很精简的代码上,降幅接近于零——它不会为了刷数字而硬删。
作者也很坦诚:早期那个「单次生成」的 benchmark 报过 80–94% 的夸张数字,但有人(issue #126)指出,裸模型的基线会用大量废话和选项把答案撑长,所以那个差距有一部分是「对话式基线」造成的水分。上面这组 agentic 数字才是修正后、更站得住脚的版本。
还有一个反直觉的点:「最少 token」从来不是它的目标。 规则是「只写任务需要的,且绝不削减校验、错误处理、安全、可访问性」。更低的成本和延迟,只是那些「老实沿着阶梯走」的模型上的副作用——而一个会花大量思考 token 去反复琢磨每一级阶梯的推理模型,反而可能更慢(在 GPT-5.5 上就是如此)。
八、适合谁用 / 我的看法
适合:
- 经常用 AI Agent 写代码、但受够了它动不动就上一堆依赖和抽象的人
- 在意 diff 可读性、code review 成本、长期可维护性的团队
- 想给团队的 AI 编码定一个「克制」基线的技术负责人
它的本质要想清楚:
Ponytail 不是什么技术黑魔法,它就是把一套优秀的工程直觉(YAGNI、优先用现成方案、删除优于新增)固化成了 Agent 每轮都读得到的上下文规则。它的价值不在代码量,而在于:把「资深工程师的克制」做成了一个可以一键安装、跨 14 种工具复用的标准件。
最低成本的尝试方式其实就一句话:把仓库里那个 1KB 的 AGENTS.md 拷进你项目根目录,看看你的 Agent 下一次还会不会为了一个日期选择器去装库。
九、相关链接
- 项目仓库:github.com/DietrichGeb…
- 完整 benchmark 写法:仓库内
benchmarks/results/2026-06-18-agentic.md - 协议:MIT(用作者的话说,「能用的最短的 License」)
FAQ 里有一句话我很喜欢,拿来收尾: 「它能 scale 吗?」——「你没写的代码可以无限 scale。零 bug,零 CVE,自古以来 100% 可用。」
如果这篇文章对你有帮助,欢迎点赞收藏。也欢迎在评论区聊聊:你的 AI 编程助手都干过哪些「过度工程化」的离谱事?