你身边那个最懒的资深开发
每个公司都有这样一个人:长马尾、椭圆眼镜、在公司待的时间比版本控制还久。你给他看五十行代码,他看一眼,不说什么,删成一行,然后它能跑。
Ponytail 把这个人塞进了你的 AI coding agent。
GitHub 仓库 DietrichGebert/ponytail,2026 年 6 月 12 日创建,到今天(8 月 8 日)星 98,315、fork 5,401,MIT 协议,JavaScript,npm 包名 @dietrichgebert/ponytail,昨天还有 push。它的定位一句话:让 AI agent 像屋里最懒的资深开发那样思考——最好的代码,是你从未写过的代码。最硬的数字是仓库 README 自报的 benchmark:真实 Claude Code 会话编辑真实仓库,平均少写 54% 代码(最高 94%)、便宜 20%、快 27%,安全护栏一个不掉。
star 数截至 2026-08-08,实时变动;benchmark 数据来自仓库 README,来源标注见文末。
它是什么
Ponytail 不是模型、不是框架,是一个装进 AI coding agent 的 skill——一套规则集,在 agent 每次写代码前插一道"能不写就不写"的判断。形态上是 plugin/extension,装一次,每个会话自动生效。支持 20 个 agent 宿主:Claude Code、Codex、GitHub Copilot CLI、Gemini CLI、Cursor、Windsurf、Cline、Aider、Devin、OpenCode、Qoder、Grok Build 等全覆盖。
它要解决的问题很具体:AI coding agent 普遍过度产出代码(over-engineering)。你让它加个日期选择器,它装个 flatpickr、写个包装组件、加个样式表,还跟你讨论时区。Ponytail 的做法是让 agent 在写代码前先爬一道"懒人阶梯",停在第一个"够用"的那一级。
解决什么痛点
AI agent 的过度产出代码是个普遍到令人麻木的问题。拆三层:
1. 喜欢造轮子。库里已经有现成的、stdlib 能做的、平台原生支持的,agent 视而不见,从头写一遍。一个日期选择器能写成 404 行的组件树。
2. 不问该不该存在。YAGNI(You Ain't Gonna Need It)被无视,agent 把"也许将来用得上"的东西全堆进去——缓存类、抽象层、配置开关,代码膨胀但真正有用的没几行。
3. 省了字数但丢了安全。有人试过直接在 prompt 里写"写 one-liner",代码确实短了,但校验、错误处理、安全检查也被一起砍掉——短了不等于对。Ponytail 的核心主张恰恰反过来:规则从来不是"最少 token",而是只写任务需要的,校验、错误处理、安全、可访问性一律不碰。
核心功能:懒人阶梯 + 六条命令
七级懒人阶梯
agent 在写任何代码前,从上往下停在第一个成立的那一级:
1. 这东西需要存在吗? -> 不需要:跳过(YAGNI)
2. 代码库里已经有了吗? -> 复用,别重写
3. 标准库能做吗? -> 用它
4. 平台原生功能支持吗? -> 用它
5. 已装的依赖能做吗? -> 用它
6. 一行能写完吗? -> 一行
7. 都不行:才写最少能跑的关键点:阶梯在理解问题之后跑,不是代替理解。agent 会先读改动涉及的代码、追踪真实流程,再选停在哪一级——对方案懒,对读代码从不懒。trust-boundary 校验、防数据丢失、安全、可访问性永远不在砍除清单上。
Benchmark 数据
仓库 README 给了可复现的 benchmark,来源是真实 Claude Code 会话编辑 tiangolo 的 full-stack-fastapi-template(FastAPI + React 真实仓库),12 个 feature ticket,同一个 agent 装与不装 skill 对比,n=4,Haiku 4.5:
| 对照(vs 无 skill 基线) | 代码行数 | token | 成本 | 耗时 | 安全 |
|---|---|---|---|---|---|
| ponytail | -54% | -22% | -20% | -27% | 100% |
| caveman(只压缩措辞的对照) | -20% | +7% | +3% | +2% | 100% |
| "YAGNI + one-liners" 裸 prompt | -33% | -14% | -21% | -30% | 95% |
Ponytail 是唯一四个指标全降的 arm,也是唯一在降的同时安全分保持 100% 的。削减最大的是有真实过度产出代码陷阱的地方:日期选择器从 404 行降到 23 行(agent 转而用原生 <input type="date">)、颜色选择器从 287 行降到 23 行。在代码本来就已经最小的地方,削减接近零。
早期单次基准报告曾给出 80-94% 的数字;社区指出裸模型基线会用水话和选项凑数,仓库已修正为上面的 agentic 数字(80-94% 是每任务上限,不是均值)。
六条命令
| 命令 | 做什么 |
|---|---|
/ponytail [lite / full / ultra / off] | 设强度,或关掉。不带参数报当前级别 |
/ponytail-review | 审查当前 diff 有没有过度产出代码,给一张删除清单 |
/ponytail-audit | 审查整个仓库,不止 diff |
/ponytail-debt | 把你推迟的 ponytail: 快捷方式收进一本账,"稍后"不变成"永不" |
/ponytail-gain | 显示已测量的收益看板(更少代码、更省成本、更快) |
/ponytail-help | 命令速查 |
/ponytail ultra 留给代码库"私人恩怨"的场景。可用 PONYTAIL_DEFAULT_MODE 环境变量给每个新会话设默认级别(lite/full/ultra/off),默认 full。规则集也会注入到通过 Agent 工具拉起的子 agent 里。
三分钟上手
以 Claude Code 为例,两条命令(需分两次发送才能装上):
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytailCodex 略有不同:
codex plugin marketplace add DietrichGebert/ponytail
codex plugin add ponytail@ponytailGitHub Copilot CLI:
copilot plugin marketplace add DietrichGebert/ponytail
copilot plugin install ponytail@ponytailCursor / Windsurf / Cline / Aider 这类不支持 plugin 命令的宿主,把仓库里对应的规则文件复制进项目即可(.cursor/rules/、.windsurf/rules/、.clinerules/、.github/copilot-instructions.md)。node 需在 PATH 上——Nix/nvm 用户尤其注意要用非交互式 shell 的 PATH,否则 always-on 激活会静默失败(skill 本身仍可用)。卸载用 /plugin remove ponytail,再跑 node scripts/uninstall.js 清残留状态(注意先跑卸载脚本再删 plugin,脚本本身是 plugin 文件)。
适合谁 + 踩坑
适合:天天用 Claude Code / Codex / Copilot CLI 写代码、被 agent 过度产出代码折磨的人;维护历史包袱重、agent 动不动就重写一遍的大仓库的团队;想压 token 成本但不想牺牲安全的场景;做 code review、希望 agent 先审有没有过度产出代码再改的人。
踩坑:
1. 它不是"永远更省"。在已经最小化的代码上削减接近零;少数推理型模型(如 GPT-5.5)反而因为思考 token 花在权衡阶梯的每一级上而更贵——成本降低是副产物,不是保证。
2. node 必须在 PATH。两个 lifecycle hook 是 Node.js,PATH 不对 always-on 激活会静默失败。Nix/nvm 用户尤其注意。
3. 命令需要 skill-capable 宿主。/ponytail-review 这类命令只在 Claude Code、Codex、Devin、OpenCode、Gemini 等 skill-capable 宿主里可用;Cursor、Windsurf、Cline 这类 instruction-only 适配器只加载规则集,没有命令。
4. 别和裸 prompt 混为一谈。直接写"YAGNI + one-liners"的 prompt 看着效果接近,但 benchmark 里它掉了一个安全护栏(95% vs 100%)。skill 的价值在于"懒但不 negligent"。
和竞品比
caveman(JuliusBrussee/caveman):压缩的是 agent 说的措辞,代码逐字节不动。Ponytail 缩的是 agent 构建的内容。两半不重叠,README 明说可以且应该一起用——少说话,少造代码。
"YAGNI + one-liners" 裸 prompt:不装任何 skill,直接在 prompt 里写规则。benchmark 显示它确实降代码行数(-33%),但安全分掉到 95%——丢了护栏。Ponytail 的区别是保留全部安全检查的同时降四个指标。
Anthropic 官方 frontend-design skill:官方出品的设计前端 skill,走的是"指导怎么写得好看"的方向;Ponytail 走的是"该不该写"的方向,定位不同。同为 coding skill,可以共存。
想横向对比更多 coding skill 框架(impeccable、mattpocock/skills、superpowers 等),见本站旧文《AI coding skill 框架横评:ponytail、impeccable、mattpocock/skills、superpowers 怎么选》:ai-coding-skill-frameworks-comparison-review。另外如果你在找能自托管、跑任意任务的 AI agent 控制中心,见本站旧文《OpenHands 自托管 AI Agent 控制中心》:openhands-resource;做 AI 生图管线则见《ComfyUI:专业玩家为何不用网页生图(星12.3万)》:comfyui-resource。
参考来源
- Ponytail GitHub 仓库(98,315 star / 5,401 fork,MIT,JavaScript):https://github.com/DietrichGebert/ponytail
- npm 包 @dietrichgebert/ponytail:https://www.npmjs.com/package/@dietrichgebert/ponytail
- Benchmark 完整方法与逐任务数据:https://github.com/DietrichGebert/ponytail/blob/main/benchmarks/results/2026-06-18-agentic.md
- tiangolo/full-stack-fastapi-template(benchmark 测试仓库):https://github.com/fastapi/full-stack-fastapi-template
- caveman 对照项目:https://github.com/JuliusBrussee/caveman