DietrichGebert/ponytail
GitHub: DietrichGebert/ponytail
Ponytail 是一款让 AI 编程助手遵循「最少代码」原则的技能插件,通过阶梯式决策规则减少不必要的代码生成和资源消耗。
Stars: 94245 | Forks: 5176
Ponytail
他一言不发。写下一行代码。搞定。
代码减少约 54%(最高达 94%) · 成本降低约 20% · 速度提升约 27% · 100% 安全
基于真实的 Claude Code 会话,在一个真实的开源仓库(FastAPI + React)中进行编辑,并与未启用该技能的相同 agent 测量对比。约 54% 是 12 个功能任务的平均值(Haiku 4.5, n=4);在 agent 过度构建(如日期选择器)的情况下降幅可达 94%,而在代码本就极简的情况下则接近于零。ponytail 保留了所有的安全保障,而单纯的“写单行代码”提示词则会丢失一项。(此前的单次基准测试报告了 80-94% 的统一数据;相比于公平的 agent 基线,那是单任务的最高值,而非平均值。) 详细分析 · 复现测试。
Español · 한국어
你认识他的。留着长马尾辫。戴着椭圆形眼镜。在公司待的时间比版本控制系统还长。你给他看五十行代码;他看了一眼,什么也没说,然后用一行代码就替换了它们。
Ponytail 把他放进了你的 AI agent 里。
## 改造前 / 改造后
你想要一个日期选择器。你的 agent 安装了 flatpickr,写了一个包装组件,添加了样式表,然后开始和你讨论时区问题。
使用 ponytail:
```
```
在 [examples/](examples/) 中查看更多保留下来的例子。
## 数据
最诚实的测量是让真实的 agent 做真实的工作:一个无头的 Claude Code 会话编辑 [tiangolo 的 full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template)(一个真实的 FastAPI + React 仓库),根据它留下的 `git diff` 进行评分。共十二个功能任务,同一个 agent 分别在启用和禁用该技能的情况下运行,n=4,模型为 Haiku 4.5。
| 对比无技能基线 | LOC | tokens | 成本 | 时间 | 安全 |
|---|--:|--:|--:|--:|--:|
| **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 行,因为它直接使用原生的 `
` 而不是组件),而在代码已经非常精简的地方,削减幅度几乎为零。完整的方法、单任务表格及局限性说明:[benchmarks/results/2026-06-18-agentic.md](benchmarks/results/2026-06-18-agentic.md)。
较早的单次生成数据(独立生成)
五个日常任务,三个模型,三个测试组(无技能、[caveman](https://github.com/JuliusBrussee/caveman)、ponytail),运行十次,报告中位数。一个提示词,一次补全,统计回答的行数:
这里显示了 **代码减少 80-94%**。[#126](https://github.com/DietrichGebert/ponytail/issues/126) 中肯地指出,纯模型的基线会用散文和选项来填充它的回答,因此这种差距部分是对话基线造成的人为现象。上面的 agentic 数据是修正后、经得起推敲的版本。使用 `npx promptfoo eval -c benchmarks/promptfooconfig.yaml` 复现单次运行测试。
**核心原则从来不是“最少的 token”。** 而是:只编写任务所需的代码,绝不删减验证、错误处理、安全机制或无障碍访问。代码最终变小是因为这是必须的,而不是为了“打高尔夫”(刻意缩减代码)。较低的成本和延迟是遵循这套阶梯法则的模型带来的副作用;一个花着思考 token 来仔细斟酌每一步的简洁推理模型,反而可能会走向反面(在 GPT-5.5 上就是这样)。
## 工作原理
在编写代码之前,agent 会停在第一个成立的阶梯上:
```
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 框架
```
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.md) 复制到你项目的 `.qoder/rules/` 中。六种 ponytail 技能(`/ponytail`、`/ponytail-review`、`/ponytail-audit`、`/ponytail-debt`、`/ponytail-gain`、`/ponytail-help`)可通过 Qoder 的 Skill 系统使用;位于 [`.qoder-plugin/plugin.json`](.qoder-plugin/plugin.json) 的插件清单指向了 `skills/` 目录。
如需完整的插件级别支持(自动模式激活 + 在每个提示词上注入规则集),请将 [`hooks/qoder-hooks.json`](hooks/qoder-hooks.json) 中的钩子添加到你的 `.qoder/settings.json` 中。将 `PONYTAIL_DIR` 替换为你的 ponytail 检出目录的路径。Qoder 的 `UserPromptSubmit` 钩子会在第一次提示时激活默认模式,并在每一轮注入规则集;带有 `task|Task` 匹配器的 `PreToolUse` 会将规则集注入到子 agent 中。级别切换(`/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:
`,并添加 `/ponytail`、`/ponytail-review`、`/ponytail-audit`、`/ponytail-debt`、`/ponytail-gain` 和 `/ponytail-help`。在共享网关中,请使用 Hermes 的斜杠命令访问控制将 `/ponytail` 限制为受信任的用户;运行时模式是进程本地的。
### CodeWhale
从项目根目录读取 `AGENTS.md`,无需设置。将 [`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 还会从项目根目录和全局路径 `~/.config/swival/AGENTS.md` 读取 `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/) 复制到 `~/.openclaw/skills/` 中。
就这些了。他会感到骄傲的。只是他不会说出来。
在每次会话中都会激活,并带有少数几个命令(参见[命令](#commands))。当代码库让你受委屈时,可以使用 `/ponytail ultra`。启动和模式切换时的文本会显示当前模式。
使用 `PONYTAIL_DEFAULT_MODE` 环境变量(`lite`/`full`/`ultra`/`off`),或者 `~/.config/ponytail/config.json`(Windows 上为 `%APPDATA%\ponytail\config.json`)中的 `defaultMode` 字段,为每个新会话设置级别。默认为 `full`。
处于活动状态时,规则集也会注入到通过 Agent 工具生成的每个子 agent 中。要将其限定于特定的 agent 类型(例如,让只读的搜索 agent 跳过此设置),请将 `PONYTAIL_SUBAGENT_MATCHER` 环变量设置为针对子 agent 的 `agent_type` 进行测试的正则表达式。它是未锚定且不区分大小写的:`explore|general` 可匹配两者,`^general$` 是精确匹配,而插件 agent 的类型看起来像 `plugin:name`。未设置意味着注入到每个子 agent(默认行为);如果是无效的正则表达式,或者平台未报告其类型的子 agent,也会退回到注入状态。
Cursor、Windsurf、Cline、GitHub Copilot Chat(VS Code、JetBrains 和 Visual Studio 编辑器扩展,而不是涵盖在[安装](#install)下的独立版 Copilot CLI)、Aider、Kiro、Zed、CodeWhale、Swival、Qoder:从本仓库复制匹配的规则文件([`.cursor/rules/`](.cursor/rules/)、[`.windsurf/rules/`](.windsurf/rules/)、[`.clinerules/`](.clinerules/)、[`.github/copilot-instructions.md`](.github/copilot-instructions.md)、[`AGENTS.md`](AGENTS.md)、[`.kiro/steering/`](.kiro/steering/)、[`.qoder/rules/`](.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 在你于 Settings → Tools → Junie → Project Settings → Guidelines Path 中指向它之后,就可以读取 `AGENTS.md` 了(目前尚未实现自动化)。本仓库提供了 `AGENTS.md`;`.junie/guidelines.md` 是 Junie 的遗留路径。
Amp (Sourcegraph) 会从工作目录及其向上直到 `$HOME` 的父目录中读取 `AGENTS.md`,本仓库已提供此文件,因此无需设置即可工作(`~/.config/amp/AGENTS.md` 可作为全局配置生效)。
Jules (Google) 会从仓库根目录读取 `AGENTS.md`,本仓库已提供此文件,因此无需设置即可应用规则集。
关于哪些文件对应哪些 agent:[Agent 可移植性](docs/agent-portability.md)。
### 卸载
| 宿主环境 | 命令 |
|------|---------|
| 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 / 等 | 删除所复制的规则文件 |
这些操作会删除插件自身的文件。它们会留下少量 ponytail 在插件文件夹之外写入的状态:模式标记、`~/.config/ponytail/config.json`,以及(如果你接受了设置提示)`~/.claude/settings.json` 中的 `statusLine` 条目。运行 `node scripts/uninstall.js` 也可以清理这些内容。**请在上面的宿主环境移除命令之前运行它** —— 该脚本本身也是一个插件文件,因此先移除插件会将其删除(或者从该仓库的另一个克隆中运行它)。只有当 `statusLine` 条目指向 ponytail 自身的脚本时,它才会被移除,因此你自己设置的状态栏将保持原样。
## 命令
| 命令 | 作用 |
|---------|--------------|
| `/ponytail [lite \| full \| ultra \| off]` | 设置强度,或将其关闭。不带参数则报告当前级别。 |
| `/ponytail-review` | 审查当前的 diff 是否存在过度设计,返回一个待删除列表。 |
| `/ponytail-audit` | 审计整个代码仓库是否存在过度设计,而不仅仅是 diff。 |
| `/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)会加载常驻规则集,但不包含命令。
## 开发
更改精简规则文本时,请保持 agent 副本同步:
```
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 检查;会先尝试 `python3` 然后是 `python`。CSV 检查需要在本地安装 `pandas`。
## 常见问题
**我可以将它与 [caveman](https://github.com/JuliusBrussee/caveman) 一起使用吗?**
是的,而且你应该这么做。Caveman 缩减了 agent 的发言;ponytail 缩减了它构建的代码。它们负责不同的部分,互不重叠:caveman 保持代码字节完全不变,ponytail 绝不干涉描述文本。用最精简的话语去探讨最极简的代码。
**它需要配置文件吗?**
不需要。可选的 `~/.config/ponytail/config.json` 或 `PONYTAIL_DEFAULT_MODE` 环境变量可以设置默认级别,但这并不是必须的。
**如果我真的需要那个 120 行的缓存类怎么办?**
你不需要。但如果你坚持,他会为你构建它的。很慢地。很正确地。同时看着你。
**它具有可扩展性吗?**
你从未写过的代码拥有无限的可扩展性。零 bug,零 CVE,自诞生以来 100% 的正常运行时间。
**为什么叫“ponytail”(马尾辫)?**
你完全清楚为什么。
## 赞助商
## 许可证
[MIT](LICENSE)。最短且有效的开源许可证。
## Star 历史
标签:AI智能体, AI辅助编程, Claude, CVE检测, MITM代理, SOC Prime, 代码优化, 开发工具, 提示词工程, 暗色界面, 策略决策点, 自定义脚本