Skip to content
SkilledDragonEngineering Intelligence
AI DropKeylessOctober 13, 2026

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

scopesmallestshiprejected scopePromptPlansmallest changePonytail gatelazy seniorBuild

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:

  1. gate:skill checks that the ponytail skill exists at .claude/skills/ponytail/SKILL.md and that there is no mirror under .agents/skills or .cursor/skills. Three rules, each printed as a line the report counts.
  2. verify:skills-install runs skills@1.7.2 add DietrichGebert/ponytail --skill ponytail -a claude-code --copy into a disposable directory, then asserts the file landed on the canonical path and no .agents mirror appeared.
  3. test:upstream clones ponytail at the pinned commit 2961b52fc1fe6a5a87c7a959a79512e5c2f3ffe5, builds a throwaway Python venv with pandas for its CSV probe, then runs upstream npm test (node --test tests/*.test.js && npm test --prefix pi-extension). The report sums the node --test summary lines across both runs.

From reports/gate.json (run on October 13, 2026):

MeasureValue
Report steps passed3 / 3
Gate rules checked / passed3 / 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 pin2961b52
Elapsed66,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 report

SkilledDragon 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