Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when auditing test quality in any codebase — run the real suite, map coverage topology, rank untested behaviors by risk. Assess by default, write tests on request; tests are a spec, and the question is what change no test would catch.
.claude/skills/automagik-dev-qa/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 173% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-04 | ✓→✗ | ▼ Worse | -20% | 0% |
Runtime syntax: invoke the plugin copy through the active runtime's owner-qualified skill selector; use a bare selector only when intentionally selecting a user-tier copy (a separately installed personal copy; Genie no longer seeds this tier). Cross-skill prose below uses bare names as portable semantic routes; the orchestrator resolves the selector for the active runtime.
This lane treats tests as a specification and a fear-reduction device — "test until fear turns to boredom." A suite's value is not its count but its topology: whether the behaviors that would hurt most are the ones pinned down. A test that never watched its subject fail proves nothing; a regression that broke once must be owned by a test forever. Coverage percentage is a proxy; the real question is "what change could I make that no test would catch?"
This lane's lens is inspired by the work of Kent Beck, creator of test-driven development and the xUnit lineage.
Assess and report by default. Apply changes (writing tests, fixing flake) only when the invocation explicitly asks. Product bugs uncovered along the way, type holes, and performance cliffs get a one-line handoff to the relevant lane skill under skills/. When you have enough information to act, act.
Find how this repo actually tests before judging: the framework and runner command (manifest scripts, CI workflows, CLAUDE.md/AGENTS.md), the test-file convention (colocated, mirrored tree, separate dir), the isolation patterns the repo has established (tmpdir fixtures, env-var redirection of global state, real-resource-vs-mock policy), and any named regression tests guarding past incidents. The repo's own testing doctrine — e.g. "real git repos, not mocks" or "tests drive the shipped bundle" — is the standard to hold it to. Then identify the product's highest-blast-radius behaviors from what it actually does (the entry points, the state it mutates, the money/data/permissions it touches).
Genie-framework repos: wishes in .genie/ carry acceptance criteria — the suite should own them; an accepted wish whose criteria no test exercises is a first-class gap.
Repo profile — recall, verify, persist. Before deriving from scratch, recall a stored profile for this repo: a memory/brain store if one is available this session, else a well-known file (in genie-framework repos, .genie/repo-profile.md). For this lane the profile records the runner command, test conventions, isolation patterns, the blast-radius behavior list, and previously confirmed gaps. Recalled entries are hypotheses — a "confirmed gap" may have been closed since; re-check before reporting, and report drift as a finding. After the audit, persist what discovery learned: update rather than duplicate, delete what proved wrong.
Profile write boundary. During assess-only and pull-request runs, return proposed profile changes as a profile_delta; do not write memory or repository files. Persist a profile only when the user explicitly asks.
Only test results produced this session, with actual counts. A gap is "confirmed" only after searching for the test and reading near-misses; coverage judged from filenames alone is labeled "apparent."
Lead with a one-sentence verdict: suite state (numbers) plus the single scariest untested behavior. Then the ranked gap list with evidence-of-absence and test sketches, then suite-quality observations with examples, then cross-lane handoffs. In a genie-framework repo, use CRITICAL/HIGH/MEDIUM/LOW for finding severities and SHIP/FIX-FIRST/BLOCKED only for the overall verdict and offer to turn the top gaps into a wish via wish — the sketches become its acceptance criteria.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-10 | pass→pass | 10,493 | 6,102 | -42% | 1 | 1 | 0% | 1,596 | 2,145 | +34% | 0 | 0 | — |
case-11 | pass→pass | 11,602 | 7,322 | -37% | 1 | 1 | 0% | 1,816 | 2,267 | +25% | 0 | 0 | — |
case-01 | fail→fail | 4,417 | 6,346 | +44% | 1 | 1 | 0% | 219 | 1,549 | +607% | 0 | 0 | — |
case-02 | fail→fail | 20,752 | 6,331 | -69% | 1 | 1 | 0% | 3,432 | 1,706 | -50% | 0 | 0 | — |
case-03 | fail→fail | 3,951 | 5,347 | +35% | 1 | 1 | 0% | 181 | 1,554 | +759% | 0 | 0 | — |
case-04 | pass→fail | 9,724 | 3,977 | -59% | 1 | 1 | 0% | 1,768 | 1,418 | -20% | 0 | 0 | — |
case-05 | pass→pass | 7,825 | 8,057 | +3% | 1 | 1 | 0% | 1,280 | 2,440 | +91% | 0 | 0 | — |
case-06 | pass→pass | 1,918 | 3,834 | +100% | 1 | 1 | 0% | 288 | 1,756 | +510% | 0 | 0 | — |
case-07 | fail→pass | 4,477 | 4,536 | +1% | 1 | 1 | 0% | 715 | 1,950 | +173% | 0 | 0 | — |
case-08 | fail→fail | 16,277 | 9,452 | -42% | 1 | 1 | 0% | 1,364 | 2,772 | +103% | 0 | 0 | — |
case-09 | pass→pass | 15,239 | 14,262 | -6% | 1 | 1 | 0% | 2,234 | 3,200 | +43% | 0 | 0 | — |
case-12 | pass→pass | 7,254 | 6,901 | -5% | 1 | 1 | 0% | 1,167 | 2,233 | +91% | 0 | 0 | — |
case-13 | fail→pass | 7,112 | 4,818 | -32% | 1 | 1 | 0% | 1,033 | 1,942 | +88% | 0 | 0 | — |
case-14 | pass→pass | 11,528 | 7,743 | -33% | 1 | 1 | 0% | 1,748 | 2,515 | +44% | 0 | 0 | — |
case-15 | pass→pass | 11,825 | 6,835 | -42% | 1 | 1 | 0% | 1,810 | 2,151 | +19% | 0 | 0 | — |
case-16 | fail→pass | 11,162 | 7,390 | -34% | 1 | 1 | 0% | 1,733 | 2,424 | +40% | 0 | 0 | — |
case-17 | pass→pass | 10,039 | 6,030 | -40% | 1 | 1 | 0% | 1,642 | 2,173 | +32% | 0 | 0 | — |
case-18 | fail→pass | 8,916 | 5,350 | -40% | 1 | 1 | 0% | 1,371 | 2,049 | +49% | 0 | 0 | — |
case-19 | pass→pass | 10,960 | 8,465 | -23% | 1 | 1 | 0% | 1,807 | 2,557 | +42% | 0 | 0 | — |
case-20 | pass→pass | 4,898 | 2,827 | -42% | 1 | 1 | 0% | 739 | 1,624 | +120% | 0 | 0 | — |
case-21 | pass→pass | 10,227 | 1,373 | -87% | 1 | 1 | 0% | 1,438 | 1,410 | -2% | 0 | 0 | — |
case-22 | pass→pass | 5,729 | 3,805 | -34% | 1 | 1 | 0% | 837 | 1,719 | +105% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +14 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.