MCP.Market

ponytail-review skill

by DietrichGebert·DietrichGebert/ponytail·191k stars·MIT

Quality review of a diff: bugs, security, real load, missing tests, speed, and what to delete. Each finding says what goes wrong and how to fix it.

A100/100content scan

Is the ponytail-review skill safe?

Clean: nothing in its files matched our rules. We read 1 file in the folder on 2026-10-09.

No findings.

Install the ponytail-review skill

A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.

git clone --depth 1 https://github.com/DietrichGebert/ponytail.git /tmp/ponytail
mkdir -p ~/.claude/skills
cp -r /tmp/ponytail/.openclaw/skills/ponytail-review ~/.claude/skills/ponytail-review
available in every project

In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub

The instructions your agent would load

SKILL.md as published, without the frontmatter. Read it on GitHub

Review a change like the senior developer who will be paged when it breaks. Order of importance: correct, safe, holds under load, tested, fast, lean. Lean still matters: every extra line must be read, tested and fixed later. This is a report the user asked for, so give it in full.

1. Understand first

link, or files. Nothing named: the uncommitted changes, or the last commit if there are none.

  • Review what the user names: uncommitted or staged changes, a branch, a PR

the functions it calls, the tests, the README.

  • Read the diff, then the code it touches: callers of every changed function,

or behavior changes, grep every caller.

  • Trace the real flow: where data comes in, what is stored, what goes out.
  • A change can break code it does not touch. When a signature, return value

running a script, or many users and processes at once. Judge scale against that, and say which load you assumed.

  • Find the expected load in the repo (README, deploy config): one person

2. Look for

rounding, time zones), a caller broken by the change, a fix applied in one caller while the shared function stays broken.

  1. Bug: wrong result, crash, missed edge case (empty, zero, last item,

checks on input from users), data loss (errors swallowed, writes in the wrong order, no transaction).

  1. Risk: security holes (injection, weak randomness, secrets, missing

same work done by every process, memory or lists that only grow, a query per item, O(n^2) on big input, per-process state that must be shared.

  1. Scale: fine for one user, wrong for many: check-then-write races, the

data writes, a bug fix) with no test that fails when it breaks. One good test, not coverage.

  1. Missing test: risky new logic (a branch, a parser, money, security,

loop) are suggestions; some software counts every millisecond.

  1. Speed: big slowdowns are problems. Small wins (work repeated in a hot
  1. Lean: code that should not exist or should be smaller.

new dependency for a few lines

  • delete: dead code, unused options, speculative features
  • reuse: the repo already has this helper (name the path)
  • stdlib / native: the standard library or platform already does it; a

or test. Split by job, never by line count, and never into helpers that exist only to make a function shorter.

  • yagni: abstraction with one implementation, config nobody sets
  • merge: near-copies that must change together
  • split: one function doing several unrelated jobs, so it is hard to read

3. Check before you report

wrong result". No case, no finding.

  • Every finding needs a concrete case: "this input or situation leads to this

empty, the code really is unused.

  • Re-read the lines and confirm: the caller exists, the value can really be

decision, not a finding, unless the expected load already crosses it.

  • A shortcut marked with a shortcut: (or older ponytail:) comment that names its limit is a

add layers, frameworks or config the problem does not need.

  • Propose the smallest fix that works. Prefer fixes that delete code. Never
  • No style taste, no "consider", no vague worries.

4. Output

Very simple English: short sentences, everyday words. Explain a technical term the first time you use it. The reader may never have seen this code.

Start with What this change does: in two or three sentences.

Then the findings in three groups, skip empty groups:

function that mixes jobs, code that should not exist.

  • Must fix: bug, security, data loss, breaks at the expected load.
  • Should fix: risky code without a test, real slowness, duplication, a
  • Nice to have: small speed-ups, shorter forms.

Number findings across all groups, so the user can say "fix 2 and 5". Every finding has all four parts, each one or two short sentences:

  1. Orders land on the wrong day (billing/close_day.py:L40-52)

at 00:30 in Berlin is billed on the day before.

  • What this is: At midnight this job closes the day and bills all orders of that day.
  • Problem: It takes "today" from the server clock, which runs in UTC. An order placed

datetime.now(ZoneInfo("Europe/Berlin")).date(). One line, nothing else changes.

  • Fix: Compute the day once in the shop's time zone:
  • If we skip it: Late orders show the wrong date, and accounting fixes them by hand.

End with:

  • Verdict: Ship. or Verdict: fix 1 and 3 first.
  • Lean: - lines possible. when lean findings exist.
  • Not checked: one line, if something mattered and you could not check it.

Nothing found: What this change does:, then Looks good. Ship. and one line on what you checked.

Lists findings, changes no code.

More skills from DietrichGebert/ponytail

  • AponytailLazy senior dev mode for any coding task: the smallest change that fully solves it, and a reply a busy human understands in one read.
  • AponytailLazy senior dev mode: the smallest change that fully solves the task, and a reply a busy human understands in one read. Use on any coding task (writing, fixing, refactoring, reviewing, choosing dependencies) and when the user says "ponytail", "be lazy", "simplest solution", "yagni", or complains about over-engineering or bloat. Levels: lite, full (default), ultra.
  • Aponytail-auditQuality audit of the whole repo: bugs, security, real load, missing tests, speed, and what to delete. Most important first.
  • Aponytail-auditQuality audit of a whole repo: bugs, security holes, what breaks under real load, risky code without tests, slow paths, and what to delete, merge or split. Ranked, each finding explained in plain English. One-shot report, changes nothing. Use for "audit this codebase", "review the whole repo", "find bloat", "what can I delete", /ponytail-audit.
  • Aponytail-debtHarvest every shortcut: comment into one debt ledger, so deferrals get tracked instead of forgotten. One-shot report.
  • Aponytail-debtList every `shortcut:` comment (and older `ponytail:` ones) as a debt ledger. One-shot report, changes nothing. Use for "ponytail debt", "what did ponytail defer", "list the shortcuts", /ponytail-debt.
  • Aponytail-gainShow ponytail measured impact as a scoreboard: less code, less cost, more speed, from the agentic benchmark averages. One-shot display.
  • Aponytail-gainShow ponytail's measured savings (code, cost, speed) from the benchmark. One-shot display. Use for /ponytail-gain, "what does ponytail save", "ponytail impact".
  • Aponytail-helpQuick reference for ponytail's modes, skills, and commands. One-shot display.
  • Aponytail-helpQuick reference for ponytail levels, skills and commands. One-shot display. Use for /ponytail-help, "ponytail help", "how do I use ponytail".
  • Aponytail-reviewQuality review of a change: is the logic right, is it safe, does it hold under real load, is risky code tested, is it fast enough, and is every line needed. Reads the connected code, not only the diff. Each finding is explained in plain English. Use for "review this", "code review", "review the last commit", "review my PR", "is this over-engineered", /ponytail-review.

All agent skills → · MCP servers