Your agent overbuilds. Every time. A keyless YAGNI gate, measured.
We wrapped the Ponytail lazy-senior skill in a keyless CI gate: 3 of 3 layout rules, 1 skill verified, 172 of 172 upstream tests at the pinned commit, 66 seconds end to end.
By David Discua
Measured in the lab
- 172
- upstream tests passed
- 3
- gate rules checked
- 1
- skills verified
- 66s
- elapsed
- canonical skill at .claude/skills
- no .agents/skills mirror
- no .cursor/skills mirror
- skills CLI install verified
From reports/gate.json · run on October 13, 2026. keyless: 3 gate rules + skills CLI verify (1 skill) + upstream npm test @ 2961b52 (172 node:test cases)
Where the gate sits
01/01The prompt hits the gate first, then the plan, then the build, and scope creep gets bounced.
Ask a coding agent for a small feature and it hands you a config layer, two abstractions and a "for later" option nobody asked for. DietrichGebert/ponytail is a skill that makes the agent behave like the laziest senior developer in the room and ship the smallest change that fully solves the task, so we wrapped it in a keyless minilab whose report (run on October 13, 2026) passed 3 of 3 gate rules, verified 1 skill and ran 172 of 172 upstream tests green in 66 s. The catch is that a YAGNI skill only trims what you feed the agent, so a swarm of them can still spend whatever you let it.
The catch
Overbuilding is cheap for one agent. It stops being cheap when a lead agent fans the habit out to a swarm. Anthropic documents up to 64 concurrent threads for multi-agent orchestration, and says that number is not guaranteed (managed agents: multi-agent orchestration). So treat "64× faster" as a ceiling. At full concurrency, scope creep in the prompt becomes scope creep in up to sixty-four workers.
Two more hedges apply. Ponytail's author reports roughly "~53% less code"; this lab does not re-run or certify that figure. And a YAGNI skill is no substitute for a budget, so keep your session budget and kill switch.
What we ran (keyless)
bun install && bun run report
scripts/report.ts runs three steps in order and writes reports/gate.json plus reports/gate.md:
gate:skillchecks that the ponytail skill exists at.claude/skills/ponytail/SKILL.mdand that there is no mirror under.agents/skillsor.cursor/skills. Three rules, each printed as a line the report counts.verify:skills-installrunsskills@1.7.2 add DietrichGebert/ponytail --skill ponytail -a claude-code --copyinto a disposable directory, then asserts the file landed on the canonical path and no.agentsmirror appeared.test:upstreamclones ponytail at the pinned commit2961b52fc1fe6a5a87c7a959a79512e5c2f3ffe5, builds a throwaway Python venv with pandas for its CSV probe, then runs upstreamnpm test(node --test tests/*.test.js && npm test --prefix pi-extension). The report sums thenode --testsummary lines across both runs.
From reports/gate.json (run on October 13, 2026):
| Measure | Value |
|---|---|
| Report steps passed | 3 / 3 |
| Gate rules checked / passed | 3 / 3 |
Skills verified (skills CLI, -a claude-code) | 1 (ponytail) |
| Upstream node:test cases (2 runs: root + pi-extension) | 172 / 172 passed, 0 failed |
| Upstream pin | 2961b52 |
| Elapsed | 66,437 ms (~66 s) |
The first pass of bun run report went red. verify:skills-install failed on a missing yaml package inside a stale bunx cache of skills@1.7.2. Clearing the cache and re-running went green with no code change. The script records that kind of failure instead of hiding it. A failed step lands in gate.json with its exit code, and an upstream failure that looks like a network error is flagged as such.
How it is wired
Prompt → Ponytail gate → Plan → Build, with a dashed "rejected scope" edge from the gate back to the prompt. The skill lists every place the change must reach, then takes the first option that fully works: skip features nobody asked for, reuse what the codebase has, prefer the standard library, never add a dependency for a few lines. Rejected scope goes back to the human as a one-line note instead of as code.
The minilab adds what a skill cannot do for itself, which is proof that it is installed where the agent will find it. Skills live only under .claude/skills/, so Claude Code and Cursor discover them on one path, and a mirror under .agents/skills or .cursor/skills fails gate:skill in CI. The pinned upstream run means a future ponytail release cannot silently change what "passes" means; you bump the pin on purpose.
Upstream metadata, from gh api repos/DietrichGebert/ponytail on October 13, 2026: JavaScript, MIT, 162,411 stars.
The tool
ponytail is the YAGNI skill, and its rule is the smallest complete change. In chat, /ponytail full is the default lazy-senior mode, /ponytail lite narrows scope further, and /ponytail ultra pushes back on the request itself. Say "stop ponytail" or "normal mode" to end it.
Minilab (open source)
Install or refresh the committed skill:
DISABLE_TELEMETRY=1 bun --bun x skills@1.7.2 add DietrichGebert/ponytail \
--skill ponytail -a claude-code -y --copy
Then run bun run report and read reports/gate.md for your own numbers.
Run it yourself
SkilledDragonCorp/minilab-ponytail-yagni-gate
Clone, install and run the report with no API keys. The numbers above are what that run writes.
bun install && bun run reportSkilledDragon is not affiliated with Anthropic or DietrichGebert/ponytail. The 64-concurrent figure is from Anthropic docs and is not guaranteed. Gate numbers are from our own keyless lab run; re-run the report before relying on them. Marks belong to their owners.
All labs