开源项目

ponytail

ponytail

给 AI 编码 agent 注入一套"懒惰资深工程师"思维规则集,通过逐级判断(是否需要写、是否已有、标准库、原生功能、一行代码)让 agent 只产出必要的最简代码。基准测试显示相比无规则基线可减少约 54% 代码、20% 成本和 27% 时间,且不牺牲安全校验,是少数同时优化多指标的方案。支持 Claude Code、Codex、Copilot CLI 等 20 多种 agent 和工具,以插件或规则文件方式接入,MIT 许可。

README

Ponytail,那位懒惰的资深开发

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),与不使用 skill 的同一 agent 对比。约 54% 是 12 个功能任务的均值(Haiku 4.5,n=4);当 agent 存在过度构建(如日期选择器)时可达 94%,在代码已经很精简时接近 0。ponytail 保持了所有安全护栏,而纯粹的“写一行代码”提示词会丢失一个。(早期单次基准测试报告的是 80-94% 的固定数字;对照公平的 agentic 基线,那只是单个任务的上限,并非平均值。)完整报告 · 可复现。

Español · 한국어


有东西要来了,加入等待名单

你认识他。长长的马尾辫。椭圆眼镜。在公司待的时间比版本控制还长。你给他看五十行代码;他看了看,什么也不说,然后用一行代码替换掉。

Ponytail 把他装进你的 AI agent 里。

使用前 / 使用后

你要求一个日期选择器。你的 agent 安装了 flatpickr,写了一个包装组件,加了一份样式表,然后开始讨论时区问题。

使用 ponytail 后:

<!-- ponytail: 浏览器自带 -->
<input type="date">

更多幸存案例见 examples/。

数据

诚实的测量方式是真实 agent 做真实工作:一个无头 Claude Code 会话编辑 tiangolo 的 full-stack-fastapi-template(一个真实的 FastAPI + React 仓库),以其留下的 git diff 作为评分依据。十二个功能工单,同一 agent 带 skill 和不带 skill 对比,n=4,Haiku 4.5。

各 arm 相对无 skill 基线在 LOC、token、成本和时间上的百分比(Haiku 4.5)。ponytail 在所有指标上均为最低(LOC 46%、token 78%、成本 80%、时间 73%);caveman 在 token、成本和时间上超过 100%;yagni-oneliner 的 LOC 为 67%。安全性是独立的对抗性层级:baseline、caveman 和 ponytail 均为 100%,yagni-oneliner 为 95%。

对比无 skill 基线 LOC tokens 成本 时间 安全
ponytail -54% -22% -20% -27% 100%
caveman(简短措辞对照组) -20% +7% +3% +2% 100%
“YAGNI + 一行代码”提示词 -33% -14% -21% -30% 95%

ponytail 是唯一一个在每项指标上都下降、并且全程保持完全安全的 arm。缩减幅度最大之处是存在真实过度构建陷阱的地方(日期选择器从 404 行降到 23 行,颜色选择器从 287 行降到 23 行,因为它选择原生 <input> 而不是组件),在已经精简的代码上则接近零。完整方法、按任务划分的表格和局限: benchmarks/results/2026-06-18-agentic.md。

较早的单次数据(独立生成)

五个日常任务,三个模型,三个 arm(无 skill、caveman、ponytail),十次运行,取中位数。一次提示、一次完成,统计回答的行数:

Haiku、Sonnet 和 Opus 上各 arm 的中位代码行数

结果显示代码量减少 80-94%。#126 公正地指出,裸模型基线用散文和选项填充答案,因此这个差距部分是对话基线的伪影。上面的 agentic 数据是修正后、可辩护的版本。用 npx promptfoo eval -c benchmarks/promptfooconfig.yaml 复现单次运行。

规则从来不是“最少 token”。 而是:只写任务所需要的东西,并且绝不削减校验、错误处理、安全性或可访问性。代码之所以小,是因为它是必要的,而不是被“高尔夫式”压出来的。更低的成本和延迟是那些遵循阶梯的模型的副作用;一个在思考 token 上斟酌每一级的简洁推理模型可能会走向相反方向(在 GPT-5.5 上确实如此)。

工作原理

在写代码之前,agent 会停在第一个成立的阶梯上:

1. 这东西需要存在吗?   → 不需要:跳过(YAGNI)
2. 代码库里已有?       → 复用,不要重写
3. 标准库能做?         → 用它
4. 原生平台特性?       → 用它
5. 已安装的依赖?       → 用它
6. 一行能搞定?         → 写一行
7. 只有这时:写能工作的最小实现

阶梯在它理解问题之后运行,而不是替代理解:它会阅读改动所涉及的代码,追踪真实流程,然后再选择阶梯。对解决方案懒惰,但对阅读从不懒惰。

懒惰而非疏忽:信任边界校验、数据丢失处理、安全性和可访问性永不上砧板。

安装

ponytail 对你的全部要求:

Claude Code 和 Codex 插件运行两个极小的 Node.js 生命周期钩子,所以 node 需要在你的 PATH 中(Nix/nvm 用户注意:它必须在非交互式 shell 的 PATH 中)。如果不在,skill 仍然可用,常驻激活只是保持静默,而不是在每次提示时报错。

Claude Code

/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail

(安装需要分两条提示发送)

同样的步骤也适用于 Claude Code Desktop 应用的 Code 标签页:在提示框里输入上面两条 /plugin 命令,或者点击旁边的 + 按钮,选择 Plugins → Add plugin 来浏览你配置的 marketplace,并通过侧边栏的 Customize 管理 marketplace。

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 命令(见 命令)。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 skill(/ponytail、/ponytail-review、/ponytail-audit、/ponytail-debt、/ponytail-gain、/ponytail-help)可通过 Qoder 的 Skill 系统使用;位于 .qoder-plugin/plugin.json 的插件清单指向 skills/ 目录。

如需完整的插件级支持(自动模式激活 + 每次提示注入规则集),将 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 命令转换为 skill,所以你是把它们输入到聊天中(例如把 /ponytail-review 作为消息发送),而不是从斜杠菜单选择。在迁移完成之前(大约 2026 年 6 月 18 日),gemini extensions install 仍然可用。如果改为作为常驻规则运行,请把规则集放入 .agents/rules/。

Hermes Agent

hermes plugins install DietrichGebert/ponytail --enable

安装后重启 Hermes。该插件会在每次 LLM 轮次前注入当前激活的 Ponytail 模式,将内置 skill 注册为 ponytail:<skill>,并添加 /ponytail、/ponytail-review、/ponytail-audit、/ponytail-debt、/ponytail-gain 和 /ponytail-help。在共享网关中,使用 Hermes 的斜杠命令访问控制将 /ponytail 限制为受信任用户;运行时模式是进程本地的。

CodeWhale

从项目根目录读取 AGENTS.md,零配置。将 AGENTS.md 复制到你的项目,或者从本仓库检出目录运行 codewhale。就这些。

Swival

先在库中暂存该集合,然后添加你需要的 skill:

swival skills add --global https://github.com/DietrichGebert/ponytail  # 暂存到 ~/.config/swival/library
swival skills add ponytail                                             # 把该集合安装到当前项目
swival skills add --global ponytail                                    # 或者在每个项目中激活

Swival 还会从项目根目录读取 AGENTS.md,以及全局的 ~/.config/swival/AGENTS.md,这是仅指令的回退方案。

在命令行中,使用 $ 前缀来显式激活某个 skill。例如:$ponytail-review。

Devin CLI

devin plugins install DietrichGebert/ponytail

将 ponytail 安装为 Devin 插件;skill 以 /ponytail:ponytail、/ponytail:ponytail-review 等形式提供。

OpenClaw

clawhub install ponytail

通过 ClawHub 将 ponytail 安装为 OpenClaw skill;review、audit、debt、gain 和 help skill 的安装方式相同(clawhub install ponytail-review,以此类推)。OpenClaw 会在编码任务中应用它,并把它暴露为 /ponytail 命令。如果没有 ClawHub,将 .openclaw/skills/ponytail 复制到 ~/.openclaw/skills/。

Grok Build

grok plugin install DietrichGebert/ponytail --trust

启用插件(默认关闭):/plugins → Plugins → 在 ponytail 上按空格,或在 ~/.grok/config.toml 中:

[plugins]
enabled = ["ponytail"]

开启新会话(或重新加载插件)。skill 显示为 /ponytail、/ponytail-review、/ponytail-audit、/ponytail-debt、/ponytail-gain、/ponytail-help。用 grok inspect 验证。Grok 可以从 skill 描述中自动为编码任务调用 ponytail;当激活需要显式时,使用 /ponytail(或 /ponytail lite、/ponytail full、/ponytail ultra)。不使用 Grok 生命周期钩子,因为其 SessionStart 输出无法注入指令。

AGENTS.md 在没有插件的情况下,从检出目录仍可作为仅指令方式工作。

就这些。他会为此骄傲。他不会说出来的。

每个会话都会激活,并带有一组命令(见 命令)。/ponytail ultra 用于代码库曾深深伤害过你的场景。启动和模式切换文案会显示当前模式。

用 PONYTAIL_DEFAULT_MODE 环境变量(lite/full/ultra/off)或 ~/.config/ponytail/config.json 中的 defaultMode 字段(Windows 上是 %APPDATA%\ponytail\config.json)为每个新会话设置级别。默认是 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 编辑器扩展,不是 安装 中覆盖的独立 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 可以在 Setting → Tools → Junie → Project Settings → Guidelines Path 中指向后读取 AGENTS.md(目前还不是自动的)。本仓库附带 AGENTS.md;.junie/guidelines.md 是 Junie 的旧路径。

Amp(Sourcegraph)会从工作目录及父目录读取 AGENTS.md(直到 $HOME),本仓库已附带,因此无需配置即可工作(~/.config/amp/AGENTS.md 可全局生效)。

Jules(Google)会从仓库根目录读取 AGENTS.md,本仓库已附带,因此零配置即可加载规则集。

哪些文件映射到哪个 agent:Agent 可移植性。

卸载

主机 命令
Claude Code /plugin remove ponytail
Codex codex plugin remove ponytail
Devin CLI devin plugins remove ponytail
Grok Build grok plugin uninstall 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 自身脚本时才移除该条目,因此你自己设置的 statusline 不会被触碰。

命令

命令 作用
/ponytail [lite | full | ultra | off] 设置强度,或关闭。不带参数时报告当前级别。
/ponytail-review 审查当前 diff 中的过度构建,交回一份删除清单。
/ponytail-audit 审计整个仓库的过度构建,而不仅是 diff。
/ponytail-debt 把您搁置的 ponytail: 快捷方式收进账本,让“以后”不会变成“永不”。
/ponytail-gain 展示基准测试中测得的成效记分牌(更少代码、更低成本、更高速度)。
/ponytail-help 上述命令的快速参考。

命令需要支持 skill 的主机(Claude Code、Codex、Devin CLI、OpenCode、Gemini、pi、Swival、Hermes Agent、Qoder、Grok Build)。在 Codex 中它们是 skill,用 @ 调用(@ponytail-review)。仅指令的适配器(Cursor、Windsurf、Cline、Copilot、Kiro、Antigravity)加载常驻规则集但没有命令。

开发

改变精简规则文本时,保持 agent 副本同步:

node scripts/check-rule-copies.js
npm test

OpenClaw skill 包(.openclaw/skills/)由 skills/ 生成;修改 skill 后重新运行 node scripts/build-openclaw-skills.js,若过期测试套件会失败。要将 skills 发布到 ClawHub,先运行一次 clawhub login,然后运行 node scripts/publish-openclaw-skills.js(它会以 package.json 中的版本发布全部六个;加 --dry-run 可预览)。

正确性基准会启动 Python 执行 email 和 CSV 检查;python3 优先,其次 python。CSV 检查需要本地安装 pandas。

常见问题

我可以把它和 caveman 一起用吗? 可以,而且应该。Caveman 缩短 agent 说的话;ponytail 缩短它构建的东西。不同的半边,互不重叠:caveman 让代码逐字节精确不变,ponytail 不碰措辞。用极简的话讨论极简的代码。

它需要配置文件吗? 不需要。可选的 ~/.config/ponytail/config.json 或 PONYTAIL_DEFAULT_MODE 环境变量可以设置默认级别,但没有任何必需项。

如果我真的需要那个 120 行的缓存类呢? 你不需要。坚持的话他还是会建。慢慢地。正确地。一边看着你。

它能扩展吗? 你从未写过的代码无限扩展。零 bug、零 CVE、从始至终 100% 可用。

为什么叫 “ponytail”? 你懂的。

赞助商

GreenPT

许可证

MIT。最短且够用的许可证。

Star 历史

Star History Chart
开源项目DietrichGebert2026-08-25原文

相关内容