@quillllllll/ponytail
v5.0.0
Published
Lazy senior dev mode for AI agents. The best code is the code you never wrote.
Downloads
115
Maintainers
Readme
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.
Before / after
You ask for a date picker. Your agent installs flatpickr, writes a wrapper component, adds a stylesheet, and starts a discussion about timezones.
With ponytail:
<!-- ponytail: browser has one -->
<input type="date">More survivors in examples/.
Numbers
The honest measurement is a real agent doing real work: a headless Claude Code session editing tiangolo's full-stack-fastapi-template (a real FastAPI + React repo), scored on the git diff it leaves behind. Twelve feature tickets, the same agent with and without the skill, n=4, Haiku 4.5.
| 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% |
ponytail is the only arm that cuts every metric, and the only one that stays fully safe while doing it. The cut is biggest where there is a real over-build trap (date picker 404 to 23 lines, color picker 287 to 23, because it reaches for a native <input> instead of a component) and near zero on code that is already minimal. Full method, per-task tables, and limitations: benchmarks/results/2026-06-18-agentic.md.
Five everyday tasks, three models, three arms (no skill, caveman, ponytail), ten runs, median reported. One prompt, one completion, counting lines of the answer:
This showed 80-94% less code. #126 fairly pointed out that the bare-model baseline pads its answer with prose and options, so that gap is partly a conversational-baseline artifact. The agentic numbers above are the corrected, defensible version. Reproduce the single-shot run with npx promptfoo eval -c benchmarks/promptfooconfig.yaml.
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. 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).
How it works
Before writing code, the agent stops at the first rung that holds:
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 worksThe 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 are never on the chopping block.
Install
The most effort ponytail will ever ask of you:
OpenCode
Add to opencode.json:
{ "plugin": ["@quillllllll/ponytail"] }Run from a checkout instead (the plugin reuses hooks/ and skills/):
{ "plugin": ["./.opencode/plugins/ponytail.mjs"] }Injects the ruleset every turn at the active level; adds the /ponytail commands (see Commands). OpenCode also auto-loads this repo's AGENTS.md, so the rules hold even without the plugin. The plugin adds the lite/full/ultra/off levels.
The ./ path resolves against your project's opencode.json; to share one checkout across projects, point it at the absolute path of the .mjs instead (it finds its hooks/ and skills/ relative to its own file).
Uninstall
Remove the "plugin" entry from your opencode.json, then npm uninstall @quillllllll/ponytail if you installed from the registry.
That leaves two small state files outside the project: the mode flag (~/.config/opencode/.ponytail-active) and the optional default-level config (~/.config/ponytail/config.json). Run node scripts/uninstall.js to clean them up — before removing the package, since the script ships inside it.
Commands
| Command | What it does |
|---------|--------------|
| /ponytail [lite \| full \| ultra \| off] | Set the intensity, or turn it off. No argument reports the current level. |
| /ponytail-review | Review the current diff for over-engineering, hands back a delete-list. |
| /ponytail-audit | Audit the whole repo for over-engineering, not just the diff. |
| /ponytail-debt | Harvest the ponytail: shortcuts you've deferred into a ledger, so "later" doesn't become "never". |
| /ponytail-gain | Show the measured impact scoreboard (less code, less cost, more speed) from the benchmark. |
| /ponytail-help | Quick reference for the commands above. |
All six commands ship as .opencode/command/*.md; the plugin registers them automatically.
Development
npm testThe correctness benchmark spawns Python for email and CSV checks (python3 tried before python). CSV checks need pandas: CI installs it, local runs without it skip those cases.
FAQ
Can I use it with caveman? Yes, and you should. Caveman shrinks what the agent says; ponytail shrinks what it builds. Different halves, no overlap: caveman leaves code byte-for-byte exact, ponytail stays out of the prose. Terse talk about minimal code.
Does it need a config file?
No. An optional ~/.config/ponytail/config.json or PONYTAIL_DEFAULT_MODE env var can set the default level, but nothing is required.
What if I really need the 120-line cache class? You don't. Insist anyway and he'll build it. Slowly. Correctly. While looking at you.
Does it scale? The code you never wrote scales infinitely. Zero bugs, zero CVEs, 100% uptime since forever.
Why "ponytail"? You know exactly why.
Sponsors
License
MIT. The shortest license that works.
