上周要加个日期选择器,我的 prompt 就一句:"加个日期输入框"。 Claude Code 一顿操作:装了 flatpickr,写了个 wrapper 组件,附带一份样式文件,最后还贴心地问我要不要支持时区切换。我盯着那四十多行代码愣了一会儿------我想要的明明就是 <input type="date">,浏览器原生就支持。 这毛病后来我见得越来越多。让它加个颜色选择器,一百多行;让它加个缓存层,上来就写个 CacheManager 类。AI Agent 天然带着一种"向上取整"的冲动:能写类就不写函数,能抽接口就不写实现,能加依赖就不查标准库。 偶尔刷到了 Ponytail,GitHub 上 12 万星,就装了试试。
不是工具,是个"人格注入"
Ponytail 的 README 开头写了个人设:长马尾,椭圆框眼镜,在公司待得比版本控制系统还久的资深工程师。你给他看五十行代码,他什么都不说,换成一行。 我看到这儿第一反应是"又一个噱头"。但它跟我之前试过的那些 prompt 技巧不一样------不是简单跟 Agent 说"尽量简短",而是设计了一套决策流程,让 Agent 在动手前先判断"这活到底要不要干"。
markdown
1. 这个功能真的需要存在吗?→ 不需要就跳过(YAGNI)
2. 代码库里已经有了吗?→ 复用,别重写
3. 标准库能搞定吗?→ 用标准库
4. 平台原生支持吗?→ 用原生
5. 已安装的依赖能解决吗?→ 用它,别加新的
6. 一行代码能搞定吗?→ 一行
7. 以上都不行:→ 写最小的、能跑的代码
这个阶梯是在 Agent 理解问题之后、写代码之前跑的。而且有个关键:安全相关的代码(校验、错误处理、无障碍)永远不在"可简化"范围内。我之前试过直接给 prompt 加"写短点",代码确实短了,但边界检查也没了。
装上去的效果
安装两条命令:
bash
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
装完多了几个斜杠命令。/ponytail lite|full|ultra|off 控制强度,/ponytail-review 审查当前 diff 的过度工程。 默认 full 模式,我直接切到 ultra,然后给它同样的需求:加个颜色选择器。 没装 Ponytail 的时候,它装 pickr 包、写 React 组件、处理 onChange 回调、加预览色块,一百多行。 装了之后,它停了大概三秒,然后:
scss
// ponytail: native input covers this
<input type="color" value={color} onChange={e => setColor(e.target.value)} />
二十三行变一行。它甚至加了个 ponytail: 注释说明为什么这么写。 不过 ultra 模式确实激进。有次我让它重构一个表单模块,它直接砍了三分之一的代码。结果跑测试挂了------它把一段自定义校验逻辑也当"过度工程"跳过了,用的浏览器原生 required 属性。但那块业务要求的是异步校验用户名是否重复,原生根本干不了。
后来又发现几个坑。写原型或者 demo 的时候,ultra 模式会一直质疑需求------"这个功能真的需要吗""你确定不做成配置化的吗"。探索阶段本来就需要快速出东西,让它这么一搞反而慢。 还有个问题:Ponytail 依赖 Agent 能理解阶梯逻辑。我试过一次用 Haiku,判断就明显粗糙,有时候该跳的没跳,有时候跳过的是不该跳的。Sonnet 和 Opus 上表现稳定。
翻了翻它的测试数据
后来我翻了翻它项目页面上的基准测试,在 FastAPI + React 的真实仓库上跑的,12 个功能任务,装前装后对比:
| 指标 | 变化 |
|---|---|
| 代码行数 | -54% |
| Token 消耗 | -22% |
| 成本 | -20% |
| 耗时 | -27% |
| 安全性 | 100% 保留 |
有个细节挺有意思:在极端场景(日期选择器、颜色选择器这种 Agent 容易过度设计的)能砍到 94%,但本身就是最小实现的代码上几乎不动。这说明阶梯逻辑确实在做判断,不是无脑删。 还有个设计我觉得挺聪明------当它跳过某个实现时,会在代码里留个 // ponytail: xxx 注释。后来我跑了 /ponytail-review,它把这些标记汇总成一份"延迟清单",可以定期看看哪些被跳过的地方确实不需要。
一周用下来的感受
我的使用场景主要是个中等规模的 React 项目,大概三万多行代码。说说体感。
好的地方:Agent 不再动不动就装新包了。以前让它加个功能,经常顺手带个新依赖;现在它会先看看代码库里有没有现成的,或者标准库能不能搞定。光这一点,我的 node_modules 就清净了不少。 成本也确实在降。我之前用 Opus,一天下来账单经常十几块;现在同样工作量大概八九块。模型还是那个模型,只是它生成的代码少了,token 自然就省了。
跨 Agent 倒是方便。规则文件在 AGENTS.md 里,Cursor、Windsurf、Cline 都能用,把对应的 rules 文件拷到项目里就行。我们团队有几个人用 Cursor,我把 .cursor/rules/ponytail.md 丢到项目根目录,他们打开就生效了。 用了一周,最大的变化不是代码量变少,是我自己写代码时也开始下意识问"这个真的需要吗"。这习惯是 Ponytail 传染给我的,虽然它有时候确实烦人。 想试试的话,GitHub 上搜 Ponytail 就行:github.com/DietrichGeb...