马尾辫
他什么也没说。他只写了一行代码。这样就能用了。
代码量减少约54%(最高可达94%)· 成本降低约20% · 运行速度提升约27% · 100%安全
该数据是在真实的 Claude Code 会话中,对一个真实的开源项目(FastAPI + React)进行编辑时测得的,对比的是没有该技能的相同智能体。54% 是12项功能任务的平均值(Haiku 4.5,样本量n=4);当智能体生成过度复杂的代码(如日期选择器)时,这一比例可达到94%,而当代码本身已极为精简时则接近零。ponytail 保留了所有的安全机制,而仅用于“编写单行代码”的简单提示则会放弃其中一项。(早前的单次测试将数值统一报告为80-94%;而基于公平的智能体基准值,该数值代表的是每项任务的最高效率,而非平均值。)完整报告 · 复现实验。
你肯定认识他。留着长长的马尾辫,戴着椭圆形眼镜。他在公司的时间甚至比版本控制系统出现的时间还要长。你给他看五十行代码,他看过后什么也不说,直接用一行代码替换了它们。
Ponytail 能将他整合进你的 AI 智能体中。
使用前 / 使用后
你要求生成一个日期选择器。普通的智能体会安装 flatpickr 库,编写一个封装组件,添加样式表,还会开始讨论时区问题。
而使用 ponytail 后:
<!-- ponytail: browser has one -->
<input type="date">
examples/ 中的通过率更高。
数据统计
最真实的衡量标准是让真正的智能体完成实际任务:即让无界面的 Claude Code 会话编辑 tiangolo's full-stack-fastapi-template(一个真实的 FastAPI + React 项目),并根据它最终留下的git diff成果来评分。共进行了12项功能任务测试,对比的是有该技能与没有该技能的相同智能体,样本量n=4,评估工具为 Haiku 4.5。
| 对比无技能基线 | 代码行数 | 令牌数 | 成本 | 时间 | 安全性 |
|---|---|---|---|---|---|
| Ponytail | -54% | -22% | -20% | -27% | 100% |
| Caveman(简洁散文控制模式) | -20% | +7% | +3% | +2% | 100% |
| “YAGNI + one-liners”提示词 | -33% | -14% | -21% | -30% | 95% |
Ponytail 是唯一一个在所有指标上都能实现显著缩减的模型,同时也是唯一一个在做到这一点的同时仍能保持完全安全性的模型。在那些存在严重过度设计问题的场景中,缩减幅度最大(例如日期选择器从 404 行缩减到 23 行,颜色选择器从 287 行缩减到 23 行,原因是它直接使用了原生<input>组件而非专用组件),而对于本身就已经非常简洁的代码,缩减幅度则接近于零。完整的方法、针对不同任务的对比表格以及相关限制信息可见:benchmarks/results/2026-06-18-agentic.md。
旧版的单次生成数据(孤立生成模式)
涵盖了五项日常任务,使用了三种模型以及三种不同的处理方式(无技能模式、Caveman模式、Ponytail模式),共进行了十次运行,并给出了中位数结果。每个提示词对应一次输出结果,统计的是答案的代码行数:
实验结果显示代码量减少了80-94%。#126曾指出,纯模型基线版本会通过添加散文描述和选项来充实其输出,因此这一差距在一定程度上是对话式基线带来的伪象。上述基于智能体模型的数据则是经过修正后的、更具说服力的结果。可使用npx promptfoo eval -c benchmarks/promptfooconfig.yaml来复现单次生成实验。]
规则从来都不是“使用最少的令牌数”。 正确的规则是:仅编写任务所需的代码,绝不能削减验证逻辑、错误处理机制、安全性保障或无障碍功能。代码量之所以会变小,是因为这些内容确实是必要的,而非经过刻意压缩的结果。对于遵循该优化原则的模型而言,更低的成本和更快的响应速度只是附带效果;而那些倾向于过度思考、在每一步决策上都耗费大量令牌的简洁推理模型,则可能会出现相反的情况(在 GPT-5.5 上就观察到了这种现象)。
工作原理
在开始编写代码之前,智能体会先找到满足以下条件的第一个层级:
1. Does this need to exist? → no: skip it (YAGNI)
2. Already in this codebase? → reuse it, don't rewrite
3. Stdlib does it? → use it
4. Native platform feature? → use it
5. Installed dependency? → use it
6. One line? → one line
7. Only then: the minimum that works
该“阶梯式选择流程”是在智能体理解问题之后才启动的,而非替代理解过程:它会先读取即将被修改的代码,追踪其实际执行流程,然后再确定下一步该选择哪个层级。智能体在寻找解决方案时可能会偷懒,但在读取代码时绝不会马虎。
适度懒惰,绝非疏忽:基于信任边界的验证、数据丢失处理、安全性以及无障碍性始终不会被牺牲。
安装
这是 Ponytail 要求你做的最简单的事:
Claude Code 与 Codex 插件会运行两个微小的 Node.js 生命周期钩子,因此node必须存在于你的 PATH 环境变量中(给 Nix/nvm 用户的提示:它必须位于非交互式 shell 的 PATH 中)。即便如此,相关功能依然可用,只是会保持静默状态,而不会在每个提示语下都报错。
Claude Code
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
(必须发送两条独立的提示语才能完成安装)
在 Claude Code 桌面版的 Code 选项卡中操作步骤相同:在提示框中输入上述两条/plugin命令,或点击其旁边的**+按钮,选择Plugins** → Add plugin来浏览已配置的市场,也可通过侧边栏的Customize来管理这些市场。
Codex
codex plugin marketplace add DietrichGebert/ponytail
codex plugin add ponytail@ponytail
运行codex并打开/hooks,查看并确认其两个生命周期钩子,然后开启一个新线程。
同样的安装步骤也适用于 Codex 桌面应用:安装完成后重启应用,它就会自动识别该插件。
GitHub Copilot CLI
copilot plugin marketplace add DietrichGebert/ponytail
copilot plugin install ponytail@ponytail
在交互式的 Copilot CLI 会话中,可使用斜杠形式的命令:
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
Copilot CLI 会按插件名称对命令进行命名空间划分。例如:
/ponytail:ponytail ultra
/ponytail:ponytail-review
Pi agent harness
pi install git:github.com/DietrichGebert/ponytail
OpenCode
将其添加到opencode.json中:
{ "plugin": ["@dietrichgebert/ponytail"] }
也可以从某个代码检出目录运行(该插件会重用hooks/和skills/):
{ "plugin": ["./.opencode/plugins/ponytail.mjs"] }
它会在每轮对话的当前层级注入规则集;同时还会添加/ponytail命令(参见Commands)。即便没有该插件,OpenCode 也会自动加载此仓库中的AGENTS.md,因此规则依然有效。该插件还会新增lite/full/ultra/off层级。
./路径会相对于你的项目中的opencode.json来确定;若要在多个项目间共享同一个代码检出目录,可将其指向.mjs的绝对路径(它会根据自身文件的位置找到对应的hooks/和skills/)。
Gemini CLI
gemini extensions install https://github.com/DietrichGebert/ponytail
它会在每次会话中将规则集作为常驻上下文加载,并注册/ponytail命令;skills/版本也会一同加载,仅在需要时才会被激活。
Gemini 适配器刻意不提供根级hooks/hooks.json路径:Gemini 会自动加载该路径,而 Ponytail 的生命周期钩子则使用 Claude/Codex 的事件名称。
Qoder
Qoder 会自动从仓库根目录加载AGENTS.md作为常驻上下文,因此无需任何设置即可在代码检出目录下运行 Ponytail。对于针对特定项目的规则,可将.qoder/rules/ponytail.md复制到项目的.qoder/rules/中。六个 Ponytail 技能(/ponytail、/ponytail-review、/ponytail-audit、/ponytail-debt、/ponytail-gain、/ponytail-help)可通过 Qoder 的技能系统使用;插件清单位于.qoder-plugin/plugin.json,指向skills/目录。
如需获得完整的插件级支持(自动启用模式,且每个提示词都会注入规则集),请将 hooks/qoder-hooks.json 中的钩子添加到您的 .qoder/settings.json 中。请用您所使用的 ponytail 检出路径替换 PONYTAIL_DIR。Qoder 的 UserPromptSubmit 钩子会在首次接收提示词时启用默认模式,并在每一轮对话中注入规则集;而带有 PreToolUse 与 task|Task 匹配器的钩子则可将规则集注入子代理中。等级切换功能(/ponytail lite|full|ultra|off)会自动生效。
Antigravity CLI
Google 正将 Gemini CLI 更名为 Antigravity CLI(即 agy 二进制文件);同样的扩展程序也可安装到该程序中:
agy plugin install https://github.com/DietrichGebert/ponytail
它复用了此仓库中的 gemini-extension.json。唯一的区别在于:Antigravity 会将 /ponytail 命令转换为技能,因此您需要直接在聊天中输入这些命令(例如以消息形式输入 /ponytail-review),而无需从斜杠菜单中选择。在迁移完成之前(大约在 2026 年 6 月 18 日左右),gemini extensions install 仍然可用。若想将其作为始终处于激活状态的规则来使用,只需将规则集放入 .agents/rules/ 即可。
Hermes Agent
hermes plugins install DietrichGebert/ponytail --enable
安装完成后请重启 Hermes。该插件会在每次 LLM 对话开始前注入当前的 Ponytail 模式,将捆绑的技能注册为 ponytail:<skill>,并添加 /ponytail、/ponytail-review、/ponytail-audit、/ponytail-debt、/ponytail-gain 和 /ponytail-help。在共享网关环境中,可通过 Hermes 的斜杠命令访问控制功能,仅允许受信任的用户使用 /ponytail;而运行时模式则是进程级的。
CodeWhale
无需任何设置,即可从项目根目录读取 AGENTS.md。只需将 AGENTS.md 复制到您的项目中,或从该仓库的检出目录运行 codewhale 即可,仅此而已。
Swival
首先在您的库中准备好该集合,然后再添加您需要的技能:
swival skills add --global https://github.com/DietrichGebert/ponytail # stage into ~/.config/swival/library
swival skills add ponytail # install the collection into this project
swival skills add --global ponytail # or activate it in every project
Swival 也会从项目根目录读取 AGENTS.md,同时全局读取仅用于提供指令的 ~/.config/swival/AGENTS.md 作为备用。
在命令行中,可使用 $ 前缀来明确激活某个技能。例如:$ponytail-review。
Devin CLI
devin plugins install DietrichGebert/ponytail
它会将 ponytail 作为 Devin 的插件进行安装;相应的技能则以 /ponytail:ponytail、/ponytail:ponytail-review 等形式提供。
OpenClaw
clawhub install ponytail
它会通过 ClawHub 将 ponytail 作为 OpenClaw 的技能进行安装;review、audit、debt、gain 以及 help 这些技能也是以相同方式安装的(即 clawhub install ponytail-review 等)。OpenClaw 会在编码任务中应用该技能,同时还会将其作为 /ponytail 命令提供。如果没有 ClawHub,可直接将 .openclaw/skills/ponytail 复制到 ~/.openclaw/skills/ 中。
就这些了。他会为此感到骄傲的。虽然他不会说出来。
该功能会在每次会话中自动激活,只需使用少量命令即可(详见 Commands)。当代码库给您带来了个人层面的困扰时,还有 /ponytail ultra 可以使用。启动信息及模式切换提示会显示当前的模式。
您可以通过 PONYTAIL_DEFAULT_MODE 环境变量(lite/full/ultra/off)为每个新会话设置等级,或者通过 ~/.config/ponytail/config.json 中的 defaultMode 字段来设置(Windows 系统则为 %APPDATA%\ponytail\config.json)。默认值为 full。
在处于活动状态时,该规则集还会被注入到通过 Agent 工具生成的每一个子代理中。若希望仅针对特定类型的代理应用该规则集(例如,不对其它只读搜索代理生效),可将 PONYTAIL_SUBAGENT_MATCHER 环境变量设置为用于匹配子代理的 agent_type 的正则表达式。该匹配规则没有固定锚点且不区分大小写:explore|general 表示两种情况均匹配,^general$ 表示精确匹配,而插件型代理的路径则表现为 plugin:name 的形式。若未设置该变量,则表示将规则注入到所有子代理中(即为默认行为);若正则表达式无效,或平台无法识别子代理的类型,也会回退到注入规则的方式。
Cursor、Windsurf、Cline、GitHub Copilot Chat(即 VS Code、JetBrains 以及 Visual Studio 的编辑器扩展,而非 Install 中介绍的独立版 Copilot CLI)、Aider、Kiro、Zed、CodeWhale、Swival、Qoder:请从该仓库复制对应的规则文件(.cursor/rules/、.windsurf/rules/、.clinerules/、.github/copilot-instructions.md、AGENTS.md、.kiro/steering/、.qoder/rules/)。
Kiro:将 .kiro/steering/ponytail.md 复制到 ~/.kiro/steering/(全局范围)或项目中的 .kiro/steering/。
GitHub Copilot CLI 的回退模式(仅指令模式):它会读取项目中的 AGENTS.md 和 .github/copilot-instructions.md,或者将规则复制到 ~/.copilot/copilot-instructions.md 中,以便在所有项目中运行 ponytail。此方式可提供持续指导,但不会添加插件模式切换选项或钩子。
安装了 Codex 扩展的 VS Code 会读取该仓库提供的 AGENTS.md,因此无需任何设置即可在仓库根目录下使用该功能(~/.codex/AGENTS.md 可将 Codex 设置为全局生效)。
在 JetBrains Junie 的“设置 → 工具 → Junie → 项目设置 → 指南路径”中指定该路径后,Junie 即可读取 AGENTS.md(目前尚不支持自动检测)。该仓库提供了 AGENTS.md;.junie/guidelines.md 是 Junie 旧版的路径。
Amp(Sourcegraph)会从工作目录以及其上级目录中读取 AGENTS.md,直至 $HOME,这些文件均包含在该仓库中,因此无需任何设置即可使用(~/.config/amp/AGENTS.md 可实现全局生效)。
Jules(Google)会从仓库根目录读取 AGENTS.md,该文件也包含在该仓库中,因此无需任何设置即可加载规则集。
哪些文件对应哪些代理:请参阅 Agent portability。
卸载
| 主机 | 命令 |
|---|---|
| Claude Code | /plugin remove ponytail |
| Codex | codex plugin remove ponytail |
| Devin CLI | devin plugins remove ponytail |
| Pi agent | pi uninstall ponytail |
| Cursor / Windsurf / Cline / Qoder / 等 | 删除已复制的规则文件 |
这些操作会删除插件自身的文件。不过,它们会在插件文件夹外留下少量与状态相关的记录:模式标志~/.config/ponytail/config.json,以及(如果您接受了设置提示)在~/.claude/settings.json中的statusLine条目。请运行node scripts/uninstall.js来清理这些残留。请在运行上述的宿主删除命令之前执行它——该脚本本身也是一个插件文件,因此先删除插件就会同时删掉它(或者从该仓库的独立克隆版本中运行它)。它只会删除那些指向 ponytail 自身脚本的 statusLine 条目,因此您自行设置的 statusline 会保持不变。
命令
| 命令 | 功能 |
|---|---|
/ponytail [lite | full | ultra | off] | 设置强度,或将其关闭。不带参数时可查看当前强度等级。 |
/ponytail-review | 审查当前的差异内容,判断是否存在过度设计,并返回删除列表。 |
/ponytail-audit | 对整个仓库进行过度设计检查,而不仅限于差异部分。 |
/ponytail-debt | 将您暂缓处理的ponytail:快捷指令汇总到记录本中,避免“以后处理”变成“永远不处理”。 |
/ponytail-gain | 显示基准测试得出的影响评分表(代码更少、成本更低、速度更快)。 |
/ponytail-help | 上述命令的快速参考。 |
这些命令需要具备相应技能的宿主(Claude Code、Codex、Devin CLI、OpenCode、Gemini、pi、Swival、Hermes Agent、Qoder)。在 Codex 中,它们属于技能,可通过@(@ponytail-review)来调用。仅支持指令的适配器(Cursor、Windsurf、Cline、Copilot、Kiro、Antigravity)则无需命令即可加载常驻规则集。
开发
在修改精简后的规则文本时,需确保各代理版本的文本保持一致:
node scripts/check-rule-copies.js
npm test
OpenClaw 技能包(.openclaw/skills/)是由skills/生成的;修改某个技能后需重新运行node scripts/build-openclaw-skills.js,如果版本过旧,测试套件将会失败。若要将这些技能发布到 ClawHub,需先运行clawhub login,然后再运行node scripts/publish-openclaw-skills.js(它会以package.json版本同时发布全部六个技能;若要预览,可加上--dry-run参数)。
正确性基准测试会启动 Python 来执行邮件和 CSV 格式的检查;在运行python之前会先尝试python3。进行 CSV 检查时,需要在本地安装pandas。
常见问题
我可以在 caveman 中使用它吗? 可以,而且建议您这么做。Caveman 用于压缩代理生成的文本;ponytail 用于压缩它生成的代码。两者功能不同、互不重叠:Caveman 会逐字节保留代码原貌,而 ponytail 则不会干预代码本身的表述。二者共同实现代码的极简化。
它需要配置文件吗?
不需要。虽然可以通过可选的~/.config/ponytail/config.json或PONYTAIL_DEFAULT_MODE环境变量来设置默认强度等级,但并非必须。
如果我真的需要那 120 行长的缓存类怎么办? 其实没这个必要。即便您坚持要求,它也会生成——只是速度会很慢,而且会正确生成,同时还会盯着您看。
它具备扩展性吗? 您从未编写过的那段代码具备无限的扩展能力。至今为止,零错误、零 CVE,且正常运行时间高达 100%。
为何取名“ponytail”? 原因您心里很清楚。
赞助商
许可证
MIT。最简实用且有效的许可证。]
