Ponytail 一眼看完
- 它的本体就是一段提示词:skills/ponytail/SKILL.md 就是全部规则,Claude Code 插件只是把这段提示词自动装进每个会话的壳。
- 安装是先后两条独立指令,顺序不能省:/plugin marketplace add DietrichGebert/ponytail,然后 /plugin install ponytail@ponytail。
- 三档强度——lite、full(默认)、ultra——用 /ponytail lite、/ponytail ultra 切换,用 /ponytail off 关掉。
- 它不只管「少写代码」:/ponytail-review 审改动,/ponytail-audit 给整个仓库排优先级,/ponytail-debt 把被推迟的捷径收集成台账。
DietrichGebert/ponytail — README
来源GitHubchecked 2026-11-12
skills/ponytail/SKILL.md — the prompt itself
来源GitHubchecked 2026-11-12
INSTALL.md — per-agent install steps
来源GitHubchecked 2026-11-12
skills/ponytail-help/SKILL.md — levels, band, defaults
来源GitHubchecked 2026-11-12
benchmarks/results/2026-10-07-agentic.md
来源GitHubchecked 2026-11-12
dsh-ponytail — DeepSeek Harness port (unofficial)
来源deepseekharnessplugins.comchecked 2026-11-12
本页所有指令、档位名、配置项与数字,都是 2026-11-12 从上游仓库里读出来的。斜杠指令故意不翻译——翻译过的指令是跑不起来的。
仓库数据取自 2026-11-12 的 GitHub API:189,276 星、10,531 个 fork、创建于 2026-06-12、最新版本 v5.3.3 发布于 2026-10-29。星数每天在动,请把它当快照而不是常数。
一步步装好并用上 Ponytail
- 1
先搞清楚你要装的是什么
Ponytail 是 Dietrich Gebert 以 MIT 许可发布在 github.com/DietrichGebert/ponytail 的一套编码 agent 规则。核心只有一个提示词文件 skills/ponytail/SKILL.md,仓库里其他东西都是为了把这段提示词装进某个具体的 agent。Claude Code 插件是「常驻」那条路:装上之后每个会话都生效,另外还会加一个状态栏徽标和一组 /ponytail-* 指令。
README 明确说了:这套阶梯是在 agent 理解完问题之后才用的,不是用来替代理解。对方案偷懒,绝不对读代码偷懒。
- 2
检查前置条件
你需要一个带 /plugin 指令的 Claude Code 版本,以及 PATH 上的 Node.js。这个插件会跑两个很小的 Node.js 生命周期钩子;没有 node 时技能照样能用,但每次钩子调用都会打出一句无害的 node: command not found。用 Nix 或 nvm 的人注意:node 必须出现在非交互 shell 的 PATH 里,只在交互 shell 里有是不够的。
指令
node --version如果 /plugin 根本不被识别,说明你的 Claude Code 太旧了,先更新再重启,别急着往下走。
- 3
添加市场——第一条指令
在 Claude Code 里发这条。它把这个仓库注册成一个名为 ponytail 的插件市场,此时还没有安装任何东西。
指令
/plugin marketplace add DietrichGebert/ponytail仓库自带 .claude-plugin/marketplace.json,所以直接写 owner/repo 就够了,既不用 URL 也不用本地路径。
- 4
安装插件——第二条指令
这条要单独发一次。格式是 plugin@marketplace,所以 ponytail@ponytail 的意思是「从名为 ponytail 的市场里装名为 ponytail 的插件」。INSTALL.md 写得很直白:必须分两次发,安装才会生效——把两条合成一条消息,是这类安装失败最常见的原因。
指令
/plugin install ponytail@ponytail在 Claude Code 桌面版的 Code 标签页里,你可以把同样两条指令打进输入框,也可以点输入框旁边的 + → Plugins → Add plugin,从已配置的市场里浏览。
- 5
确认它真的生效了
不带参数跑一次 /ponytail。如果它本来是关的,会按默认档位打开;如果已经开着,就回报当前档位。启动文字和切换档位的提示也会显示当前模式,状态栏徽标会在整个会话里一直标着。
指令
/ponytail一个顺手的功能验证:故意要一个明显会被过度设计的东西,比如日期选择器,看 agent 会不会先去找仓库里现成的 Input 组件和浏览器原生选择器,再决定写不写。
- 6
选一个档位
lite 只做你要求的事,并用一行点出更小的方案让你自己选。full 是默认档:走阶梯,逻辑需要的地方留一个小测试,回答里说明跳过了什么。ultra 还会在动手前质疑需求本身。档位会一直保持,直到你改掉它或会话结束。
指令
/ponytail lite/ponytail full/ponytail ultra/ponytail off另外两条退出的路:直接说 stop ponytail 或 normal mode,或者跑 /ponytail off。
- 7
用同一套规则审一次改动
/ponytail-review 不是 linter。它会读你的改动所触及的代码,而不只是看 diff,并按这个顺序报告:正确、安全、扛得住真实负载、有测试、够快、够精简。每条结论都必须写清这段代码做什么、会出什么问题、怎么修、不修会怎样。想缩小或扩大范围,就用大白话点个目标。
指令
/ponytail-review/ponytail-review staged/ponytail-review branch不给目标时,它审未提交的改动;如果工作区是干净的,就审最后一次提交。
- 8
盘整个仓库,把欠账收起来
/ponytail-audit 把同一套检查跑遍整个仓库:先摸清入口和数据流向,假定一个负载水平并说明假定了什么,然后给结论排优先级,告诉你先修哪个。/ponytail-debt 把 agent 故意留下的 shortcut: 注释收进一份台账,免得「以后再说」悄悄变成「永远不说」。
指令
/ponytail-audit/ponytail-debt注释格式是固定的:shortcut: <限制是什么>, <什么时候该升级>。正因为它固定,欠账才收得起来。
- 9
设一个默认档,并且保持更新
有两种办法改「每个新会话的起始档位」:环境变量 PONYTAIL_DEFAULT_MODE,或者 ~/.config/ponytail/config.json 里的 defaultMode 字段。解析顺序是环境变量、配置文件、full。要更新的话,从 /plugin → Marketplaces → ponytail 打开一次自动更新,或者手动刷新再重载。
指令
export PONYTAIL_DEFAULT_MODE=ultra/plugin marketplace update ponytail/reload-plugins要卸载,先跑插件自带的 node scripts/uninstall.js,再执行 /plugin remove ponytail——那个脚本本身就是插件文件,先删插件它就没得跑了。
阶梯:Ponytail 真正改的东西
行为上的全部变化就是一道决策阶梯。动手写代码之前,agent 停在第一个「完全够用」的台阶上:
- 1这东西有必要存在吗?没人要的功能、选项和灵活性直接跳过,并用一行点出来。一句含糊的「帮我做个 X」,只给能做核心工作的最小版本。
- 2这个代码库里已经有了吗——现成的 helper、组件、服务、写法?按周围代码的用法直接用。
- 3标准库或平台特性能不能做?能用就用,除非项目自己有比原生控件更合适的自家组件。
- 4已安装的依赖里有没有?有就用。绝不为几行代码新增一个依赖。
- 5能不能写成一行、让人一眼看懂?那就一行。
- 6以上都不行:写能跑通的最小代码——如果里面有分支、循环、解析器、钱或安全,就再留一个小测试或基于 assert 的自检。
它明确永不削减的部分
这条规则是「只写任务需要的东西」,不是「写得越少越好」。提示词里点名了五样东西,任何档位都不动:
- 信任边界上的校验。
- 能防止数据丢失的错误处理。
- 安全。
- 无障碍。
- 用户明确要求的东西,以及真实硬件需要的校准。
变化的另一半在回答里。每次回答都以一两行结尾:跳过了什么、没检查什么、有什么风险你需要知道。正是这一点,让更小的 diff 显得可信,而不是可疑。
全部指令,以及各自做什么
Ponytail 加了八条指令。后四条是「以为它只是个写作风格」的人最常漏掉的部分。
/ponytail [lite | full | ultra | off]设置强度或关闭。不带参数时:如果本来是关的就按默认档打开,否则回报当前档位。/ponytail band [on | off]仅 Claude Code:隐藏或显示输入框上方的那条 band。不带参数是切换;档位不受影响。/ponytail band import仅 Claude Code:把你过去的 Claude Code 会话连同成本、agent 耗时和 token 数加进本地看板。/ponytail-review像那个线上炸了会被叫醒的资深工程师一样审当前改动:bug、安全、真实负载、没测试的危险代码、慢路径,以及哪里可以砍。可以用大白话给目标:uncommitted、staged、branch 或一个 PR 链接。/ponytail-audit把同一套检查跑遍整个仓库,按重要性排序。/ponytail-debt把你推迟掉的 shortcut: 注释收进台账,别让「以后」变成「永不」。/ponytail-gain显示作者基准测试里那份实测影响记分板。/ponytail-help一张一次性的速查卡,讲档位、技能和指令。它不切换模式,也不写入任何东西。
其他 agent,以及 DeepSeek Harness 移植版
提示词是可移植的,仓库里为一大串宿主准备了适配层。最要紧的三个:
- 1Codex:先 codex plugin marketplace add DietrichGebert/ponytail,再 codex plugin add ponytail@ponytail,然后在 Codex 里打开 /hooks,信任它的两个生命周期钩子,开一个新线程。在 Codex 里这些指令是带命名空间的技能,要用 $ponytail:ponytail-review 这种写法调用。
- 2Cursor:git clone 仓库,然后跑 node ponytail/scripts/cursor-hooks.js install。它会把两个原生钩子合并进 ~/.cursor/hooks.json,你原有的钩子保持不动。切换档位靠直接发一条 /ponytail lite 这样的普通消息;子 agent 永远拿不到这套规则,因为 Cursor 的 subagentStart 无法注入上下文。
- 3其他任何 agent:npx skills add DietrichGebert/ponytail 会把六个技能复制进该 agent 的技能目录;把 AGENTS.md 复制进项目,则能在不用任何插件机制的情况下拿到常驻规则。
- 4DeepSeek Harness 用户有一个非官方移植版 dsh-ponytail,它的技能同样改编自这个仓库,遵循 MIT 许可。它是第三方改编,不是 Dietrich Gebert 发布的,所以它的行为由移植者负责。
公开的数字,以及该怎么读
README 一上来就是大幅缩减的数字。它们全部出自仓库里的同一个文件 benchmarks/results/2026-10-07-agentic.md,描述的是同一种设置:headless 模式的 Claude Code、Opus 5.5、默认 effort、Claude Code CLI 2.1.288、39 个任务、每个任务每组 5 次运行、共 585 个会话。这里不声称有任何独立复现。
- 1代码行数:相对无技能基线 -53%,95% bootstrap 区间为 -63% 到 -41%。输出 token -45%,成本 -26%,耗时 -41%。
- 2正确性没有退步:在 18 个带隐藏检查的任务上,Ponytail 5 过了 90 次里的 87 次,无技能是 86 次。六个安全任务上,三组都是 30 次全过。
- 3测试是变多而不是变少:需要测试的地方留下测试的比例是 98%,无技能为 68%;agent 自己写的测试抓出了 66% 的注入 bug,无技能为 46%。
- 4回答在盲评中更受欢迎:对上一版是 110 比 67,评判标准是这条回答有没有把评审者必须知道的事说清楚。
- 5任务构成很关键:12 个真实 FastAPI + React 仓库里的功能工单、18 个带隐藏检查的精细任务、6 个「给我做个小应用」和 3 个「给我看个例子」。每组都禁用了 Bash,所以测的是 agent 写出来的东西,不是它能不能调通。
请把这些数字读成「作者用自己的任务集、测自己的工具」。它是一份记录得相当完整的基准测试——有逐任务表格、置信区间,还专门说明了早期测试环境的一个隔离缺陷——但它不是第三方审计,也不保证你的仓库会看到同样的百分比。
装之前该知道的边界
Ponytail 是一段提示词。没有任何东西强制执行它,而且有几件事值得在它进入团队仓库之前弄清楚。
- 1它是第三方项目,不是 Anthropic 的产品。MIT 许可,由一个人维护;README 提醒说它从不附带 .exe 或 .dll 文件,带这些文件的副本不是他发的。
- 2它是引导,不是闸门。模型照样可能过度设计;如果某个任务的最小解本来就一目了然,差距会接近零——阶梯真正值钱的地方,是 agent 本来会自己造结构的那些任务。
- 3band 和 board 只在 Claude Code 里有,需要 Claude Code 2.1.290 或更新,而且在 VS Code 聊天面板、云会话和 claude -p 里都不显示。会话数据默认留在本地的 ~/.config/ponytail/band/,除非你自己去配那个可选的 webhook。
- 4有些宿主会丢功能。没有生命周期钩子的宿主(Gemini CLI、Qwen、Antigravity、Goose)档位无法跨会话保持;Cursor 的子 agent 永远拿不到规则;只装规则文件的适配方式连指令都没有。
- 5它会在插件目录之外留下状态:一个模式标记文件、~/.config/ponytail/config.json、一份状态栏脚本副本,还可能在 ~/.claude/settings.json 里加一条 statusLine。只删插件的话,徽标会一直显示最后那个模式。
这些都不说明它不该装——只说明你应该先在自己的仓库里拿真实任务试一次,前几次跑的时候自己读一遍 diff,摸清它到底砍掉了多少,再考虑推到团队。
