DietrichGebert/ponytailPublic

Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.

AI summary: An AI agent skill that enforces minimal, safe, and dependency-free one-liner code generation.

Stars
154.6K
+1.3K today
Forks
8.3K
Watchers
363
Open issues
109
Open PRs
203
Contributors
~66
Commits
224
Branches
42

JavaScriptMITCreated Jun 12, 2026Last push 1d agoLatest release v4.10.0+7.7K stars this week+28.8K this month

Quick answers

What is ponytail?
An AI agent skill that enforces minimal, safe, and dependency-free one-liner code generation.
What does ponytail do?
Ponytail operates as an always-on ruleset for AI coding agents to drastically reduce code generation bloat and avoid unnecessary complexities. It forces the agent to read existing codebase context and standard libraries before writing, ensuring it reuses existing implementations rather than hallucinating new dependencies. The system applies a strict decision ladder that prioritizes dropping unnecessary tasks, reusing native platform capabilities, and writing the absolute minimum required code without sacrificing security or accessibility. By integrating directly into agents like Claude Code and Copilot via lifecycle hooks, it reduces token usage, latency, and costs significantly across tasks.
Who is ponytail for?
Ponytail is for developers heavily utilizing AI coding assistants who are frustrated by bloated, overly complex code generation. It is designed for engineers seeking lean, maintainable, and cost-efficient agentic workflows.
How do I get started with ponytail?
/plugin marketplace add DietrichGebert/ponytail
How popular is ponytail on GitHub?
DietrichGebert/ponytail has 154,616 stars and 8,315 forks on GitHub, and gained 7,707 stars in the last 7 days.
What license does ponytail use?
DietrichGebert/ponytail is released under the MIT license.

Star history

since Jul 28, 2026
050K100K150KJul 2026Aug 2026Sep 2026Oct 2026
154.6K stars as of Oct 4, 2026. Measured daily since Jul 28, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 25 commits2026-06-13: 10 commits2026-06-14: 6 commits2026-06-15: 22 commits2026-06-16: 4 commits2026-06-17: 3 commits2026-06-18: 10 commits2026-06-19: 24 commits2026-06-20: 0 commits2026-06-21: 5 commits2026-06-22: 1 commit2026-06-23: 5 commits2026-06-24: 17 commits2026-06-25: 5 commits2026-06-26: 4 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 4 commits2026-06-30: 2 commits2026-07-01: 0 commits2026-07-02: 7 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 3 commits2026-07-07: 6 commits2026-07-08: 1 commit2026-07-09: 28 commits2026-07-10: 5 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 1 commit2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 2 commits2026-08-08: 2 commits2026-08-09: 0 commits2026-08-10: 0 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 0 commits2026-08-31: 0 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 3 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 9 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 0 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 2 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits2026-09-27: 0 commits2026-09-28: 0 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits
216 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Landmark project

    154,616 stars

  • Breakout launch

    154,616 stars in 115 days

  • High momentum

    +1,323 stars today

  • Actively maintained

    Pushed within 48 hours

  • Permissive license

    MIT

  • Repeat trending

    34 trending appearances

  • Top 10% tracked

    Rank 35 of 1135

What ponytail does

Ponytail operates as an always-on ruleset for AI coding agents to drastically reduce code generation bloat and avoid unnecessary complexities. It forces the agent to read existing codebase context and standard libraries before writing, ensuring it reuses existing implementations rather than hallucinating new dependencies. The system applies a strict decision ladder that prioritizes dropping unnecessary tasks, reusing native platform capabilities, and writing the absolute minimum required code without sacrificing security or accessibility. By integrating directly into agents like Claude Code and Copilot via lifecycle hooks, it reduces token usage, latency, and costs significantly across tasks.

Ponytail is for developers heavily utilizing AI coding assistants who are frustrated by bloated, overly complex code generation. It is designed for engineers seeking lean, maintainable, and cost-efficient agentic workflows.

  • Decision ladder enforcement: Stops agents from over-building by sequentially verifying if a feature can be skipped, reused, or solved natively.
  • Contextual awareness: Forces the agent to trace real codebase flow and read modified areas before outputting any code.
  • Safety preservation: Ensures trust-boundary validation, error handling, and accessibility are never compromised during minimization.
  • Universal agent injection: Integrates seamlessly via lifecycle hooks into popular AI platforms like Claude Code, Codex, Copilot CLI, and Gemini.
  • Cost and token reduction: Measurably decreases generation tokens and operational costs by preventing agents from writing boilerplate wrappers.

Where teams use it

Lean AI Code Generation

Developers can prevent AI agents from hallucinating complex wrapper components when a simple native HTML element suffices.

Cost-Efficient Automated Refactoring

Teams operating headless AI agents can cut API costs and token usage by enforcing minimal, non-verbose code modifications.

Standard Library Prioritization

Engineers can force their AI assistants to utilize built-in standard libraries instead of unnecessarily pulling in external npm packages.

Secure Code Minimization

Developers can safely shrink codebases knowing the AI is instructed to retain all critical data-loss handling and trust-boundary validations.

Getting started: /plugin marketplace add DietrichGebert/ponytail

README

main branch

Ponytail, the lazy senior dev

Ponytail

He says nothing. He writes one line. It works.

DietrichGebert%2Fponytail | Trendshift

Stars Release npm Works with 20 agents MIT license

DietrichGebert/ponytail | Trendshift DietrichGebert/ponytail | Trendshift DietrichGebert%2Fponytail | Trendshift monthly ranking

~54% less code (up to 94%) · ~20% cheaper · ~27% faster · 100% safe
Measured on real Claude Code sessions editing a real open-source repo (FastAPI + React), against the same agent with no skill. ~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. ponytail keeps every safety guard while a bare "write one-liners" prompt drops one. (The earlier single-shot benchmark reported 80-94% as a flat figure; against a fair agentic baseline that is the per-task ceiling, not the average.) Full writeup · reproduce it.

Español · 한국어


Something's coming, join the waitlist

Already built with Ponytail

Retriever

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.

Each arm as a percent of the no-skill baseline across LOC, tokens, cost and time (Haiku 4.5). ponytail is lowest on every metric (LOC 46%, tokens 78%, cost 80%, time 73%); caveman rises above 100% on tokens, cost and time; yagni-oneliner LOC 67%. Safety, separate adversarial tier: baseline, caveman and ponytail 100%, yagni-oneliner 95%.

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.

Older single-shot numbers (isolated generation)

Five everyday tasks, three models, three arms (no skill, caveman, ponytail), ten runs, median reported. One prompt, one completion, counting lines of the answer:

Median lines of code per arm across Haiku, Sonnet and Opus

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 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 are never on the chopping block.

Install

The most effort ponytail will ever ask of you:

The Claude Code and Codex plugins (and the Cursor hooks) run two tiny Node.js lifecycle hooks, so node needs to be on your PATH (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.

Claude Code

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

(You have to send two separate prompts for the install to work)

Same steps in the Claude Code Desktop app's Code tab: type the two /plugin commands above into the prompt box, or click the + button next to it, choose Plugins → Add plugin to browse your configured marketplaces, and manage marketplaces from Customize in the sidebar.

Codex

codex plugin marketplace add DietrichGebert/ponytail
codex plugin add ponytail@ponytail

Run codex and open /hooks, review and trust its two lifecycle hooks, and start a new thread.

This same install also covers the Codex desktop app: restart the app after installing and it picks up the plugin.

GitHub Copilot CLI

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

In an interactive Copilot CLI session, use the slash equivalents:

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

Copilot CLI namespaces plugin commands by plugin name. For example:

/ponytail:ponytail ultra
/ponytail:ponytail-review

Pi agent harness

pi install git:github.com/DietrichGebert/ponytail

OpenCode

Add to opencode.json:

{ "plugin": ["@dietrichgebert/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).

Gemini CLI

gemini extensions install https://github.com/DietrichGebert/ponytail

Loads the ruleset as always-on context every session and registers the /ponytail commands; the skills/ ship too, activated when a task needs them. The Gemini adapter intentionally does not ship a root hooks/hooks.json: Gemini auto-loads that path, while Ponytail's lifecycle hooks use Claude/Codex event names.

Qoder

Qoder auto-loads AGENTS.md from the repo root as always-on context, so running ponytail from a checkout works with zero setup. For per-project rules, copy .qoder/rules/ponytail.md into your project's .qoder/rules/. The six ponytail skills (/ponytail, /ponytail-review, /ponytail-audit, /ponytail-debt, /ponytail-gain, /ponytail-help) are available via Qoder's Skill system; the plugin manifest at .qoder-plugin/plugin.json points at the skills/ directory.

For full plugin-tier support (automatic mode activation + ruleset injection on every prompt), add the hooks from hooks/qoder-hooks.json to your .qoder/settings.json. Replace PONYTAIL_DIR with the path to your ponytail checkout. Qoder's UserPromptSubmit hook activates the default mode on first prompt and injects the ruleset every turn; PreToolUse with task|Task matcher injects the ruleset into subagents. Level switches (/ponytail lite|full|ultra|off) work automatically.

Antigravity CLI

Google is renaming Gemini CLI to Antigravity CLI (the agy binary); the same extension installs there:

agy plugin install https://github.com/DietrichGebert/ponytail

It reuses this repo's gemini-extension.json. One difference: Antigravity converts the /ponytail commands into skills, so you type them into the chat (e.g. /ponytail-review as a message) instead of picking them from a slash menu. Until the migration completes (around June 18, 2026), gemini extensions install still works too. To run it as an always-on rule instead, drop the ruleset into .agents/rules/.

Hermes Agent

hermes plugins install DietrichGebert/ponytail --enable

Restart Hermes after installing. The plugin injects the active Ponytail mode before each LLM turn, registers the bundled skills as ponytail:<skill>, and adds /ponytail, /ponytail-review, /ponytail-audit, /ponytail-debt, /ponytail-gain, and /ponytail-help. In shared gateways, restrict /ponytail to trusted users with Hermes slash-command access controls; runtime mode is process-local.

CodeWhale

Reads AGENTS.md from the project root, zero setup. Copy AGENTS.md to your project, or run codewhale from a checkout of this repo. That's it.

Swival

Stage the collection in your library first, then add the skills you want:

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 also reads AGENTS.md from the project root and ~/.config/swival/AGENTS.md globally, the instruction-only fallback.

On the command line, use a $ prefix to explicitly activate a skill. For example: $ponytail-review.

Devin CLI

devin plugins install DietrichGebert/ponytail

Installs ponytail as a Devin plugin; skills are available as /ponytail:ponytail, /ponytail:ponytail-review, and so on.

OpenClaw

clawhub install ponytail

Installs ponytail as an OpenClaw skill from ClawHub; the review, audit, debt, gain, and help skills install the same way (clawhub install ponytail-review, and so on). OpenClaw applies it on coding tasks and also exposes it as a /ponytail command. Without ClawHub, copy .openclaw/skills/ponytail into ~/.openclaw/skills/.

Grok Build

grok plugin install DietrichGebert/ponytail --trust

Enable the plugin (off by default): /plugins → Plugins → Space on ponytail, or in ~/.grok/config.toml:

[plugins]
enabled = ["ponytail"]

Start a new session (or reload plugins). Skills show as /ponytail, /ponytail-review, /ponytail-audit, /ponytail-debt, /ponytail-gain, /ponytail-help. Verify with grok inspect. Grok can auto-invoke ponytail for coding tasks from its skill description; use /ponytail (or /ponytail lite, /ponytail full, /ponytail ultra) when activation needs to be explicit. Grok lifecycle hooks are not used because their SessionStart output cannot inject instructions.

AGENTS.md still works instruction-only from a checkout without the plugin.

Cursor

git clone https://github.com/DietrichGebert/ponytail
node ponytail/scripts/cursor-hooks.js install

Merges two native hooks into ~/.cursor/hooks.json (add --project to write <project>/.cursor/hooks.json instead) and keeps any hooks you already have there. The entries run node from that checkout, so leave it where it is or re-run the install after moving it. Cursor reloads the file on save; open a new chat and the ruleset for your default level arrives through sessionStart. Send /ponytail lite, /ponytail full, /ponytail ultra or /ponytail off as a plain message to switch the level for the rest of the conversation; /ponytail reports it. Cursor's subagentStart cannot inject context, so subagents run without the ruleset, and cloud agents never fire sessionStart. The always-on rule (.cursor/rules/ponytail.mdc) and the hooks are alternatives: while the rule is in a workspace the hooks inject nothing and the mode commands answer with a notice, so delete the rule to let the hooks manage the level. Contract, verification record and limitations: docs/cursor-hooks.md. Uninstall: node ponytail/scripts/cursor-hooks.js uninstall.

That was it. He'd be proud. He won't say it.

Active every session, with a handful of commands (see Commands). /ponytail ultra exists for when the codebase has wronged you personally. Startup and mode-change text shows the current mode.

Set the level for every new session with the PONYTAIL_DEFAULT_MODE env var (lite/full/ultra/off), or a defaultMode field in ~/.config/ponytail/config.json (%APPDATA%\ponytail\config.json on Windows). The default is full.

While active, the ruleset is also injected into every subagent spawned via the Agent tool. To scope that to specific agent types (say, keep it off read-only search agents), set the PONYTAIL_SUBAGENT_MATCHER env var to a regex tested against the subagent's agent_type. It is unanchored and case-insensitive: explore|general matches either, ^general$ is exact, and plugin agent types look like plugin:name. Unset means inject into every subagent (the default); an invalid regex, or a subagent whose type the platform doesn't report, also falls back to injecting.

Cursor (rule-only alternative to the hooks install), Windsurf, Cline, GitHub Copilot Chat (the VS Code, JetBrains, and Visual Studio editor extension, not the standalone Copilot CLI covered under Install), Aider, Kiro, Zed, CodeWhale, Swival, Qoder: copy the matching rules file from this repo (.cursor/rules/, .windsurf/rules/, .clinerules/, .github/copilot-instructions.md, AGENTS.md, .kiro/steering/, .qoder/rules/).

Kiro: copy .kiro/steering/ponytail.md to ~/.kiro/steering/ (global) or .kiro/steering/ in your project.

GitHub Copilot CLI fallback (instruction-only mode): it reads AGENTS.md and .github/copilot-instructions.md in a project, or copy the rules into ~/.copilot/copilot-instructions.md to run ponytail in every project. This path keeps always-on guidance, but does not add plugin mode switches or hooks.

VS Code with the Codex extension reads AGENTS.md, which this repo ships, so it works from the repo root with no setup (~/.codex/AGENTS.md makes Codex global).

JetBrains Junie can read AGENTS.md once you point it there in Settings → Tools → Junie → Project Settings → Guidelines Path (it is not automatic yet). This repo ships AGENTS.md; .junie/guidelines.md is Junie's legacy path.

Amp (Sourcegraph) reads AGENTS.md from the working directory and parent directories up to $HOME, which this repo ships, so it works with no setup (~/.config/amp/AGENTS.md works globally).

Jules (Google) reads AGENTS.md from the repository root, which this repo ships, so it picks up the ruleset with no setup.

Which files map to which agent: Agent portability.

Uninstall

Host Command
Claude Code /plugin remove ponytail
Codex codex plugin remove ponytail
Devin CLI devin plugins remove ponytail
Grok Build grok plugin uninstall ponytail
Pi agent pi uninstall ponytail
Cursor hooks node scripts/cursor-hooks.js uninstall (add --project for a project-level install); removes only ponytail's entries from hooks.json
Cursor rule / Windsurf / Cline / Qoder / etc. Delete the copied rule file

These remove the plugin's own files. They leave behind a small amount of state ponytail writes outside the plugin folder: the mode flag (~/.claude/.ponytail-active, or ~/.cursor/.ponytail-active for Cursor), ~/.config/ponytail/config.json, ponytail's entries in ~/.cursor/hooks.json, and (if you accepted the setup nudge) a statusLine entry in ~/.claude/settings.json. Run node scripts/uninstall.js to clean those up too. Run it before the host remove command above — the script is itself a plugin file, so removing the plugin first deletes it (or run it from a separate clone of this repo). It only removes the statusLine entry if it points at ponytail's own script, so a statusline you set up yourself is left untouched.

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.

Commands need a skill-capable host (Claude Code, Codex, Devin CLI, OpenCode, Gemini, pi, Swival, Hermes Agent, Qoder, Grok Build). In Codex they're skills, invoke with @ (@ponytail-review). Cursor with the hooks gets /ponytail level switching only, typed as a plain message. The instruction-only adapters (Cursor's rule file, Windsurf, Cline, Copilot, Kiro, Antigravity) load the always-on ruleset without the commands.

Development

When changing the compact rule text, keep the agent copies aligned:

node scripts/check-rule-copies.js
npm test

The OpenClaw skill package (.openclaw/skills/) is generated from skills/; rerun node scripts/build-openclaw-skills.js after changing a skill, the test suite fails if it is stale. To publish the skills to ClawHub, run clawhub login once, then node scripts/publish-openclaw-skills.js (it publishes all six at the package.json version; pass --dry-run to preview).

The correctness benchmark spawns Python for email and CSV checks; python3 is tried before python. CSV checks need pandas installed locally.

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

GreenPT

License

MIT. The shortest license that works.

Star History

Star History Chart
View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Releases and announcements

16 total
  1. v4.10.0v4.10.0Sep 14, 2026

    Two new homes for Ponytail. The headline: native Cursor support through `hooks.json`, with a `scripts/cursor-hooks.js install` that merges into your existing Cursor hooks file and leaves everything else in it alone. Also new: a Grok Build skills adapter, VS Code Copilot is finally detected correctly (no more Claude Code statusline nudge there), and the Claude.ai marketplace validator accepts the plugin again. ## What's Changed * fix: drop commandWindows from hooks.json for Claude.ai marketplace validation (#593) by @prayag0one4 in https://github.com/DietrichGebert/ponytail/pull/601 * fix: detect VS Code Copilot via CLAUDE_PLUGIN_ROOT fallback (#528) by @krishrathi1 in https://github.com/DietrichGebert/ponytail/pull/579 * feat: add Grok Build native skills adapter (revive #561) by @p-clements in https://github.com/DietrichGebert/ponytail/pull/661 * docs: add Trendshift badge to READMEs by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/801 * docs: add Trendshift monthly ranking badge by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/802 * docs: put daily, weekly and monthly Trendshift badges in one row by @DietrichGebert in https://github.com/

  2. Five weeks of merged work in one drop. The headline: `/ponytail default <mode>` makes your chosen mode survive restarts, and a bare `/ponytail` now reports the active level instead of resetting it. Also new: Qoder support, subagent scoping via `PONYTAIL_SUBAGENT_MATCHER`, pi status bar controls, and about 30 fixes across Windows, Codex, OpenCode, and the uninstaller. ## What's Changed * fix: copilot-plugin test checks all 6 command files by @nanaubusiness in https://github.com/DietrichGebert/ponytail/pull/393 * docs(benchmarks): add Independent benchmarks section by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/460 * fix: exec lifecycle hook commands by @sanmaxdev in https://github.com/DietrichGebert/ponytail/pull/474 * fix: handle stdin error in ponytail-mode-tracker to avoid uncaught crash by @Megashubham in https://github.com/DietrichGebert/ponytail/pull/227 * fix: prevent Windows session freeze from stdin EOF deadlock (#443) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/477 * fix: strip UTF-8 BOM before parsing config.json (#375) by @DietrichGebert in https://github.com/DietrichGebert/ponytail/pull/478 * fix: don't destroy combined

  3. v4.8.4: lazy in Hermes nowv4.8.4Jun 29, 2026

    ### New - Ponytail now runs as a native **Hermes Agent** plugin (#323) — always-on context, bundled skills, and slash commands. - Ponytail ships as a **Devin CLI** plugin (#318). - The skill now triggers on any coding task, not just keyword prompts (#447) — description-driven hosts load it reliably on plain coding work, recall on coding tasks went 2/6 to 6/6 with precision unchanged. ### Docs - Sponsors section, with GreenPT as the first sponsor (#321) - Announcement banner replaces the badge; waitlist teaser added and translated (#316, #314, #312) - Swift/SwiftUI section in `platform-native.md` (#313) - Star History chart and Trendshift badges in the READMEs (#294, #293) - ES and Korean READMEs synced with the Devin CLI addition (#322) ### Fixes - benchmarks: strip block comments before counting LOC (#232) - benchmark: reject `--ollama-url` without a host (#315) **Full changelog:** https://github.com/DietrichGebert/ponytail/compare/v4.8.3...v4.8.4

  4. ### New - The ponytail ruleset now injects into **subagents** via a `SubagentStart` hook (#254) — spawned subagents stay lazy, not just the main thread. ### Docs - Korean README — `README.ko.md` (#283) - OpenCode npm install + npm badge across the English and Spanish READMEs; dropped the obsolete command-symlink note (#285) **Full changelog:** https://github.com/DietrichGebert/ponytail/compare/v4.8.2...v4.8.3

  5. v4.8.2: now on npmv4.8.2Jun 24, 2026

    Ponytail is now installable from npm as `@dietrichgebert/ponytail`, published from CI via npm **trusted publishing** (OIDC, with provenance) — no tokens. ### OpenCode ```json { "plugin": ["@dietrichgebert/ponytail"] } ``` ### Also in this release - pi-extension status bar indicator for the active ponytail mode (#275, #279) - Swival install instructions (#264) - PowerShell-safe shared hooks (#265) - uninstall cleanup for state left outside plugin files (#228) - benchmark + test fixes (#274, #268) **Full changelog:** https://github.com/DietrichGebert/ponytail/compare/v4.8.1...v4.8.2

Code frequency

additions and deletions
+7.8K-7.8KWeek of 2026-06-07: +3,021 linesWeek of 2026-06-07: -595 linesWeek of 2026-06-14: +7,824 linesWeek of 2026-06-14: -647 linesWeek of 2026-06-21: +1,959 linesWeek of 2026-06-21: -179 linesWeek of 2026-06-28: +158 linesWeek of 2026-06-28: -37 linesWeek of 2026-07-05: +1,104 linesWeek of 2026-07-05: -141 linesWeek of 2026-07-12: +6 linesWeek of 2026-07-12: -0 linesWeek of 2026-07-19: +0 linesWeek of 2026-07-19: -0 linesWeek of 2026-07-26: +0 linesWeek of 2026-07-26: -0 linesWeek of 2026-08-02: +174 linesWeek of 2026-08-02: -34 linesWeek of 2026-08-09: +0 linesWeek of 2026-08-09: -0 linesWeek of 2026-08-16: +0 linesWeek of 2026-08-16: -0 linesWeek of 2026-08-23: +0 linesWeek of 2026-08-23: -0 linesWeek of 2026-08-30: +18 linesWeek of 2026-08-30: -3 linesWeek of 2026-09-06: +50 linesWeek of 2026-09-06: -31 linesWeek of 2026-09-13: +871 linesWeek of 2026-09-13: -28 linesWeek of 2026-09-20: +0 linesWeek of 2026-09-20: -0 linesWeek of 2026-09-27: +0 linesWeek of 2026-09-27: -0 linesJun 7, 2026Sep 27, 2026
+15.2K lines added, -1.7K removed over the last year.

Commits per week

last 52 weeks
690Week of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 35 commitsWeek of 2026-06-14: 69 commitsWeek of 2026-06-21: 37 commitsWeek of 2026-06-28: 13 commitsWeek of 2026-07-05: 43 commitsWeek of 2026-07-12: 1 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 4 commitsWeek of 2026-08-09: 0 commitsWeek of 2026-08-16: 0 commitsWeek of 2026-08-23: 0 commitsWeek of 2026-08-30: 3 commitsWeek of 2026-09-06: 9 commitsWeek of 2026-09-13: 2 commitsWeek of 2026-09-20: 0 commitsWeek of 2026-09-27: 0 commitsOct 5, 2025Sep 27, 2026
216 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 2 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 1 commitsSun 6:00 — 1 commitsSun 7:00 — 1 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 0 commitsSun 11:00 — 0 commitsSun 12:00 — 0 commitsSun 13:00 — 0 commitsSun 14:00 — 0 commitsSun 15:00 — 0 commitsSun 16:00 — 0 commitsSun 17:00 — 2 commitsSun 18:00 — 2 commitsSun 19:00 — 0 commitsSun 20:00 — 0 commitsSun 21:00 — 0 commitsSun 22:00 — 0 commitsSun 23:00 — 2 commitsMon 0:00 — 2 commitsMon 1:00 — 0 commitsMon 2:00 — 7 commitsMon 3:00 — 2 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 4 commitsMon 8:00 — 0 commitsMon 9:00 — 0 commitsMon 10:00 — 0 commitsMon 11:00 — 4 commitsMon 12:00 — 0 commitsMon 13:00 — 0 commitsMon 14:00 — 0 commitsMon 15:00 — 0 commitsMon 16:00 — 4 commitsMon 17:00 — 1 commitsMon 18:00 — 10 commitsMon 19:00 — 1 commitsMon 20:00 — 3 commitsMon 21:00 — 0 commitsMon 22:00 — 0 commitsMon 23:00 — 3 commitsTue 0:00 — 0 commitsTue 1:00 — 3 commitsTue 2:00 — 2 commitsTue 3:00 — 1 commitsTue 4:00 — 1 commitsTue 5:00 — 0 commitsTue 6:00 — 1 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 0 commitsTue 10:00 — 0 commitsTue 11:00 — 0 commitsTue 12:00 — 1 commitsTue 13:00 — 2 commitsTue 14:00 — 0 commitsTue 15:00 — 0 commitsTue 16:00 — 0 commitsTue 17:00 — 0 commitsTue 18:00 — 1 commitsTue 19:00 — 0 commitsTue 20:00 — 1 commitsTue 21:00 — 2 commitsTue 22:00 — 0 commitsTue 23:00 — 2 commitsWed 0:00 — 2 commitsWed 1:00 — 2 commitsWed 2:00 — 2 commitsWed 3:00 — 4 commitsWed 4:00 — 5 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 2 commitsWed 8:00 — 0 commitsWed 9:00 — 0 commitsWed 10:00 — 1 commitsWed 11:00 — 0 commitsWed 12:00 — 0 commitsWed 13:00 — 0 commitsWed 14:00 — 0 commitsWed 15:00 — 2 commitsWed 16:00 — 0 commitsWed 17:00 — 0 commitsWed 18:00 — 0 commitsWed 19:00 — 0 commitsWed 20:00 — 0 commitsWed 21:00 — 1 commitsWed 22:00 — 0 commitsWed 23:00 — 1 commitsThu 0:00 — 3 commitsThu 1:00 — 3 commitsThu 2:00 — 1 commitsThu 3:00 — 4 commitsThu 4:00 — 0 commitsThu 5:00 — 1 commitsThu 6:00 — 5 commitsThu 7:00 — 1 commitsThu 8:00 — 0 commitsThu 9:00 — 1 commitsThu 10:00 — 1 commitsThu 11:00 — 0 commitsThu 12:00 — 2 commitsThu 13:00 — 0 commitsThu 14:00 — 0 commitsThu 15:00 — 3 commitsThu 16:00 — 1 commitsThu 17:00 — 3 commitsThu 18:00 — 10 commitsThu 19:00 — 3 commitsThu 20:00 — 3 commitsThu 21:00 — 0 commitsThu 22:00 — 2 commitsThu 23:00 — 3 commitsFri 0:00 — 9 commitsFri 1:00 — 6 commitsFri 2:00 — 12 commitsFri 3:00 — 6 commitsFri 4:00 — 6 commitsFri 5:00 — 1 commitsFri 6:00 — 2 commitsFri 7:00 — 1 commitsFri 8:00 — 1 commitsFri 9:00 — 1 commitsFri 10:00 — 0 commitsFri 11:00 — 0 commitsFri 12:00 — 6 commitsFri 13:00 — 0 commitsFri 14:00 — 3 commitsFri 15:00 — 0 commitsFri 16:00 — 1 commitsFri 17:00 — 4 commitsFri 18:00 — 0 commitsFri 19:00 — 0 commitsFri 20:00 — 0 commitsFri 21:00 — 0 commitsFri 22:00 — 2 commitsFri 23:00 — 2 commitsSat 0:00 — 0 commitsSat 1:00 — 1 commitsSat 2:00 — 0 commitsSat 3:00 — 5 commitsSat 4:00 — 0 commitsSat 5:00 — 2 commitsSat 6:00 — 2 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 0 commitsSat 11:00 — 0 commitsSat 12:00 — 0 commitsSat 13:00 — 0 commitsSat 14:00 — 2 commitsSat 15:00 — 0 commitsSat 16:00 — 0 commitsSat 17:00 — 0 commitsSat 18:00 — 0 commitsSat 19:00 — 0 commitsSat 20:00 — 0 commitsSat 21:00 — 0 commitsSat 22:00 — 0 commitsSat 23:00 — 0 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits114 (51%)
Community commits110 (49%)

224 commits in total over the last year.

DateListRankStars gained
Jul 27, 2026daily#4+6
Jul 22, 2026daily#9+5
Jul 21, 2026daily#23+3
Jul 18, 2026daily#8+5
Jul 15, 2026daily#11+8
Jul 14, 2026daily#22+4
Jul 12, 2026daily#14+3
Jul 9, 2026daily#4+7
Jul 8, 2026daily#6+7
Jul 6, 2026daily#8+8
Jul 5, 2026daily#10+28
Jul 4, 2026daily#5+37
Jul 3, 2026daily#3+23
Jul 2, 2026daily#7+34
Jul 1, 2026daily#6+29
  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    272.8K stars · JavaScript

  • NousResearch/hermes-agent

    The agent that grows with you

    251.2K stars · Python

  • react/react

    The library for web and native user interfaces.

    250.9K stars · JavaScript

  • firecrawl/firecrawl

    Supercharge your AI agents with data from the web and beyond. Building the library for superintelligence. 🔥

    188.6K stars · TypeScript

  • Significant-Gravitas/AutoGPT

    AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.

    187.7K stars · Python

  • anthropics/skills

    Public repository for Agent Skills

    179.6K stars · Python