ARTICLE · 1045615
把 AI 调教成最懒的资深工程师,这个项目让代码量少了一半
MOGE / ARTICLE
把 AI 调教成最懒的资深工程师,这个项目让代码量少了一半
你大概见过这种回答。你只是想要一个日期选择器,AI 先装了一个日历库,再写一层包装组件,顺手加了张样式表,最后还很认真地跟你讨论了时区问题。五十行代码,解决了本可以一行解决的问题。
你公司里大概也有这样一个人。头发扎成长马尾,戴椭圆镜框,工龄比版本控制系统的历史还长。你把五十行代码拿给他看,他盯了几秒,一个字没说,把它们改成一行,转身走了。
Ponytail 做的事,就是把这个人塞进你的 AI 编程助手里。
本文看点
01
痛点清单
02
这是什么
03
写代码前的七次自问
SECTION 01
痛点清单
❌ 让 AI 加个小控件,它能顺手套进一个依赖、一层包装组件和一张样式表,最后交给你四百行
❌ 标准库里明明有现成函数,它偏要手写一遍,理由是"这样更通用"
❌ 同一个仓库里已经有同款工具函数,它在隔壁目录又造了一个几乎一样的新轮子
❌ 抽象层、配置项、扩展点先安排上,说是"以后可能会用到",然后再也没用到
❌ 代码只增不减,评审看不懂,测试铺不开,维护成本全压在后面接手的人身上
❌ 你想在提示词里补一句"尽量少写代码",结果它该省的地方没省,不该省的地方倒是省了
❌ 每个 AI 编程工具各有一套规则文件,换个工具就得重新配一遍
—————— ✦ ——————
"最好的代码,是你从来没有写过的代码。"
SECTION 02
这是什么
Ponytail 是开发者 Dietrich Gebert 做的一个开源技能包,定位直白得有点冲:让你的 AI 编程助手像会议室里最懒的那个资深工程师一样思考。项目 2026 年 6 月开源,MIT 协议,主语言 JavaScript,同时以 npm 包发布,也有自己的官网。
它的核心不是一段长长的提示词,而是把"懒"拆成了一套可执行的判断顺序。AI 在动手写任何代码之前,必须从下往上依次自问七遍,停在第一个成立的那一级。用作者自己的话说:他不说话,他只写一行,然后它跑通了。
✂️ 它更像一份"先别急着写"的纪律,而不是一句"写少点"的口号。
关键的一点是,这道阶梯要在看懂问题之后才开始爬。文档反复强调,先读需求、找出这次改动会牵动的代码、把真实的调用链从头到尾捋一遍,再决定停在哪一级。没看懂就写出来的最小改动,不叫高效,那叫埋第二个 bug。
🛡️ 第二点是"懒,但不疏忽"。信任边界上的输入校验、防止数据丢失的错误处理、安全性、无障碍这几个方向,永远不在可删名单里。修 bug 也一样:报错只是症状,先找出被改函数的所有调用方,在共用的那一层一次修好,而不是只补工单里点名的那条路径。
还有一块很实用的设计:它把"暂时妥协"写进代码里。凡是故意走了捷径的地方,用 ponytail: 注释标出天花板和升级路径,比如"这里是全局锁""这里是平方级扫描",方便以后翻账,而不是让"以后再优化"悄悄变成"从来没有优化"。
强度分三档:lite 档照做,只多一句提示告诉你还有更省的做法;full 档是默认,老老实实按阶梯执行;ultra 档走极端,删代码优先于加代码,连需求本身都要先质疑一遍。默认档位可以用环境变量或配置文件固定下来。
除了主技能,它还带了一套配套命令,覆盖审查、巡检、记账和成绩单几种场景。规则适配了二十种左右的 AI 编程工具,从 Claude Code、Codex、Cursor、Copilot、Cline、Windsurf 到 Gemini CLI 都有对应的接入文件;插件形态的宿主还能把规则注入到每一个被派出去的子代理,你可以用正则决定哪些子代理要受管。
SECTION 03
写代码前的七次自问
| 顺序 | 先问自己 | 命中之后 |
|---|---|---|
| 第一级 | 这个功能真的需要存在吗 | 不需要就直接不做,YAGNI |
| 第二级 | 现有代码里已经有类似的吗 | 复用已有函数或写法,不重写 |
| 第三级 | 标准库能做吗 | 用标准库,不手搓 |
| 第四级 | 平台原生能力覆盖吗 | 用原生能力,不引依赖 |
| 第五级 | 已经装好的依赖能解吗 | 用现有依赖,不新增 |
| 第六级 | 能不能压成一行 | 压成一行 |
| 第七级 | 以上都不成立 | 才写能跑通的最小实现 |
SECTION 04
配套技能
| 命令 | 它做什么 | 什么时候用 |
|---|---|---|
| ponytail | 切换强度档位,不带参数则报告当前档 | 想调整管束力度的时候 |
| ponytail-review | 只盯过度设计的代码评审,逐条给出删什么、换成什么 | 提交前看一眼改动 |
| ponytail-audit | 把同样的评审铺到整个仓库,按可删体量排序 | 接手老项目做体检 |
| ponytail-debt | 汇总代码里所有 ponytail: 注释,形成欠账清单 | 定期翻一翻"以后再说" |
| ponytail-gain | 展示实测收益看板,少写多少代码、省下多少钱 | 想知道它到底有没有用 |
| ponytail-help | 命令速查 | 记不住的时候 |
SECTION 05
平台早就给你的东西
| 你以为需要装 | 平台本来就有的 |
|---|---|
| 日期、颜色、范围选择器组件 | input 标签的 date、color、range 类型 |
| 弹窗、折叠面板、进度条组件库 | dialog、details、progress 原生标签 |
| 深拷贝、分组、防抖这些工具函数 | structuredClone、Object.groupBy、三行防抖 |
| 数字与日期的本地化格式化库 | Intl.NumberFormat、Intl.DateTimeFormat |
| 无限滚动与尺寸监听库 | IntersectionObserver、ResizeObserver |
| 生成唯一 ID 的小包 | crypto.randomUUID |
另外,仓库里专门开了一个示例目录,十来条常见的"过度设计"任务,逐条给出同一个模型不开技能和开了技能的完整输出,可以直接对比着看。
SECTION 06
亮点清单
✅ 效果有实测背书。作者用真实的 Claude Code 会话,在一个真实的 FastAPI 加 React 开源仓库上跑了十二个需求工单,同一模型开不开技能分组对照,每组跑四遍,统计的是 git diff 最终留下的代码行
✅ 📉 平均少写一半代码。十二个任务上代码行数下降 54%,token 少 22%,成本降 20%,耗时快 27%,是那组对照里唯一每项指标都在下降的方案
✅ 最夸张的节省正好出现在过度设计重灾区。日期选择器从 404 行降到 23 行,降幅 94%;颜色选择器从 287 行降到 23 行,因为它直接伸手去拿浏览器原生的输入控件
✅ 该收敛的地方也不硬省。后端增删改查这类本来就没多少水分的代码,各方案写出来的长度几乎一样,它不会为了好看去动原本就合理的实现
✅ 🛡️ 省代码不省保护。在六道对抗性安全题上,路径穿越、注入、伪造令牌这些坑它全躲开了,安全通过率百分之百;而同样一句"尽量写一行"的提示词方案,在一道路径校验题上漏掉过一次
✅ 顺手证明了话少不等于省。对照组里有个只让模型说话简短、写码照旧的方案,代码只降了两成,token 反倒涨了百分之七
✅ 数据和结论都摊开可查。收到社区质疑之后,它把最初那次"少 80% 到 94%"的单轮测试公开认了账,指出那个数字里混着对话水分的偏差,随后重做了一套能证伪自己的实验,连实验过程中发现的一个自身污染 bug 都写进了报告
✅ 落地面广。二十种左右的编程工具都有现成适配,插件形态的宿主还能同步管住子代理
✅ 有退出机制。想关就关,档位可调,附带的卸载脚本会清理它在配置目录里留下的状态位和状态栏改动
—————— ✦ ——————
"懒的意思是少写,不是少想。你不理解的那个小改动,只是把懒惰伪装成了效率。"
对 AI 编程助手来说,写得多从来不是难点,忍住不写才是。Ponytail 给的不是一份风格指南,而是一条硬性的判断顺序:能不做就不做,能复用就复用,能用原生的就不引包,实在要写,也只写那条最短的、但把该守的边界守住的路径。当团队里每个人、每个代理都按同一套顺序思考,代码库的膨胀速度会肉眼可见地慢下来。
SECTION 07
开源信息
项目地址:https://github.com/DietrichGebert/ponytail
官方网站:https://ponytail.dev
作者:Dietrich Gebert
开源协议:MIT
主要语言:JavaScript
最新版本:v4.9.0
Star 数:约 13.68 万
Fork 数:约 7340