Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use before writing any new code, function, file, or dependency — walks a decision ladder that prefers reuse over new code, and requires asking before adding anything beyond the literal request.
.claude/skills/ccplugins-smallest-change-first/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 500% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -26% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -9% | 0% |
| case-05 | ✓→✗ | ▼ Worse | -26% | 0% |
New code is a liability the moment it's written: it has to be read, tested, and maintained forever after. Most requests don't need new code at all — they need something that already exists, used correctly.
Core principle: the best code is the code you don't write.
Before writing anything, walk this ladder in order. Stop at the first step that resolves the need.
not doing the thing? Some "fixes" are actually removals.
that does this or something close enough to extend.
stdlib already providescorrectly and tested.
researcher agent) before writing custom logic — many "custom" needs are a one-line config flag.
package.json/pyproject.toml/build.gradle/etc. for a library already in use that does this, before adding a new one.
expression rather than a new abstraction?
If step 5 concludes a new dependency is genuinely warranted, or if satisfying the request would require touching files, adding abstractions, or writing code beyond the literal scope of what was asked — stop and ask the user first. Do not silently expand scope because a better version occurred to you mid-task. Surface it, explain why, let them decide.
Sometimes the right call under the ladder is still an intentional simplification — e.g. step 6/7 lands on something that works for the current case but has a known ceiling. When that happens, don't leave a silent TODO. Log it via the logging-tradeoffs skill instead: a documented, findable tradeoff beats an undocumented one every time.
| Thought | Reality | |---|---| | "I'll just add a small helper for this" | Check steps 2–4 first — it may already exist. | | "This library is heavy, I'll write my own version" | A hand-rolled subset is usually worse than the dependency, and now it's yours to maintain forever. | | "While I'm in here, I'll also clean up X" | That's scope creep. Surface it, ask, don't just do it. | | "This edge case probably won't happen" | If it's in scope, handle it; if it's not, don't add speculative handling either. |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 17,778 | 6,402 | -64% | 1 | 1 | 0% | 3,150 | 1,118 | -65% | 0 | 0 | — |
case-02 | fail→fail | 14,575 | 3,864 | -73% | 1 | 1 | 0% | 2,698 | 917 | -66% | 0 | 0 | — |
case-03 | fail→fail | 11,498 | 5,828 | -49% | 1 | 1 | 0% | 2,038 | 960 | -53% | 0 | 0 | — |
case-04 | fail→pass | 3,667 | 7,378 | +101% | 1 | 1 | 0% | 313 | 1,879 | +500% | 0 | 0 | — |
case-05 | pass→fail | 7,544 | 6,492 | -14% | 1 | 1 | 0% | 1,395 | 1,030 | -26% | 0 | 0 | — |
case-06 | fail→pass | 12,673 | 5,700 | -55% | 1 | 1 | 0% | 2,080 | 1,545 | -26% | 0 | 0 | — |
case-07 | pass→pass | 11,964 | 5,420 | -55% | 1 | 1 | 0% | 2,146 | 1,487 | -31% | 0 | 0 | — |
case-08 | pass→pass | 7,247 | 7,368 | +2% | 1 | 1 | 0% | 1,208 | 1,837 | +52% | 0 | 0 | — |
case-09 | pass→pass | 10,314 | 5,711 | -45% | 1 | 1 | 0% | 1,895 | 1,579 | -17% | 0 | 0 | — |
case-10 | fail→pass | 11,958 | 8,677 | -27% | 1 | 1 | 0% | 2,084 | 1,908 | -8% | 0 | 0 | — |
case-11 | fail→pass | 21,651 | 16,426 | -24% | 1 | 1 | 0% | 3,680 | 3,361 | -9% | 0 | 0 | — |
case-12 | fail→fail | 9,858 | 6,064 | -38% | 1 | 1 | 0% | 1,530 | 1,673 | +9% | 0 | 0 | — |
case-13 | pass→pass | 10,735 | 8,811 | -18% | 1 | 1 | 0% | 1,695 | 1,967 | +16% | 0 | 0 | — |
case-14 | pass→pass | 11,722 | 8,312 | -29% | 1 | 1 | 0% | 2,025 | 2,062 | +2% | 0 | 0 | — |
case-15 | pass→pass | 9,091 | 4,330 | -52% | 1 | 1 | 0% | 1,269 | 1,287 | +1% | 0 | 0 | — |
case-16 | pass→pass | 4,877 | 4,929 | +1% | 1 | 1 | 0% | 721 | 1,468 | +104% | 0 | 0 | — |
case-17 | pass→pass | 11,111 | 6,512 | -41% | 1 | 1 | 0% | 2,025 | 1,718 | -15% | 0 | 0 | — |
case-18 | pass→pass | 9,134 | 4,083 | -55% | 1 | 1 | 0% | 1,646 | 1,140 | -31% | 0 | 0 | — |
case-19 | pass→pass | 10,422 | 5,517 | -47% | 1 | 1 | 0% | 1,888 | 1,549 | -18% | 0 | 0 | — |
case-20 | pass→pass | 10,116 | 5,238 | -48% | 1 | 1 | 0% | 1,663 | 1,440 | -13% | 0 | 0 | — |
case-21 | pass→pass | 10,198 | 4,418 | -57% | 1 | 1 | 0% | 1,589 | 1,390 | -13% | 0 | 0 | — |
case-22 | pass→fail | 53,647 | 8,059 | -85% | 1 | 1 | 0% | 10,859 | 1,844 | -83% | 0 | 0 | — |
case-23 | pass→pass | 42,194 | 29,438 | -30% | 1 | 1 | 0% | 8,228 | 6,404 | -22% | 0 | 0 | — |
case-24 | pass→fail | 17,509 | 10,732 | -39% | 1 | 1 | 0% | 3,114 | 2,305 | -26% | 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. 24 cases were attempted, and 21 counted toward the lift figure. The other 3 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 +4 percentage points is the difference between those two pass rates over the 21 comparable cases. 5 cases got worse with the skill loaded, and they are 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.