一款 AI agent 技能模板,通过让模型克制写代码来减少 54% 代码量(最高 94%),同时保留安全护栏,适用于 Claude Code 等 Agent 场景。
他一言不发。只写一行代码。它能跑。
减少约 54% 代码(最高 94%)· 节省约 20% 成本 · 提速约 27% · 100% 安全 基于真实 Claude Code 会话编辑真实开源仓库(FastAPI + React)的实测数据,对比同配置无 skill 的智能体。~54% 为 12 个功能任务均值(Haiku 4.5,n=4);在智能体过度构建的场景(日期选择器)可达 94%,在代码本身已足够精简时接近零。ponytail 保留了所有安全护栏,而裸「写一行」提示词则会丢掉其中一部分。(此前单次基准测试报告 80-94% 为扁平数字;以公平的有 agent 基准对比,该数字是每任务天花板,而非平均值。)完整报告 · 复现方法。

你认识这种人。长长的马尾。椭圆眼镜。在公司待的时间比版本控制还久。你给他看五十行代码;他扫一眼,什么也不说,用一行替换掉。
Ponytail 把这种人装进你的 AI 智能体。
你需要一个日期选择器。你的智能体安装了 flatpickr,写了一个封装组件,加了样式表,然后开始讨论时区问题。
<!-- ponytail: 浏览器自带一个 -->
<input type="date">
更多案例见 examples/。
诚实的测量方式是:让真实智能体做真实工作:在 headless Claude Code 会话中编辑 tiangolo 的 full-stack-fastapi-template(一个真实的 FastAPI + React 仓库),以留下的 git diff 打分。12 张功能工单,同配置智能体有/无 skill 各跑一次,n=4,Haiku 4.5。
ponytail 是唯一一条在所有指标上都有削减、且在此过程中保持完全安全的路径。削减幅度最大的是存在真实过度构建陷阱的地方(日期选择器从 404 行减至 23 行,颜色选择器从 287 行减至 23 行,因为它会优先使用原生 <input> 而非组件);在代码本身已足够精简的地方削减幅度接近零。完整方法、各任务明细和局限性:benchmarks/results/2026-06-18-agentic.md。
五个日常任务,三个模型,三条路径(无 skill、caveman、ponytail),十次运行,报告中位数。一次提示、一次完成,计算答案的行数:
这显示了减少 80-94% 代码。#126 合理地指出,裸模型基准会在答案中填充散文和选项,所以差距部分来自对话基准的人工加成。上述有 agent 的数字是修正后可辩护的版本。用 npx promptfoo eval -c benchmarks/promptfooconfig.yaml 复现单次运行。
规则从来不是「最少 token」。而是:只写任务所需,不削减任何校验、错误处理、安全性或可访问性。代码最终之所以少,是因为它必要,而非精简。紧随其后的模型成本和延迟降低是附带效果;但遵循阶梯顺序的简洁推理模型若花费思考 token 推敲每一级,反而可能走向反面(GPT-5.5 上确实如此)。
在写代码之前,智能体在第一级满足的地方停下来:
1. 这个需要存在吗? → 不:跳过它(YAGNI)
2. 代码库里已有吗? → 复用,不要重写
3. 标准库有吗? → 用它
4. 平台原生特性? → 用它
5. 已安装的依赖? → 用它
6. 一行能搞定? → 一行
7. 只有这时:写能工作的最小代码
阶梯是在理解问题之后才运行的,而不是替代理解:它阅读本次变更涉及的代码,追踪真实流程,再选择在哪一级停下。对解决方案懒,对阅读不懒。
懒,但不是疏忽:信任边界校验、数据丢失处理、安全性和可访问性绝不在刀下。
ponytail 要求你付出的最大努力:
Claude Code 和 Codex 插件运行两个微小的 Node.js 生命周期钩子,所以 node 需要在 PATH 上(给 Nix/nvm 用户的提示:它必须在非交互式 shell 的 PATH 上)。如果没有,skill 仍然可用,始终开启的激活只是静默跳过而不是每次提示都报错。
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
(需要分开发送两个提示才能完成安装)
在 Claude Code Desktop 应用的 Code 标签页中同理:在提示框中输入上述两个 /plugin 命令,或点击提示框旁的 + 按钮,选择 Plugins → Add plugin 浏览已配置的市场,从中添加插件;在侧边栏的 Customize 中管理市场。
codex plugin marketplace add DietrichGebert/ponytail
codex plugin add ponytail@ponytail
运行 codex 并打开 /hooks,审查并信任其两个生命周期钩子,然后开启新对话。
同样的安装步骤也适用于 Codex 桌面应用:安装后重启应用,插件即可生效。
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 install git:github.com/DietrichGebert/ponytail
添加到 opencode.json:
{ "plugin": ["@dietrichgebert/ponytail"] }
从 checkout 目录运行(插件会复用 hooks/ 和 skills/):
{ "plugin": ["./.opencode/plugins/ponytail.mjs"] }
每个回合在当前层级注入规则集;添加 /ponytail 命令(见 Commands)。OpenCode 也会自动加载本仓库的 AGENTS.md,所以即使没有插件,规则依然生效。插件添加了 lite/full/ultra/off 级别。
./ 路径相对于项目的 opencode.json 解析;若要跨项目共享一个 checkout,改为指向 .mjs 的绝对路径(它会相对于自身文件定位 hooks/ 和 skills/)。
gemini extensions install https://github.com/DietrichGebert/ponytail
将规则集作为始终开启的上下文在每个会话加载,并注册 /ponytail 命令;skills/ 也一并提供,在任务需要时激活。Gemini 适配器有意不推送根 hooks/hooks.json:Gemini 会自动加载该路径,而 Ponytail 的生命周期钩子使用 Claude/Codex 事件名称。
Qoder 会从仓库根目录自动加载 AGENTS.md 作为始终开启的上下文,所以从 checkout 目录运行 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/ 目录。
要获得完整的插件级支持(自动模式激活 + 每次 prompt 时注入规则集),请将 hooks/qoder-hooks.json 中的 hooks 添加到你的 .qoder/settings.json 中。将 PONYTAIL_DIR 替换为你的 ponytail 检出路径。Qoder 的 UserPromptSubmit hook 在首次 prompt 时激活默认模式,并在每轮注入规则集;带有 task|Task 匹配器的 PreToolUse 将规则集注入子智能体。级别切换(/ponytail lite|full|ultra|off)自动工作。
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 扩展安装仍然有效。要将其作为始终在线的规则运行,请将规则集放入 .agents/rules/。
hermes plugins install DietrichGebert/ponytail --enable
安装后重启 Hermes。该插件在每个 LLM turn 前注入活跃的 Ponytail 模式,将捆绑的技能注册为 ponytail:<skill>,并添加 /ponytail、/ponytail-review、/ponytail-audit、/ponytail-debt、/ponytail-gain 和 /ponytail-help。在共享网关上,使用 Hermes 斜杠命令访问控制将 /ponytail 限制为可信用户;运行时模式是进程本地的。
从项目根目录读取 AGENTS.md,零配置。将 AGENTS.md 复制到你的项目,或从本仓库的克隆中运行 codewhale。就这样。
先将收集暂存到库中,然后添加你需要的技能:
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 plugins install DietrichGebert/ponytail
将 ponytail 作为 Devin 插件安装;技能可通过 /ponytail:ponytail、/ponytail:ponytail-review 等方式调用。
clawhub install ponytail
将 ponytail 作为 OpenClaw 技能从 ClawHub 安装;review、audit、debt、gain 和 help 技能的安装方式相同(clawhub install ponytail-review 等)。OpenClaw 将其应用于编码任务,并将其作为 /ponytail 命令暴露。若无 ClawHub,可将 .openclaw/skills/ponytail 复制到 ~/.openclaw/skills/。
grok plugin install DietrichGebert/ponytail --trust
启用插件(默认关闭):/plugins → Plugins → Space on ponytail,或在 ~/.grok/config.toml 中:
[plugins]
enabled = ["ponytail"]
启动一个新会话(或重新加载插件)。技能显示为 /ponytail、/ponytail-review、/ponytail-audit、/ponytail-debt、/ponytail-gain、/ponytail-help。用 grok inspect 验证。Grok 可根据技能描述自动调用 ponytail 处理编码任务;当需要显式激活时,使用 /ponytail(或 /ponytail lite、/ponytail full、/ponytail ultra)。不使用 Grok 生命周期 hook,因为它们的 SessionStart 输出无法注入指令。
AGENTS.md 仍可从克隆中以仅指令模式工作,就是这样。他会为此感到骄傲。他不会说出来的。
每个会话都处于活跃状态,有少量命令可用(见 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 编辑器扩展,不是独立 Copilot CLI,相关内容在 Install 下)、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。此路径保持始终在线指导,但不添加插件模式切换或 hook。
VS Code 配合 Codex 扩展读取 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)从工作目录和父目录读取 AGENTS.md 直至 $HOME,本仓库附带该文件,因此无需设置即可使用(~/.config/amp/AGENTS.md 可全局工作)。
Jules(Google)从仓库根目录读取 AGENTS.md,本仓库附带该文件,因此可自动拾取规则集。
哪些文件映射到哪些智能体:Agent portability。
这些会移除插件自身的文件,但会留下 ponytail 在插件文件夹外写入的少量状态:模式标志、~/.config/ponytail/config.json,以及(如果你接受了设置提示)~/.claude/settings.json 中的 statusLine 条目。运行 node scripts/uninstall.js 进行清理。在上述主机移除命令之前运行它——该脚本本身是插件文件,因此先删除插件会将其删除(或从本仓库的单独克隆中运行)。只有当 statusLine 指向 ponytail 自身的脚本时才会移除该条目,因此你自己设置的 statusline 不受影响。
命令需要一个支持技能的宿主(Claude Code、Codex、Devin CLI、OpenCode、pi、Swival、Hermes Agent、Qoder、Grok Build)。在 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 检查;先尝试 python3 再尝试 python。CSV 检查需要本地安装 pandas。
能否与 caveman 一起使用?可以,而且你应该这样做。caveman 缩小智能体所说的内容;ponytail 缩小它构建的内容。不同的一半,不重叠:caveman 保持代码字节精确,ponytail 远离散文。简洁地谈论最小化代码。
需要配置文件吗?不需要。可选的 ~/.config/ponytail/config.json 或 PONYTAIL_DEFAULT_MODE 环境变量可以设置默认级别,但不需要任何内容。
如果我真的需要那个 120 行的缓存类呢?你不需要。仍然坚持,他会构建它。慢慢地。正确地。同时看着你。
它能扩展吗?你从未编写的代码无限扩展。零 bug,零 CVE,自远古以来 100% 运行时间。
为什么是"ponytail"?你完全知道为什么。
MIT。最短且有效的许可证。