DietrichGebert/ponytail

GitHub: DietrichGebert/ponytail

Ponytail 是一款让 AI 编程助手遵循「最少代码」原则的技能插件,通过阶梯式决策规则减少不必要的代码生成和资源消耗。

Stars: 94245 | Forks: 5176

Ponytail, the lazy senior dev

Ponytail

他一言不发。写下一行代码。搞定。

Stars Release npm Works with 20 agents MIT license

DietrichGebert/ponytail | Trendshift DietrichGebert/ponytail | Trendshift

代码减少约 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 · 한국어

Something's coming, join the waitlist

你认识他的。留着长马尾辫。戴着椭圆形眼镜。在公司待的时间比版本控制系统还长。你给他看五十行代码;他看了一眼,什么也没说,然后用一行代码就替换了它们。 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。

Each arm as a percent of the no-skill baseline across LOC, tokens, cost and time (Haiku 4.5). ponytail is lowest on every metric (LOC 46%, tokens 78%, cost 80%, time 73%); caveman rises above 100% on tokens, cost and time; yagni-oneliner LOC 67%. Safety, separate adversarial tier: baseline, caveman and ponytail 100%, yagni-oneliner 95%.

| 对比无技能基线 | 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),运行十次,报告中位数。一个提示词,一次补全,统计回答的行数:

Median lines of code per arm across Haiku, Sonnet and Opus

这里显示了 **代码减少 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”(马尾辫)?** 你完全清楚为什么。 ## 赞助商

GreenPT

## 许可证 [MIT](LICENSE)。最短且有效的开源许可证。 ## Star 历史 Star History Chart
标签:AI智能体, AI辅助编程, Claude, CVE检测, MITM代理, SOC Prime, 代码优化, 开发工具, 提示词工程, 暗色界面, 策略决策点, 自定义脚本