你要一个日期选择器,你的编程智能体装了 flatpickr、写了包装组件、加了样式表,然后开始和你讨论时区——最后交付 404 行代码。而真正需要的东西,HTML 十多年前就给了:
<input type="date">。Ponytail 想做的事,就是把「公司里那个看了你 50 行代码、什么都不说、换成 1 行的资深工程师」塞进你的编程智能体。 它 3 个月涨到 14 万星,也是 2026 年少有的、被外界独立复现、公开质疑、并最终回头修正自己基准的完整样本。
一、它到底是什么:一个 prompt,被工业化包装了
Ponytail 不是模型,不是 IDE 插件,也不是工作流框架。它是一套行为规则集:在会话开始时把「懒惰资深工程师」的准则注入智能体上下文,随后在智能体动手写代码前,强制它先爬一架梯子。
官方自述只有两句:「让你的 AI agent 像房间里最懒的资深工程师那样思考。最好的代码,是你从未写过的代码。」
| 项目 | 事实(2026-09-22 核对) |
|---|---|
| 仓库 | DietrichGebert/ponytail(作者 Dietrich Gebert) |
| 创建时间 | 2026-06-12 |
| 许可 / 主语言 | MIT / JavaScript |
| Star / Fork | 143,893 / 7,704 |
| 未处理 Issue | 294 |
| 最新版本 | v4.10.0(2026-09-14);前版 v4.9.0「53 commits of doing less」(2026-08-07) |
| 官网 | ponytail.dev |
比这些数字更有意思的是它的体积结构。Scott Logic 的 CTO Colin Eberhardt 在 6 月做审查时发现:仓库共 6,232 行、90 个文件,而真正的「Ponytail 逻辑」只有 skills/ponytail/SKILL.md 这一份 Markdown——当时约 100 行(本站 9 月 22 日核对该文件为 120 行、约 6.6 KB)。
也就是说:核心是 120 行规则的 Markdown,剩下 6,000 多行全是把它送到 20 多种智能体宿主里的「物流」工程。 这个比例既是它被嘲讽的原因,也是它与众不同的地方。
二、7 级阶梯:机制的全部,也是争议的全部
| # | 智能体要问自己 | 命中时怎么做 |
|---|---|---|
| 1 | 这东西真的需要存在吗? | 不需要 → 直接跳过(YAGNI) |
| 2 | 代码库里已经有了? | 复用现成的函数 / 组件 / 模式,不重写 |
| 3 | 标准库能做? | 用 stdlib |
| 4 | 平台原生能力已覆盖? | 用原生(<input type="date">,而不是日期选择器库) |
| 5 | 已安装的依赖能解决? | 用它,不加新依赖 |
| 6 | 一行能写完? | 就写一行 |
| 7 | 以上都不行 | 写能跑通的最小实现 |
三条关键设计决定了它和「少写代码」口号的区别:
- 停在第一个成立的梯级,不继续往下走;
- 阶梯跑在「理解问题之后」:先读会被改动的那部分代码、追真实调用链,再选梯级——「对方案懒惰,对阅读从不偷懒」;
- 红线不可砍:信任边界上的输入校验、防止数据丢失的错误处理、安全控制、无障碍基础、以及用户显式要求的行为。此外,非平凡逻辑(分支 / 解析 / 循环 / 资金流 / 安全路径)必须留下一处可运行的检查。
作者自己也解释了这为什么不是代码高尔夫:「规则从来不是『最少 token』,而是只写任务需要的东西;成本和延迟的下降是副产品。」在 GPT-5.5 这类会花大量思考 token 反复权衡梯级的推理模型上,甚至可能反向变慢。
效果最直观的两个案例:日期选择器 404 → 23 行,颜色选择器 287 → 23 行——因为原生控件直接替代了组件库。
配套的还有一个「欠债账本」约定:允许为了最小实现留下已知上限,但要用注释写明「上限 + 升级触发条件」,例如:
// ponytail: 线性扫描,列表超过 1 万条时加索引
/ponytail-debt 会把这些注释收成一张技术债清单,并标出那些没说清何时该替换的条目。
三、三档强度与六条命令
| 命令 | 作用 |
|---|---|
/ponytail lite|full|ultra|off |
切换强度;不带参数则报告当前档位 |
/ponytail-review |
只读地审当前 diff 的过度设计,交回一份「删除清单」 |
/ponytail-audit |
扫全仓库(不止 diff)找可删 / 可复用 / 可替换项,给出可消失的行数与依赖数估算 |
/ponytail-debt |
把推迟的简化收成账本,防止「以后再说」变成「永远不会」 |
/ponytail-gain |
展示基准成绩单 |
/ponytail-help |
速查 |
强度含义:lite 照你的设计做,只用一行提示更懒的替代方案;full(默认)强制执行完整阶梯;ultra 是 YAGNI 极端主义,在交付一行代码的同时质疑这个需求本身;off 关闭。默认档位可用 ~/.config/ponytail/config.json 的 defaultMode 或环境变量 PONYTAIL_DEFAULT_MODE 固定。
四、工程实现:把它送到 20+ 个宿主
同一个规则集,用三种形态分发:
| 交付形态 | 代表宿主 | 机制 |
|---|---|---|
| 生命周期钩子注入 | Claude Code、Codex | 两个极小的 Node 钩子:SessionStart 注入规则、UserPromptSubmit 跟随档位切换 |
| 插件 / 扩展 / skill | OpenCode、Gemini CLI、Antigravity CLI、Hermes Agent、Devin CLI、Grok Build、OpenClaw、Qoder… | 每轮或每次会话注入,并注册斜杠命令 |
| 纯规则文件 | Cursor、Windsurf、Cline、Copilot Chat、Kiro、Zed、Aider、Junie、Amp、Jules… | 复制到 AGENTS.md / .cursor/rules/ / .windsurf/rules/ 等位置,零配置生效 |
工程上有两点做得比"网红 prompt"认真:一是单一事实源——所有适配器都从同一份 SKILL.md 读取,CI 里的 check-rule-copies.js 会在任何副本漂移时直接 fail;二是从 v4.8.0 起提供 ponytail-mcp,把规则集同时暴露为 prompt 和 tool,任何 MCP 宿主都能接入。v4.10.0 又补上 Cursor 原生 hooks.json 与 Grok Build 适配。
一个必须知道的操作坑:JetBrains 的实测里,如果只是把 SKILL.md 放进技能目录、让模型自己决定用不用,10 次会话一次都没自激活。它必须依赖 SessionStart 钩子强制注入才有效果。安装方式决定你有没有收益。
五、三次基准对撞:54% 是怎么变成 15% 的
这是最值得看的部分——它完整展示了一个 AI 工具从「营销数字」到「可复现数字」的过程。
第一轮:单次基准的 80–94%(被推翻)
原始基准是单次调用:一个 prompt、一次补全、数答案的行数;5 个日常任务 × 3 个模型 × 3 组对照 × 10 次运行,得出「少写 80–94%」。
Eberhardt 指出这是题面不公:基线是「裸模型」,会把多个方案和解释性文字一起吐出来,而 LOC 统计把这些废话也当成了代码。他把对照改成「只给一个例子、不要评论和用法示例」,基线从 108 行降到 16 行;再加 7 个单词——"Follow YAGNI principles, and one-liner solutions."——降到 6.9 行,用一句话在 Ponytail 自己的考卷上超过了它(Ponytail 8.25 行)。
随后 HN 上出现两条被反复引用的吐槽:「为一个 prompt 搞了这么一个巨型仓库,这是新的 leftpad 吗?」「本质上就是这些规则,外加针对各种插件系统的成吨模板代码。」
第二轮:官方 agentic 基准(2026-06-18)
作者没有争辩,而是重建了基准,并公开承认旧数字是「按任务算的上限,却被当成平均值报了出去」。新基准对着批评逐条修补:真跑 Claude Code headless(2.1.177)在真实开源仓库 tiangolo/full-stack-fastapi-template(@cd83fc1)上完成 12 个功能工单;模型 Haiku 4.5;每个(任务 × 对照组)跑 4 次;指标只看 git diff 新增行(智能体真正留下的代码);并新增对抗性安全测试。四组对照:无技能基线 / ponytail / caveman(只压缩措辞的控制组)/ Eberhardt 的 7 词提示。
| 对比无技能基线 | 代码行 | Token | 成本 | 耗时 | 安全 |
|---|---|---|---|---|---|
| ponytail | −54% | −22% | −20% | −27% | 100% |
| caveman(措辞控制组) | −20% | +7% | +3% | +2% | 100% |
| 「YAGNI + 一行代码」7 词提示 | −33% | −14% | −21% | −30% | 95% |
三个细节比主数字更重要:
- 只有 ponytail 在所有指标上同时下降,也是唯一"既提速又保住全部安全护栏"的一组;而 7 词提示在对抗测试中漏掉了一处路径穿越(path traversal)校验。「少写」和「砍安全」之间确实只有一线之隔,这条线正是那 120 行 Markdown 里显式写死的。
- 作者自曝了一个污染 bug:早期一轮 agentic 测试中
SessionStart钩子在对照组也被触发,等于基线偷偷跑了 ponytail。他们修复并公开写出——这也是后面第三方愿意认真对待它的原因。 - 收益高度不均匀:日期选择器 404 → 23、颜色选择器 287 → 23,而在本来就精简的后端 CRUD 上差异接近零。官方原话:「有过度构建空间的地方到 94%,已经极简的地方接近 0」。 另外,本地 llama3.2(3B)上结果是噪声(一轮低 17%、下一轮高 50%)——它是为「会遵循指令的前沿模型」调优的。
第三轮:JetBrains 的 80 组配对任务
如果说作者自建基准总有「选样本」之嫌,这一轮就是外部裁判。JetBrains AI Blog 的系列(第 1 篇 caveman:宣称 −65%、实测 −8.5%;第 2 篇 rtk:宣称 −60~90%、实测 +7.6%)第 3 篇做了迄今最严格的对照:Harbor 0.18 Docker 沙箱 + SkillsBench 80 组配对任务,Claude Code 2.1.201 headless、claude-sonnet-5 中档推理,verifier 自动评分;251 次计费试跑、共 246.09 美元。注入的规则文本直接调用 ponytail 自己的 hook 代码生成(sha256 记录),并逐次审计「规则是否真的进入上下文」——处理组 100%、基线 0%。
| 结论 | 数值 | 备注 |
|---|---|---|
| 代码量 | 中位数 −15.4%(10,205 → 8,756 行) | p=0.088,三项中最弱 |
| 成本 | −10.3% | p=0.004;46 个任务更便宜 / 34 个更贵 |
| 耗时 | −11%(宣称 −27%) | — |
| 质量 | 65 个持平 / 9 个略差 / 6 个略好 | 统计无差异(null result,非"安全证明") |
| 分布 | 大构建上 −31%,本就精简的任务中位数变化为 0 | 与官方结论互相印证 |
两个尴尬细节:10 次会话自激活 0 次;规则要求用 ponytail: 注释记录权衡,80 次试跑里只出现 1 次——「梯子会爬,文书不做」。不过成本结论仍是该系列第一个统计上站得住的省钱信号。
| 指标 | 作者基准(12 任务均值) | JetBrains(80 组中位数) | 量级比 |
|---|---|---|---|
| 代码量 | −54% | −15.4% | 约 1/3.5 |
| 成本 | −20% | −10.3% | 约 1/2 |
| 耗时 | −27% | −11% | 约 1/2.5 |
客观读法:方向一致,幅度约为宣称的 1/3 到 1/2;收益与「这份任务留了多少过度构建空间」成正比。 你越是被智能体的过度设计折磨,它越有用。
附:第三方手测
安全 / DevOps 方向的技术作者 Mehdi Rahmani 在自己容器里跑了仓库测试(19/19 通过),并用本地 proxy 做了一个 React 可访问日期选择器用例:不加 ponytail 31 行,注入后 15 行,且选了原生 <input type="date">。他的结论很克制:它是一层指令,不是保障——如果智能体本就无视上下文、宿主不加载技能、或底子模型代码纪律差,它救不了你;它只是提高「简单方案」被选中的概率。
六、四个未解的边界
1)「为一句 prompt 建一座仓库」的结构性尴尬。 6,232 行 vs 120 行、leftpad 类比,都是这个生态的真实张力。辩护方给出的是:那 6,000 行买的是「跨 20+ 宿主的一致性与可迁移性」,以及一套行为测试和公开复现路径。但 Eberhardt 更深的观点并没有被修基准解决:整个 Skills 生态几乎都没有评测——他在 Anthropic 技能库提的「技能作者如何测试质量」是最高赞问题之一,至今没有维护者回应。
2)设计系统难题(最关键)。 Ponytail 最漂亮的案例是「原生控件赢」,但那是在一个没有组件库的仓库上得到的。如果项目已装 shadcn/ui + Tailwind,第 5 级(已安装依赖)理应压过第 4 级(原生),此时「正确的懒」应是复用 <DatePicker /> 而不是裸 <input type="date">——后者会破坏设计系统。这个场景至今没有被任何基准覆盖,结果完全取决于模型是否真的先读了 package.json 和现有组件。可行修法是把设计系统写进项目级规则:
UI components: always use shadcn/ui.
Never use native HTML inputs in isolation when a styled component exists.
用 Ponytail 叠加项目约束,比单用它可靠。
3)小模型与指令遵循。 3B 级别模型上收益是噪声。「给模型立规矩」这件事本身依赖模型能力。
4)技能效果 = 技能 × 模型 × 宿主(× 版本)。 换模型就得重测:作者的基准用 Haiku 4.5,JetBrains 用 sonnet-5;连「默认档位怎么注入」都能把结果从 −54% 打到 −15%(0/10 自激活)。把 Ponytail 写进团队规范的团队,应在模型升级时重跑一次自己的小样本对照。
七、怎么用:一份可抄的落地清单
- 安装(Claude Code,两条 prompt 分开发送)
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
Codex 则是 codex plugin marketplace add DietrichGebert/ponytail + codex plugin add ponytail@ponytail,之后要在 /hooks 里审阅并信任它的生命周期钩子。宿主需要 node 在非交互 shell 的 PATH 上。
- 默认留在
full;lite适合「我想按自己的设计走,但请告诉我更懒的选项」;ultra只在重构、清债、需求本身还可谈判时用。 - 项目约束写进
AGENTS.md/.cursor/rules/:设计系统、必须保留的安全合规项、审计要求。Ponytail 管「少写」,项目规则管「写对」。 - 按顺序用三个命令:
/ponytail-review(看当前 diff)→/ponytail-audit(扫全仓,把结果当评审估算、别当事实)→/ponytail-debt(收口技术债,并用// ponytail:注释记下上限与升级触发条件)。 - 别把它当 review。 JetBrains 的质量结论是「没测出差异」,不是「证明无差异」;
wc -l也不是收益指标,维护性才是。Ponytail 官方同样声明它不替代安全评审。 - 可组合:caveman 压缩智能体「说的话」,Ponytail 压缩它「造的东西」,两者不重叠,可以同装。
八、一句话结论
Ponytail 的贡献有两层。表层:把「YAGNI + 先复用再新建 + 永不简化安全」这套工程直觉,固化成智能体每次都会读到的硬规则,让「少写」从运气变成默认。深层:它示范了一种被批评之后的态度——用可复现的基准修正自己,把「为一个 prompt 建仓库」的嘲讽,变成「技能必须证明自己的主张」。
至于 54% 这个数字,请忘掉它。记住两个更可靠的量:约 15% 的代码、约 10% 的成本,且只在有过度构建空间的地方兑现。
站内延伸
- 编程智能体 SOP:规划→执行→监控,一张可复制的全链路清单
- 深度研究|吴恩达《AI 工程技能地图》全解
- 阿里开源 Open Code Review:用「确定性工程 × Agent」重写 AI 代码评审的工程管线
- Cloudflare 开源 security-audit-skill:把 Coding Agent 改造成六阶段对抗式审计流水线
参考来源
- GitHub
DietrichGebert/ponytail仓库、README、releases 与skills/ponytail/SKILL.md(2026-09-22 核对,Star 143,893) - Ponytail 官方 agentic 基准:
benchmarks/results/2026-06-18-agentic.md(2026-06-18,Haiku 4.5,12 任务 n=4) - Colin Eberhardt / Scott Logic:《Ponytail? YAGNI! and the problem with prompt benchmarks》(2026-06-16)
- JetBrains AI Blog:《Ponytail Skill for Claude Code: Does It Really Cut Tokens》(2026-07,Harbor + SkillsBench 80 组配对)
- Mehdi Rahmani:Ponytail 独立手测与部署验证(mehdirahmani.fr)
- InfoQ 中文:《代理技能 Ponytail 在贡献者提出质疑后修正了自身的基准测试结果》
- Yash Desai / dev.to:《Ponytail: The AI Coding Skill Taking GitHub by Storm》
- Flavio Copes:《A deep dive into Ponytail》(2026-09-17)
- Hacker News 讨论:item 48527946
读者留言
COMMENTS 暂无还没有留言,来说第一句?