An open-source plugin by Dietrich Gebert (
DietrichGebert/ponytail).
What it does
You ask for a date picker. Your agent installs flatpickr, writes a wrapper component, adds a stylesheet, and starts a discussion about timezones. The browser already ships one.
<!-- ponytail: browser has one -->
<input type="date">
“You know him. Long ponytail. Oval glasses. Has been at the company longer than the version control. You show him fifty lines; he looks at them, says nothing, and replaces them with one.” Ponytail puts him inside your AI agent.
The point is not token count. From the README: “The rule was never ‘fewest tokens.’ It is: write only what the task needs, and never cut validation, error handling, security, or accessibility. The code ends up small because it is necessary, not golfed.”
What you can do
examples/ holds real model output, verbatim from benchmark runs — the same task answered by the same model (Claude Haiku 4.5) with and without the skill.
| Example | Without (LOC) | With (LOC) |
|---|---|---|
| Email Validation | 75 | 3 |
| Debounce | 116 | 10 |
| CSV Sum | 20 | 3 |
| Countdown Timer | 267 | 9 |
| Rate Limiting | 128 | 10 |
Asked to deep clone an object, the bare agent reaches for npm install lodash and cloneDeep, or the “classic hack” of JSON.parse(JSON.stringify(original)). With ponytail:
// ponytail: structuredClone does this
const copy = structuredClone(original);
These are not hand-written — reproduce them with npx promptfoo@latest eval -c benchmarks/promptfooconfig.yaml.
Grounded in the DietrichGebert/ponytail README and examples/README.md.
Key features
-
The seven-rung ladder
“Before writing code, the agent stops at the first rung that holds”:
- Does this need to exist? → no: skip it (YAGNI)
- Already in this codebase? → reuse it, don’t rewrite
- Stdlib does it? → use it
- Native platform feature? → use it
- Installed dependency? → use it
- One line? → one line
- Only then: the minimum that works
“The ladder runs after it understands the problem, not instead of it: it reads the code the change touches and traces the real flow before picking a rung. Lazy about the solution, never about reading.”
-
Lazy, not negligent
Trust-boundary validation, data-loss handling, security, and accessibility stay. On the adversarial safety tier ponytail holds 100% while a bare “YAGNI + one-liners” prompt drops to 95%.
-
Four intensity levels
/ponytail lite | full | ultra | offsets the intensity or turns it off; no argument reports the current level. No config file is required — an optional~/.config/ponytail/config.jsonor thePONYTAIL_DEFAULT_MODEenv var can set the default. -
Six commands
Command What it does /ponytail [lite | full | ultra | off]Set the intensity, or turn it off /ponytail-reviewReview the current diff for over-engineering, hands back a delete-list /ponytail-auditAudit the whole repo, not just the diff /ponytail-debtHarvest the ponytail:shortcuts you’ve deferred into a ledger/ponytail-gainShow the measured impact scoreboard from the benchmark /ponytail-helpQuick reference for the commands above -
A benchmark you can reproduce
benchmarks/ships the runner and the write-ups. The headline measurement is “a headless Claude Code session editing tiangolo’s full-stack-fastapi-template (a real FastAPI + React repo), scored on thegit diffit leaves behind.”vs no-skill baseline LOC tokens cost time safe ponytail -54% -22% -20% -27% 100% caveman (terse-prose control) -20% +7% +3% +2% 100% “YAGNI + one-liners” prompt -33% -14% -21% -30% 95% -
Around 20 agents
Claude Code, Codex, GitHub Copilot CLI, Gemini CLI, OpenCode, Hermes Agent, Devin CLI, Qoder, pi, Swival, CodeWhale, OpenClaw and more. Commands “need a skill-capable host”; instruction-only adapters get the always-on ruleset without them.
Setup
Add the marketplace, then install. “You have to send two separate prompts for the install to work.”
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
The same two commands work in the Claude Code Desktop app’s Code tab, or use the + button next to the prompt box → Plugins → Add plugin.
Then set the level or review what you have:
/ponytail ultra
/ponytail-review
For Codex, install and then “open /hooks, review and trust its two lifecycle hooks, and start a new thread.”
codex plugin marketplace add DietrichGebert/ponytail
codex plugin add ponytail@ponytail
OpenCode takes it in opencode.json:
{ "plugin": ["@dietrichgebert/ponytail"] }
Notes
nodemust be on your PATH — “The Claude Code and Codex plugins run two tiny Node.js lifecycle hooks… (note for Nix/nvm users: it must be on the non-interactive shell’s PATH). If it isn’t, the skills still work, the always-on activation just stays quiet instead of erroring on every prompt”- Send the install commands separately — pasting both at once does not install
- Read the numbers with their setup — -54% is the mean across 12 feature tasks (Haiku 4.5, n=4). “It reaches 94% where an agent over-builds (a date picker) and is near zero where the code is already minimal”
- Cost can go the other way on some models — “Lower cost and latency are a side effect on the models that follow the ladder; a terse reasoning model that spends thinking tokens deliberating the rungs can go the other way (on GPT-5.5 it does)”
- The author retracted the earlier headline figure — the original single-shot benchmark reported 80-94%; issue #126 pointed out the bare-model baseline pads its answer with prose and options, so the agentic numbers above are “the corrected, defensible version”
- Pairs with caveman — caveman shrinks the prose, ponytail shrinks the build. The caveman control numbers above come from ponytail’s own benchmark
- No config file needed — install and it works
- License — “MIT. The shortest license that works.”