Skip to content
ArceApps Logo ArceApps
ES

Ponytail: The Viral Skill That Teaches You...

21 min read
Ponytail: The Viral Skill That Teaches You...

Related reads on the blog: Inside Superpowers: The Framework That Forces AI to Engineer · Matt Pocock Skills: The Swiss Army Knife of Small Composable Skills · Power Up Your AI Agents with Skills: From Gemini to Copilot · Dynamic Context: The Hidden Cost of Always-On Skills · AI Code Reviews: Reviewing Code Generated by Agents

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. Replaces them with one. It works. Nobody knows how, but the system has not paged anyone at 3 AM in three years, and he goes home on time. When you ask him which framework he used, he gestures vaguely at “whatever was already there.” And if you insist, he shows you his ~/.ponytail/config.json with a single line: defaultMode: full.

That is Ponytail, the repository by DietrichGebert on GitHub, and its virality story is one of the most curious of the month. Published on June 12, 2026 —barely six days ago— it has already racked up 33,968 stars, 1,541 forks, 51 open issues and 9 published releases. midudev shared it on LinkedIn, where it became the topic of the day among developers programming with agents. It hit r/ClaudeCode with nearly two thousand upvotes, climbed to the front page of GitHub Trending, and —most importantly— raised an uncomfortable question: do we actually want our agents to write less code, or do we just want them to look like they do?

In this article I am going to do what you do not see on LinkedIn: read the entire repository, mentally run its benchmarks, contrast the official numbers with the published criticism, and, above all, explain where it lies, where it is right, and when you actually want to install this thing in your own workflow.

Honesty note: every piece of technical information in this article is verified against the GitHub API and the repository’s raw files as of June 18, 2026. Numbers change fast (hundreds of stars per day); what does not change is the skill’s mechanics, the published benchmarks, and the criticism I cite. Where I am uncertain, I will say so.

The context: why AI agents over-engineer by default

If you have spent months programming with Claude Code, Codex, Cursor, Cline or Windsurf, you know the scene. You ask for an email validator and you get a 27-line class with a wrapper, a regex that breaks, and, if you are unlucky, a discussion about Unicode. You ask for a counter and they build you a dashboard with animations. You ask for a cache and they construct a 120-line class with TTL, eviction policy and concurrency tests. What you wanted was lru_cache. What you got was an architecture.

It is not a bug. It is the default behavior of models trained to please. We already covered this in From Copilot to Autonomous Agents: the shift from “suggesting” to “acting” changed the developer’s role, but it also changed the amount of code generated per interaction. Every prompt triggers a “more complete is better” bias that the model will rarely correct on its own.

Recommended read: Effective Context for AI: Prompt Engineering covers the 4 C’s of context (capacity, context, constraints, chain-of-thought) and why putting “be minimalist” in a prompt does not work as well as you think.

This is where Ponytail comes in to do the dirty work: instead of asking the model to be minimalist (which it ignores), it injects a persistent decision ladder the agent walks before writing a single line. This is not prompt engineering. This is a skill —a markdown file with always-on instructions— that survives the entire conversation.

What Ponytail actually is

Ponytail is a plugin and a set of skills for coding agents. Its core, skills/ponytail/SKILL.md, weighs around 5 KB and contains a single idea repeated with surgical precision: before generating code, walk this six-rung ladder and stop at the first rung that holds.

The six-rung ladder

The rule, as it appears in the official SKILL.md, is this:

1. Does this need to exist?    → No: skip (YAGNI)
2. Stdlib does it?             → Use it
3. Native platform feature?    → <input type="date"> > picker lib, CSS > JS, DB constraint > app code
4. Installed dependency?       → Use it. Never add a new one for what a few lines can do
5. Can it be one line?         → One line
6. Only then:                  → The minimum that works

The SKILL.md adds a tagline that defines the character: “The ladder is a reflex, not a research project. Two rungs work → take the higher one and move on. The first lazy solution that works is the right one.”

See the pattern? It is not a checklist the agent has to execute. It is a reflex, a habit injected on every turn. That is why rung 5 (“one line”) comes before rung 6 (“minimum that works”): if it fits in one line, that is the answer. If it does not, move to the next rung. If nothing above works, then you write the minimum.

The canonical example from the README makes it obvious: you ask for a date picker and 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">

Four words and a comment. What you save is not lines: it is PR review, future tech debt, and that 3 AM moment we were talking about at the start.

The four intensity levels

The ladder is not dogmatic. Ponytail ships with four modes the developer controls:

LevelBehaviorWhen to use it
liteBuilds what you asked, but names the lazier alternative in one line. You decide.When you want a soft guardrail and keep the model’s voice.
full (default)The ladder enforced. Stdlib and native first. Shortest diff, shortest explanation.Day-to-day work. Like having a senior at your side.
ultraYAGNI extremist. Deletion before addition. Ships the one-liner and challenges the rest of the requirement in the same breath.When the codebase has wronged you personally.
offOff. The agent returns to its native mode.When you need total freedom or want to compare.

The example from the SKILL.md itself, for “Add a cache for these API responses”, shows the nuances without jargon:

  • lite: “Done, cache added. FYI: functools.lru_cache covers this in one line if you’d rather not own a cache class.”
  • full: @lru_cache(maxsize=1000) on the fetch function. Skipped custom cache class, add when lru_cache measurably falls short.”
  • ultra: “No cache until a profiler says so. When it does: @lru_cache. A hand-rolled TTL cache class is a bug farm with a hit rate.”

Notice the detail: in lite the model follows your request but whispers the alternative. In ultra it challenges you outright. In full it does the right thing and warns you about the debt. The default mode is the voice of a senior who has seen it all, who does not argue with you but also does not build pyramids for you.

The five-skill ecosystem

Ponytail is not just the main mode. The repository publishes five complementary skills:

SkillTriggerFunction
ponytail/ponytail [lite|full|ultra|off]Main mode. Persistent rules every turn.
ponytail-review/ponytail-reviewCode review focused only on over-engineering. One line per finding with tags (delete:, stdlib:, native:, yagni:, shrink:).
ponytail-audit/ponytail-auditSame as review, but audits the entire repo. Ranked by cut size.
ponytail-debt/ponytail-debtHarvests all ponytail: comments and puts them in a ledger with their complexity ceiling and review trigger.
ponytail-help/ponytail-helpQuick-reference card.

The ponytail-debt idea is the most subtle. When the agent decides “I’ll simplify this with a global lock, not per-account locks”, it leaves a comment in the code:

# ponytail: global lock, per-account locks if throughput matters

Those comments are the seed of the debt. Over time, /ponytail-debt gives you a list of “this stayed short, here is why, here is when to revisit it.” It is the difference between a shortcut with an expiration date and a silent architectural decision. Ponytail turns implicit debt into explicit, harvestable debt.

How it is measured: the benchmarks and their traps

The repository includes a reproducible benchmark with promptfoo that measures four metrics on five everyday tasks: email validation, JavaScript debounce, Python CSV sum, React countdown and FastAPI rate limiting. Three arms (no skill, Caveman, Ponytail), three Claude models (Haiku 4.5, Sonnet 4.6, Opus 4.8), 10 runs per cell. Cost was re-run on June 17 with 30 runs.

ArmLOC (Haiku)LOC (Sonnet)LOC (Opus)
No skill518693256
Caveman11612067
Ponytail394451

Raw numbers: 80-94% less code versus an agent without a skill, across all three models. Cost drops 42-75% and latency shrinks 3-6×. Sounds too good. Let us dissect it.

What the benchmark DOES measure

  • Lines of code generated (code_loc).
  • Cost in USD per task (30 runs, re-verified).
  • Latency in seconds.
  • Correctness gate: the generated code is executed and validated for email, debounce and CSV. For React and FastAPI, validation is structural (regex and keywords), not real execution. This last caveat is included in the repository itself.

What the benchmark does NOT measure

  • Long-term code quality. Reducing LOC is not the same as improving maintainability. Ponytail says so in its README: “the rule was never ‘fewest tokens.’ It is: write only what the task needs, and never cut validation, error handling, security, or accessibility.” But it does not publish metrics on those dimensions.
  • Multi-turn sessions. The benchmark is single-shot: one prompt, one answer. In a real session, the rules get re-injected every turn, which changes the math. The repository’s own issue #121 admits: “ponytail can also raise tool calls and cost on completion-forced tasks.”
  • Local models. The v4.6.0 release published results from Ollama with llama3.2 (3B) and they were… bad. Direct quote: “the lines-of-code win turned out to be noise: one run lands 17% under baseline, the next 50% over, the median shrugs. The skill is tuned for models that actually follow instructions.” It is one of the few repositories that publishes the adverse result.

The criticism you need to know

Colin Eberhardt, CTO of Scott Logic, published on June 16 an article titled “Ponytail? YAGNI!” that takes apart part of the hype. His arguments:

  1. The repository is disproportionate. It has 6,232 lines across 90 files for a ~100-line markdown skill. The irony was captured by a Hacker News commenter: “The repo is bigger than most of the code Ponytail would let me write.”
  2. The benchmark is unfair to the baseline. It counts total output LOC. The baseline sometimes emits multiple options, which spikes the counter. Ponytail emits one.
  3. One of the tasks is flawed by design. The debounce test assumes a DOM, which is not representative of real usage in an agent harness.
  4. Eberhardt reproduced it. Without a skill: 108 LOC. With one example: 16. With YAGNI: 10.4. With “one-liners”: 6.9beats Ponytail on its own benchmark. His conclusion: “Beating Ponytail on its own benchmark with just seven words.”

This is a serious, technical criticism, published with code. I include it here because the ArceApps blog is not built on marketing, and being honest about a tool’s limitations is the only thing that keeps this from becoming another hype cycle. Eberhardt gets one important thing right: Ponytail is not magic, it is a very well-written prompt and packaging. What you do with your own AGENTS.md can be just as good. The difference is that Ponytail ships it packaged, with 14 official adapters and a public benchmark you can audit.

The 14 supported agents: a real Swiss Army knife

Here Ponytail racks up points no competitor matches. The docs/agent-portability.md file lists 14 officially supported hosts:

#HostAdapter type
1Claude CodeFull plugin: .claude-plugin/, commands/, hooks/. Per-session activation, statusline [PONYTAIL] badge.
2CodexPlugin with lifecycle hooks, same skills. Invoked as @ponytail.
3OpenCodeServer plugin in .opencode/plugins/ponytail.mjs. Injects every turn.
4Pi agent harnessExtension package: per-turn injection + commands.
5Gemini CLIgemini-extension.json + AGENTS.md for always-on.
6Cursor.cursor/rules/ponytail.mdc (project rule).
7Windsurf.windsurf/rules/ponytail.md (project rule).
8Cline.clinerules/ponytail.md (project rule).
9GitHub Copilot (editor).github/copilot-instructions.md (repo instruction file).
10GitHub Copilot CLIPlugin + instruction-only fallback.
11Antigravity (Google)AGENTS.md (instruction-tier).
12VS Code + Codex extensionAGENTS.md (instruction-tier; the full plugin adds modes and hooks).
13Kiro.kiro/steering/ponytail.md (steering rule).
14AiderVia AGENTS.md or skills/*/SKILL.md (generic agent).

Note: the README badge says “works with 13 agents”, but the official portability table lists 14. It is a minor discrepancy, probably because the badge groups Aider and Copilot editor as one. It does not affect installation.

The canonical command for Claude Code is:

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

For OpenCode (which is what I use in ArceApps):

{ "plugin": ["./.opencode/plugins/ponytail.mjs"] }

No other skill I know of covers 14 hosts from a single repository. It is the least-discussed aspect, and, to me, the most interesting: Ponytail has solved skill fragmentation between harnesses better than anyone else.

The honest comparison with the rest of the ecosystem

Ponytail does not compete. It coexists. Let us see:

Ponytail vs Caveman

Caveman compresses the agent’s prose, not its code. Its tagline: “Brain still big. Mouth small.” Ponytail’s own SKILL.md admits they are orthogonal: “Ponytail governs what you build, not how you talk (pair with Caveman for terse prose).” In Ponytail’s benchmark, Caveman lands in the middle because it only affects explanations, while Ponytail acts on the code directly. They are the razor and the screwdriver: one shaves words, the other shortens code.

Ponytail vs Superpowers

Superpowers —which we covered in depth in Inside Superpowers— is a complete methodology: brainstorming → spec → plan → TDD → subagent-driven-development → code review. Ponytail is a principle + 4 operational skills. They are as different as comparing the Agile Manifesto with a linter. Superpowers is for big, team-driven projects. Ponytail is for one-shots, scripts, and reducing verbosity.

Ponytail vs your own AGENTS.md

Any developer with time can write the same rules in their AGENTS.md. What you get with Ponytail:

  • Real portability across 14 hosts, without rewriting.
  • Session-controlled mode with /ponytail off or PONYTAIL_DEFAULT_MODE.
  • Public benchmark you can audit and reproduce.
  • Additional skills (review, audit, debt) that activate on-demand.

Ponytail’s own AGENTS.md is the “instruction-tier” version for hosts that do not support full skills (like VS Code with the Codex extension without the plugin). It is byte-identical in intent to SKILL.md, but without the frontmatter, commands, and hooks.

Ponytail vs Matt Pocock Skills

Matt Pocock advocates for a library of small, composable skills (grill-me, grill-with-docs, tdd, diagnose, etc.), which we already covered in Matt Pocock Skills: The Swiss Army Knife of Small Composable Skills. Ponytail is one large skill with four levels. The difference is granularity, not philosophy. They are compatible: you can use /grill-me to challenge the design and then /ponytail full to force a minimalist implementation.

Community reactions: Reddit, Hacker News and LinkedIn

r/ClaudeCode and r/ClaudeAI

The author’s original thread, “I gave Claude Code a ‘lazy senior dev’ mode and it writes like 6x less code”, accumulated nearly two thousand upvotes on r/ClaudeCode and 661 on r/ClaudeAI, with 178 and 93 comments respectively. Most reactions are some flavor of “wow, this is me.” One person on r/aigamedev reported cutting their token consumption 10x and making responses 5x faster, which let them stay on Opus 4.8 without burning through the rate limit. Another user published a workflow combining three layers — NeuralMind as persistent semantic memory, Headroom as reversible transport compression, and Ponytail as a generation constraint— with the result of saving 5-10x compared to a “naive” agent. It is the first time I have seen a stack of three separate layers attacking retrieval, transport and generation independently.

Hacker News

The HN thread hit 93 points and 14 comments. The most repeated reactions:

  • “Wow… this is me” (upon the <input type="date"> example).
  • “Oh, the irony of this giant repo for a prompt. Is this the new leftpad?” (second-most upvoted comment).
  • “Real senior devs can do that because they have experience and put it in context. For example, <input type='date'> may be fine in one scenario, but we may need a more elaborate one in another. Does the skill take into account the PRD or the surrounding code to better emulate those developers?” (a very pertinent criticism).
  • “We are past weaving wizard spells. Now we are at cunning demon summoning.” (self-parodic and spot-on).

LinkedIn

midudev’s post passed 3,000 reactions and 37 comments. The most interesting ones:

  • Jesús Leal nailed it: “Ponytail introduces a kind of ‘pragmatic senior voice’ that forces a very healthy ladder: does this need to be built?, does stdlib already solve it?, is there a native platform capability?, is there already an installed dependency?, can it be solved with something much simpler? […] The key, of course, is not confusing simplicity with carelessness.”
  • Luis Ballester Zafra raised the key caveat: “The ‘can it be one line, then it is one line’ thing can force you to refactor a lot of code to implement small changes after the first version.” — That is the voice of someone who has shipped code in production.
  • José Carrizo summed up the bottom line: “The real value of Ponytail lies not in its speed or cost reduction, but in fostering that ‘senior developer’ mindset where we prioritize the simplest solution over the fastest implementation.”
  • Eduardo P. added the most useful observation: “The most curious thing is that the repository only contains good practices for writing code and reinforces them so the reasoning is simpler and boilerplate is reduced.” — Which confirms Eberhardt’s thesis: it is a very well-packaged prompt, not magic.

Lessons learned: when YES and when NO

After reading the repo, the benchmarks, the criticism, and the threads, here is what I take away:

When Ponytail will serve you

  • One-shots and scripts. You have a 50-line script that has become a 300-line module. Activate /ponytail ultra and let it do the cleanup. /ponytail-audit gives you the inventory of possible cuts.
  • Tech-picking agnostic. If you are hesitating between installing a dependency or using lru_cache from stdlib, lite names the alternative. It is a second senior that only shows up when you ask.
  • Fast code review. /ponytail-review on a diff returns a list of lines to delete with clear tags. It is the best implementation of the “anti-overengineering review” idea you can install in five minutes.
  • Sessions with Claude Sonnet 4.6 or higher. This is where the benchmarks are most stable and where the ladder really makes a difference. Opus 4.8 too, but the marginal improvement over Sonnet does not justify the extra cost if you are only looking to reduce LOC.

When it will NOT serve you

  • Projects with legitimate abstractions. A distributed system with circuit breakers, retries and backoff does not benefit from “one line.” Ponytail understands this (its rules protect trust boundaries, security and accessibility), but in full mode it can get confused between what is a shortcut and what is a requirement. Use lite or turn it off with off in these cases.
  • Small local models (3B-7B). The benchmarks with Ollama + llama3.2 are noise. The skill is tuned for models that actually follow instructions.
  • Tasks that need long reasoning. Models like GPT-5.5 in reasoning mode spend tokens thinking through the ladder before they save anything. Ponytail can end up costing more in those cases. The repository itself acknowledges this.
  • Large refactors with many architectural decisions. Ponytail does not know how to negotiate database migrations. For that, you need Superpowers or a human.

What I take away as an indie dev

What I value most about Ponytail is not the 34,000 stars or the benchmarks. It is the author’s decision to publish the adverse Ollama result in v4.6.0 when he could have buried it. It is the Eberhardt criticism the author received without deleting. It is the README that laughs at itself (“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.”).

In an ecosystem where most skills ship with inflated claims and cherry-picked benchmarks, Ponytail publishes even the result that works against it. That, more than the ladder, is what deserves the stars. And that, more than any library, is what an indie dev like me wants to see in a tool: radical honesty about what it does and what it does not do.

Closing: the six-rung test

If you have made it this far, I have a small exercise for you. The next time your agent spits out 200 lines for a 30-line task, open the official SKILL.md (direct link) and read it out loud. Tell your agent: “From now on, before writing code, walk this ladder and stop at the first rung that holds.” And watch what happens.

If it works for you, you have saved yourself a dependency. If it does not work for you, you have learned something about your own workflow. Either way, you have thought like a lazy senior, which is exactly what Ponytail is trying to emulate.

And if someone tells you this is just a very well-written prompt, tell them yes. It is. But in a world where most prompts are badly written, a prompt that works already deserves a ponytail, a pair of oval glasses and a five o’clock finish.


Bibliography and references

About Ponytail

Criticism and analysis

  • Colin Eberhardt — “Ponytail? YAGNI!” (Scott Logic, June 16, 2026). Technical analysis of the benchmark, experimental reproduction that beats Ponytail with “seven words” and a reflection on the proliferation of skills without serious benchmarks. Essential reading.
  • Hacker News — main thread: news.ycombinator.com/item?id=48527946 (93 points, 14 comments).
  • r/ClaudeCode — author’s thread: “I gave Claude Code a ‘lazy senior dev’ mode” (reddit.com).
  • r/ClaudeAI — cross-posted thread: reddit.com.
  • LinkedIn — midudev: Original post.

Alternatives and ecosystem

Previous articles on the blog (Prior Art linked)

Share this post:
Caveman: The Skill That Teaches AI Agents to Shut Up
AI Agents June 20, 2026

Caveman: The Skill That Teaches AI Agents to Shut Up

Caveman teaches AI agents to talk like cavemen. Julius Brussee's viral skill claims 75% fewer tokens — real Reddit measurements and the brutal verdict.

Read more
The Persistent Memory Stack I Actually Use...
AI June 18, 2026

The Persistent Memory Stack I Actually Use...

Honest technical deep dive into the persistent memory stack I combine daily in my projects: opencode-supermemory for auto-compact, basic-memory as main memory with Markdown + graph, and forgetful as procedural skills layer. With real configuration examples for Claude Code, Codex,

Read more
Cross-Agent MCP Servers for Persistent
AI June 12, 2026

Cross-Agent MCP Servers for Persistent

Exhaustive technical comparison of three cross-platform MCP servers to give AI agents persistent memory: opencode-supermemory (cloud), basic-memory (Markdown + graph), and forgetful (atomic Zettelkasten). Works with Claude Code, Codex, Cursor and more.

Read more