让你的 AI 编程助手「偷懒」:50k Star 的 Ponytail,让 Agent 少写一半代码

33 阅读9分钟

最好的代码,是你压根没写的那行代码。

一、先看一个扎心的场景

你让 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。

仓库地址:github.com/DietrichGeb…


二、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_MODElite/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%

几个值得注意的结论:

  1. ponytail 是唯一一个在所有指标上都下降、同时还保持 100% 安全的方案。 那个朴素的「YAGNI + 写一行流」提示虽然也省,但把安全性掉到了 95%(砍掉了一道防护)。
  2. 降幅最大的地方,正是有「过度构建陷阱」的任务:日期选择器从 404 行降到 23 行,颜色选择器从 287 行降到 23 行——因为它伸手去拿原生 <input>,而不是去造一个组件。
  3. 在本身就已经很精简的代码上,降幅接近于零——它不会为了刷数字而硬删。

作者也很坦诚:早期那个「单次生成」的 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 编程助手都干过哪些「过度工程化」的离谱事?