Caveman vs Ponytail:AI 编程圈"懒人哲学"两大门派正面交锋
Caveman vs Ponytail:AI 编程圈"懒人哲学"两大门派正面交锋
一个把 Agent 的嘴缝小,一个把 Agent 的手管住。都叫"懒",一个省 token,一个省代码。走向截然不同,却意外互补。
快速导航
| 项目 | Caveman | Ponytail |
|---|---|---|
| 仓库 | github.com/JuliusBrussee/caveman | github.com/DietrichGebert/ponytail |
| 作者 | Julius Brussee | Dietrich Gebert |
| 开源时间 | 2026年4月 | 2026年6月 |
| 星数 | 9.5 万 | 9.2 万 |
| 日均涨星 | ~802/天 | ~1,884/天 |
| 一句话 | "why use many token when few do trick" (能用几个词说清的事,何必啰嗦) |
"The best code is the code you never wrote" (最好的代码,是你压根没写的代码) |
数据来源:GitHub API 实时查询(2026年7月31日)

01 Caveman:把 Agent 的嘴管住
一句话概括
Caveman 不管你写什么代码、用不用测试、装不装依赖。它只做一件事:让 Agent 说话像山顶洞人一样简短,砍掉 65% 的输出 token,但代码、命令、报错一字不改。
作者 Julius Brussee 把这件事讲得很直白:
"Caveman no make brain smaller. Caveman make mouth smaller."
翻译成人话:Agent 还是那个 Agent,聪明程度一分没少。只是它不再跟你说"Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."了——直接告诉你 Bug 在哪儿、怎么修。
一个例子就懂了
同样解释 React 组件为什么重复渲染:
普通 Agent(69 token):
The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle. When you pass an inline object as a prop, React's shallow comparison sees it as a different object every time, which triggers a re-render. I'd recommend using useMemo to memoize the object.
你的 React 组件重复渲染,很可能是因为你在每个渲染周期里创建了一个新的对象引用。当你把内联对象作为 prop 传入时,React 的浅比较每次都把它当成新对象,从而触发重渲染。建议用 useMemo 把这个对象缓存起来。
Caveman(19 token):
New object ref each render. Inline object prop = new ref = re-render. Wrap in
useMemo.每次渲染生成新引用。内联对象 prop = 新引用 = 重渲染。用
useMemo包起来。
同样的修复方案,三分之一的话。没有任何技术信息丢失。

六个强度等级
Caveman 不是一刀切。它提供了 6 个压缩等级,随时切换:
| 等级 | 效果 | 同一句话的效果 |
|---|---|---|
lite |
去废话,保留完整句子 | "Wrap the object in useMemo. New ref created every render."用 useMemo 包住对象。每次渲染会创建新引用。 |
full(默认) |
去冠词,可用碎片句 | "New ref each render. Wrap object in useMemo."每次渲染新引用。 useMemo 包住对象。 |
ultra |
连词都省,一字不多 | "Inline obj prop, new ref, re-render. useMemo."内联对象属性 = 新引用 = 重渲染。 useMemo。 |
wenyan-lite |
半文言,古典语感 | "組件頻重繪,以每繪新生對象參照故。以 useMemo 包之。" |
wenyan-full |
纯文言,极致压缩 | "每繪新生對象參照,故重繪;以 useMemo 包之則免。" |
wenyan-ultra |
文言中最短 | "新參照則重繪。useMemo 包之。" |

wenyan模式是故意设计的例外——文言文在 token 效率上有天然优势,单位字符承载的信息密度远超现代白话。
安装
# 一键安装(自动检测本机所有 Agent)
curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh | bash
# 或单独安装 Claude Code 插件
claude plugin marketplace add JuliusBrussee/caveman && claude plugin install caveman@caveman
安装后输入 /caveman 或说一句"talk like caveman"即可激活。说"normal mode"退出。
Caveman 不只省 token
除了核心的压缩功能,Caveman 还带了一整套工具链:
| 命令 | 做什么 |
|---|---|
/caveman [lite|full|ultra|wenyan] |
切换压缩等级 |
/caveman-commit |
生成 ≤50 字的 Conventional Commit 信息 |
/caveman-review |
一行式 PR Review:L42: 🔴 bug: user null. Add guard. |
/caveman-stats |
实时显示本会话省了多少 token、多少钱 |
/caveman-compress <file> |
永久压缩 CLAUDE.md 等记忆文件——不是省一次,是以后每次会话都省 ~46% |
其中 caveman-compress 是最被低估的功能:它把那些越写越啰嗦的项目记忆文件压回山顶洞人风格,但代码块、URL、文件路径完全保留。此后每一次 AI 会话加载这个文件,都会少消耗近一半的输入 token。不是省一次,是省一辈子。

02 Ponytail:把 Agent 的手管住
一句话概括
Ponytail 不管你 Agent 说话有多啰嗦。它管的是 Agent 写了多少代码。它的核心信条一句话就能说清楚:
"The best code is the code you never wrote."
不是"最好的代码是精妙的代码",不是"最好的代码是可扩展的代码"——最好的代码是你压根没写的代码。
作者 Dietrich Gebert 给它的形象是一个具体的人:扎着马尾辫、戴着椭圆眼镜、在公司待得比版本控制系统还久的高级工程师。 你给他看 50 行代码,他沉默地看了一眼,删成 1 行。它能跑。他不会解释。
Ponytail 就是把这个老法师塞进你的 AI Agent 里面。
一个例子就懂了
你说:"我要一个日期选择器。"
普通 Agent 的做法:安装 flatpickr、写一个 wrapper 组件、引入样式表、开始讨论时区问题。
Ponytail 的做法:
<!-- ponytail: browser has one -->
<!-- ponytail: 浏览器自带 -->
<input type="date">
就一行。因为浏览器自带日期选择器。不需要安装任何东西。

七级懒人阶梯
Ponytail 的核心机制是一把"懒人阶梯"。写任何代码之前,Agent 必须从第一级开始爬,哪一级能解决就停在哪一级:
1. 这东西真的需要存在吗? → 不需要就跳过(YAGNI)
2. 这个代码库里已经有了? → 复用,别重写
3. 标准库能干? → 用标准库
4. 原生平台功能支持? → <input type="date"> 而不是装个组件库
5. 已经装了的依赖里有? → 用它,别加新依赖
6. 一行能写完? → 就写一行
7. 好吧,那写最少的代码。 → 只有这样才动手
关键细节:这个阶梯是在 Agent 理解了问题之后才爬的。先读代码、追踪调用链、理解完整上下文,然后再爬**决定最省力的解法。
"The ladder runs after you understand the problem, not instead of it."
懒的是解法,不是理解。这跟"随便写个一行就交差"有本质区别。

三种强度
| 等级 | 效果 |
|---|---|
lite |
按需写,但附一行"更懒的做法是…"让用户自己选 |
full(默认) |
严格执行阶梯。标准库优先。最短 diff、最短解释 |
ultra |
YAGNI 极端主义。能删就不加。一行搞定就反问"你真的需要更多吗?" |
安装
# Claude Code
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
# Codex
codex plugin marketplace add DietrichGebert/ponytail
codex plugin add ponytail@ponytail
支持 20+ Agent。也是 MIT 协议。安装后自动生效。
Ponytail 的配套工具
| 命令 | 做什么 |
|---|---|
/ponytail [lite|full|ultra|off] |
切换强度 |
/ponytail-review |
审查当前 diff,找出过度工程的地方,输出删除清单 |
/ponytail-audit |
审查整个仓库的过度工程 |
/ponytail-debt |
把那些写了 ponytail: 标记的简化点收进账本——防止"以后再说"变成"永远不会说" |
/ponytail-gain |
显示实测数据面板:省了多少代码、多少成本、多少时间 |
关于 ponytail: 标记:当 Ponytail 做了一个故意简化(比如用全局锁而不是细粒度锁),它会在代码里留下 # ponytail: global lock, per-account locks if throughput matters 这样的注释——给未来的维护者留一个升级路径。懒不是不负责,是给负责留了门。

03 同一个哲学,两个靶子
两个项目的底层逻辑出奇一致——用最少的资源达到同样的目的。 但它们打的靶子完全不同:
| 维度 | Caveman | Ponytail |
|---|---|---|
| 管什么 | Agent 的嘴(输出 prose) | Agent 的手(写的代码) |
| 省什么 | 输出 token(平均 65%) | 代码行数(平均 54%) |
| 机制 | 6 级压缩等级 + 语法规则 | 7 级懒人阶梯 + YAGNI |
| 人格 | 山顶洞人——脑子大、嘴巴小 | 马尾老法师——不说话、只删代码 |
| 覆盖 | 30+ Agent | 20+ Agent |
| 对代码的影响 | 零——代码、命令、报错一字不改 | 全部——从根源减少要写的代码 |
| 生态 | caveman-code、cavemem、cavekit、cavegemma | ponytail-review、ponytail-audit、ponytail-debt |
| 许可证 | MIT | MIT |
Caveman 像给 Agent 做了一个声带手术——它还是那个 Agent,但只说该说的。Ponytail 像给 Agent 换了一个大脑——它还是接到同样的需求,但会用完全不同的方式去实现。
关键差异:谁对"安全"更敏感?
两个项目都极其在意"懒不是不负责"这件事。
Caveman 有一条自动清晰规则(Auto-Clarity):遇到安全警告、不可逆操作确认、多步骤顺序容易歧义时,自动退出压缩模式,用完整句子说清楚。说完了再切回山顶洞人。
Ponytail 在 README 里明确写了绝对不能懒的 5 件事:信任边界的输入验证、防止数据丢失的错误处理、安全措施、无障碍基础、用户明确要求的东西。它甚至要求:每一个非平凡逻辑(有分支、有循环、涉及钱或安全的路径),必须留一个可运行的验证——一个 assert/demo/自测脚本。一行代码可以没有测试,但两行逻辑必须有一个检查点。

04 最精彩的部分:两个项目的诚实数字
这是这篇文章最值得写的一节。也是这两项目跟其他 AI 工具拉开差距的地方。
Caveman 的诚实告白
Caveman 官网有一个页面叫 HONEST-NUMBERS.md。你很少在开源项目里看到这种文件。
它坦白地写了 Caveman 什么时候不省钱:
"The skill costs ~1–1.5k input tokens every turn. If it saves less output than that, you are paying to use it."
翻译:Caveman 的规则本身每次要消耗约 1000-1500 个输入 token。如果你的正常回复本身就短(~150 个输出 token),那 Caveman 省下来的输出还不够付自己的入场费——你在亏钱用。
它还诚实记录了社区报告的翻车案例:
- Issue #145:有用户在短对话场景下实测,Caveman 是净亏损
- Issue #506:GitHub Copilot 按请求次数收费(不是按 token),用 Caveman 省不了钱
- Issue #550:某用户在 Cursor 上 A/B 测试,Caveman 反而用了 4.3M token vs 不用的 1M token,并且更慢
Julius 的回应不是"你用错了",而是:
"Wanting the rock to work does not make the rock work."
想让石头管用,不会让石头真的管用。
Ponytail 的诚实告白
Ponytail 的诚实更狠——它诚恳到把自己的基准测试推倒重来。
最早 Ponytail 宣称"减少 80-94% 代码"。有人(Colin Eberhardt)在 Issue #126 指出:你的基准测试有问题——你是拿一个裸 API 模型(会输出大段 prose 和多个选项)跟 Ponytail 比,"代码行数"里计入了注释和解释文字。这不是公平对比。
Dietrich 的回应不是辩解,而是完全重做基准测试。新版基准测试做到了:
- 不是单次生成,而是真实 Claude Code 会话——在真实开源项目(FastAPI + React 模板)上跑真实任务
- 对照组不是裸模型,而是同一个 Claude Code Agent 不加 Skill
- 4 次重复取均值,12 个真实 Feature Ticket
- 加入安全维度:生成的代码直接执行,用对抗性输入测试(路径穿越、SQL 注入、伪造 token)
- 加入 caveman 作为对照组,验证"效果来自压缩代码而不是压缩 prose"
新版结果:平均 -54% 代码,-20% 成本,-27% 时间,100% 安全。
最有意思的是安全测试——yagni-oneliner(就写了一句"Follow YAGNI principles, and prefer one-liner solutions."(遵循 YAGNI 原则,优先用一行代码解决问题))在路径穿越测试中漏了一次,安全率 95%。Ponytail 是 100%。"少写代码"这句话本身会砍掉安全守卫;Ponytail 的规则体系保留了它们。
为什么诚实数字很重要?
这两个项目的作者做了同一件事:告诉你工具的边界在哪,而不是把它吹成万能药。
在 AI 工具圈,这种行为极其罕见。大多数项目在 README 里展示精心挑选的最佳案例。Caveman 和 Ponytail 选择把最差案例也亮出来——包括社区报告的翻车现场。
这说明了两件事:第一,作者真的懂自己的工具。第二,他们在乎的不只是 star 数。

05 它不是竞争,是一套组合拳
读到这里你应该发现:这两个项目根本不冲突。
Caveman 管的是"Agent 跟你说多少废话",Ponytail 管的是"Agent 写多少废代码"。两者覆盖的领域完全不重叠。
更有意思的是,两个项目的 README 里都明确写了对方:
Ponytail 的 FAQ:
Can I use it with caveman?(能和 Caveman 一起用吗?)
Yes, and you should. Caveman shrinks what the agent says; ponytail shrinks what it builds. Different halves, no overlap.可以,而且你应该这么做。Caveman 压缩 Agent 说的话;Ponytail 压缩 Agent 写的东西。各管一半,互不重叠。
Caveman 的 Ponytail 基准测试对比(Ponytail 的 benchmark 里把 Caveman 作为对照组):
caveman lands between baseline and ponytail. Terseness alone explains part of the gap but not most of it. The effect is the lazy-code discipline, not short talk.
Caveman 的代码量介于基线(不用任何 skill)和 Ponytail 之间。说话简洁只能解释一部分差距,但不是主要部分——真正的效果来自"懒人代码"纪律,而非"短话"。
演化路径
两个项目的演化路径也出奇对称:
Caveman(省输出 token)
→ caveman-compress(省输入 token——压缩记忆文件)
→ cavemem(省跨会话 token——压缩 Agent 记忆)
→ caveman-code(省一切——从 Agent 到底层全压缩的终端编码工具)
→ cavegemma(把压缩刻进模型权重——Gemma 微调版)
Ponytail(省代码行数)
→ ponytail-review(审计 diff 的过度工程)
→ ponytail-audit(审计整个仓库的过度工程)
→ ponytail-debt(管理故意简化的技术债)
两条路都指向同一个方向:Agent 做更多事,消耗更少资源。

哲学升华:Brooks 的"偶然复杂性"在 AI 时代的回响
Frederick Brooks 在 1986 年的经典论文《No Silver Bullet》里区分了软件开发的两种困难:
- 本质复杂性(Essential Complexity):问题本身固有的复杂度,无法消除
- 偶然复杂性(Accidental Complexity):工具、语言、流程带来的额外复杂度,可以也应该消除
Caveman 和 Ponytail 做的事,本质上都是在消除 AI Agent 引入的新型偶然复杂性:
- Agent 天生话多——它被训练成乐于助人、善于解释。但"你每次交互多花 2 秒读废话"乘以"你每天交互 200 次",是一笔巨大的认知浪费。
- Agent 天生过度工程——它被训练成"给你最好的答案"。但"最好的答案"往往不是"最合适的代码"。一个日期选择器不需要 flatpickr,浏览器自带。
AI 不缺乏能力。AI 缺乏克制。
Caveman 和 Ponytail 给 AI 加上的,恰恰是这种克制。
06 你该选哪个?

先说结论:两个都装。它们不冲突。
但如果只能先装一个,按场景判断:
先装 Caveman,如果你:
- 每天跟 Agent 聊几百轮,看废话看得心烦
- 用的是按 token 计费的 API(Claude API、OpenAI API),想省真金白银
- 主要做代码审查、调试、架构讨论——Agent 的输出来源是"说话"而不是"写代码"
- 想要一个几乎零成本的优化——装上就生效,不需要改变任何工作习惯
先装 Ponytail,如果你:
- Agent 写的代码经常让你觉得"这也太复杂了吧"
- 你的项目里经常出现为了一个功能装了整个库的情况
- 在意代码的长期可维护性——"没写的代码不会有 Bug"
- 想让 Agent 学会说"这其实不需要",而不是永远说"好的我来做"
最佳实践:组合使用。
Caveman(管嘴)+ Ponytail(管手)= 一个话少、代码少、但质量不降的 Agent
这恰好也是两个项目作者的建议。Ponytail 自己甚至在 benchmark 里测试了两者组合的效果。

你装了哪个?评论区聊聊。
关注本号,获取更多 AI 编程工具深度评测。

浙公网安备 33010602011771号