工具推荐
1781578133更新
0
你有没有遇到过这种情况:让AI帮你写个日期选择器,它给你装了flatpickr,写了个wrapper组件,加了一堆样式表,然后开始跟你讨论时区问题。
你:???我就是想要个日期选择器啊,你给我整这么复杂干嘛。
包括主流的AI编程助手,Claude Code、Codex、Gemini CLI,都存在这个问题,你让它干点啥,它都给你整出来一堆你听都没听过的库,搞得项目越来越复杂。
然后我就去搜,有没有一种方法,能让AI别那么"热情",能够克制一点。
还真让我找到了。
这个项目叫Ponytail,翻译过来就是"马尾辫"。
它的核心理念很有意思,叫"lazy senior dev mode",翻译过来就是"懒散老司机模式"。
什么是懒散老司机?你公司里肯定有这种人,头发扎个马尾,戴个椭圆眼镜,在公司待的时间比Git历史记录还长。你给他看五十行代码,他看都不看,说不用,然后给你删成一行。

Ponytail,就是想把这种老司机思维,装进AI编程助手里面。
那它是怎么装进去的呢?说白了就是给AI写了一套规则文件。
对于支持skill的助手,比如Claude Code、Codex,它就以skill的形式加载。对于不支持skill的助手,比如Cursor、Windsurf,它就以规则文件的形式加载。相当于给不同的AI助手配了一套使用说明书,让它们学会用"懒散老司机"的方式去写代码。
举几个例子,你就知道有多离谱了。
先说邮箱验证。你让AI写一个验证邮箱的功能,正常情况下它会给你整出来这样的代码:
import reEMAIL_PATTERN = re.compile( r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$')class EmailValidator: def __init__(self, pattern: re.Pattern = EMAIL_PATTERN): self.pattern = pattern def validate(self, email: str) -> bool: ifnot isinstance(email, str): raise TypeError("email must be a string") email = email.strip() ifnot email: returnFalse return bool(self.pattern.match(email))一屏幕的代码,一个类,一个正则,一个包装函数。用了Ponytail,它就会先问问自己,这玩意真需要这么复杂吗?然后给你精简成一行:
# ponytail: good enough, real validation is sending the mail"@" in email and "." in email.split("@")[-1]对,就这一行。什么意思呢,就是判断你输入的这个东西,像不像一个邮箱地址。它就检查两件事:第一,有没有@符号;第二,@后面的部分有没有小数点。
就跟你看一个人给你的邮箱,心里想"嗯,有@,有.com",就差不多是这个意思。
为什么要这么简单?说白了,不管你正则写得多复杂,它本质上就是个"看起来对不对",真正的验证方式只有一个:往这个邮箱发一封邮件过去,看对方能不能收到。既然这样,搞那么复杂干嘛?
最离谱的是日期选择器。就是浏览器自带的那个日期选择框,一行HTML的事:
<input type="date">对,就这一行。Ponytail会告诉AI,人类使用了几十年的浏览器自带日期选择器,你不用,你非要去装个第三方库,你图什么?
就是这样,太离谱了。
有人可能觉得这不就是少写代码吗,能有多大用?
你还别说,真有人做了测试。在Haiku、Sonnet、Opus三个模型上,各跑了十遍,取中位数。结果怎么说呢。
用了Ponytail,在所有模型上,代码量直接减少80%到94%,成本降低47%到77%,速度比无技能智能体快3到6倍。

什么意思呢,就是你让AI写一个功能,正常情况下它可能给你整一百多行代码,用了Ponytail,可能就十几行,甚至一行。
你要问快在哪了?就在于它不在那想太多,这个库要不要引用、这个功能要不要预留,想那么多干嘛,系统自带的功能直接用不就得了。
那它是怎么做到的呢?
说白了就是给AI定了一套规则,让AI在写代码之前,先问自己六个问题:
第一,这个功能真的需要存在吗?第二,标准库是不是已经有现成的了?第三,平台原生功能能不能直接用?第四,我已经装好的依赖能不能解决?第五,能不能一行代码搞定?第六,实在不行了,再写最少的必要代码。
就这六个问题,你看着简单,但就是这六个问题,能把AI从"热情过头"拉回"刚好够用"。
而且Ponytail有个特别骚的地方,它会把每一个偷懒的决策都标出来,写一个ponytail: 注释。意思是"这个地方我走捷径了,记住,后面可能要找后账"。
比如它写了个全局锁,它就会标一个ponytail: global lock, per-account locks if throughput matters。翻译过来就是:"我这里走捷径了,用了全局锁。如果以后发现多人同时用它变卡了,升级方案是改成'每个账户一把锁'。"然后你后面真的遇到性能问题了,你再回去改。
不欠债,也不提前还债。刚好够用就行。
不过Ponytail的"懒"也是有底线的。涉及到trust-boundary validation(信任边界验证)、data-loss handling(数据丢失处理)、security(安全)、accessibility(可访问性)的地方,它是绝对不会糊弄的。为什么?你见过哪个老司机在踩刹车这件事上偷懒的?关乎安全的地方,省省省,后面迟早要还的。
行了,说了这么多,你可能已经心动了,想知道怎么装。
安装过程并不复杂,而且支持贼多AI编程助手。
Claude Code、Codex、Cursor、Windsurf、Cline、Aider、Copilot、Kiro、Gemini CLI、OpenCode、Pi agent harness,基本你听过的都有。
Claude Code
在对话框里敲这两行:
/plugin marketplace add DietrichGebert/ponytail/plugin install ponytail@ponytail完事。
Codex
codex plugin marketplace add DietrichGebert/ponytail然后打开 /plugins,找到Ponytail市场,安装。安装完后再打开 /hooks,审查并信任它的两个生命周期钩子,开启新对话就好了。
Gemini CLI
gemini extensions install https://github.com/DietrichGebert/ponytailCursor、Windsurf、Cline、Copilot这些
从项目的 .cursor/rules/、.windsurf/rules/、.clinerules/、.github/copilot-instructions.md 等目录,把对应的规则文件复制到你的项目里就行。
装完以后,每次对话它都会自动激活。你可以随时切换模式:
- /ponytail lite — 轻度模式,给你建议但不那么激进
- /ponytail full — 完整模式,默认就是这个
- /ponytail ultra — 极致模式,YAGNI狂热者,先给你一行代码然后挑战你的需求
- /ponytail off — 关掉它
说真的,我第一次看到这个项目的时候,我就觉得很有意思。
为什么呢,除了那个扎着马尾辫的油腻大叔logo,还因为它不是在教AI怎么写更好的代码,它是在教AI怎么少写代码。
这其实也是一种思维方式。很多时候我们写那么多代码,不是因为真的需要那么多,是因为我们习惯性地在"增加",而不是在"取舍"。
真正的高手,做的都是减法。
就像那个马尾辫老司机,你给他看五十行代码,他删成一行。不是他不懂,是他已经到了那个level,知道什么是不需要的。
而Ponytail,就是想帮AI也到达这个level。
行了,今天就聊到这。
GitHub地址
DietrichGebert/ponytailhttps://github.com/DietrichGebert/ponytail
豫公网安备41010702003375号