Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Before declaring work complete, checks for loose ends - unused imports, TODO comments created, missing tests, stale references, incomplete error handling. Use when finishing features, fixing bugs, or before committing changes. The cleanup that always gets skipped.
.claude/skills/adityapeshave-sophos-loose-ends/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 216% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -12% | 0% |
Implementation feels done, but loose ends remain. The import you added but didn't use. The TODO you wrote and forgot. The test you meant to add. The console.log you left in. This skill forces a sweep before declaring victory.
Before declaring complete, run through:
any types addedRun the sweep script to find common cruft:
bashpython scripts/sweep.py
Scans for:
console.log, print(), debugger statementsTODO, FIXME, XXX, HACK commentsdd(), var_dump(), binding.pry (PHP/Ruby)bash# Find TODOs in changed files git diff --name-only | xargs grep -n "TODO\|FIXME" # Find console.log in changed files git diff --name-only | xargs grep -n "console.log" # Find unused imports (TypeScript) npx tsc --noEmit 2>&1 | grep "declared but" # Find any types added git diff | grep ": any"
Not all loose ends are equal:
| Priority | Type | Action | |----------|------|--------| | Fix now | Broken imports, missing exports | Blocks functionality | | Fix now | console.log in production code | Leaks info | | Should fix | Unused imports/variables | Code smell | | Should fix | Missing tests for new logic | Technical debt | | Note for later | Old TODOs in touched files | Existing debt | | Ignore | Style inconsistencies | Not your scope |
markdown## Loose Ends Check **Files changed:** [count] **Fixed:** - [x] Removed unused import in `file.ts` - [x] Removed console.log in `handler.ts` **Noted:** - [ ] `utils.ts:45` has existing TODO (not from this change) **Clean:** No loose ends found / All addressed
After implementing a new API endpoint:
markdown## Loose Ends Check **Files changed:** 4 **Scanning...** `api/users.ts`: - Line 3: unused import `lodash` - Removed - Line 45: console.log for debugging - Removed `types/user.ts`: - Clean `tests/users.test.ts`: - New endpoint has test - Good - Edge case (empty input) not tested - Added `services/user.ts`: - Line 23: TODO I wrote: "validate email format" - Addressed now **Result:** 4 loose ends found and fixed. Ready to commit.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 4,234 | 7,160 | +69% | 1 | 1 | 0% | 676 | 2,137 | +216% | 0 | 0 | — |
case-02 | fail→pass | 12,153 | 9,946 | -18% | 1 | 1 | 0% | 1,933 | 2,573 | +33% | 0 | 0 | — |
case-03 | fail→fail | 9,615 | 9,508 | -1% | 1 | 1 | 0% | 1,520 | 2,421 | +59% | 0 | 0 | — |
case-04 | fail→pass | 8,194 | 5,346 | -35% | 1 | 1 | 0% | 1,375 | 1,810 | +32% | 0 | 0 | — |
case-05 | pass→pass | 4,999 | 4,518 | -10% | 1 | 1 | 0% | 853 | 1,531 | +79% | 0 | 0 | — |
case-06 | pass→pass | 5,956 | 3,090 | -48% | 1 | 1 | 0% | 975 | 1,578 | +62% | 0 | 0 | — |
case-07 | fail→pass | 6,269 | 2,454 | -61% | 1 | 1 | 0% | 954 | 1,425 | +49% | 0 | 0 | — |
case-08 | pass→pass | 7,892 | 6,225 | -21% | 1 | 1 | 0% | 1,263 | 2,110 | +67% | 0 | 0 | — |
case-09 | pass→pass | 9,599 | 6,110 | -36% | 1 | 1 | 0% | 1,700 | 2,064 | +21% | 0 | 0 | — |
case-10 | pass→pass | 10,511 | 4,868 | -54% | 1 | 1 | 0% | 1,626 | 1,644 | +1% | 0 | 0 | — |
case-11 | fail→pass | 7,565 | 3,275 | -57% | 1 | 1 | 0% | 1,554 | 1,361 | -12% | 0 | 0 | — |
case-12 | pass→pass | 11,415 | 4,672 | -59% | 1 | 1 | 0% | 1,913 | 1,830 | -4% | 0 | 0 | — |
case-13 | pass→pass | 15,737 | 9,864 | -37% | 1 | 1 | 0% | 2,458 | 2,621 | +7% | 0 | 0 | — |
case-14 | pass→pass | 14,507 | 9,117 | -37% | 1 | 1 | 0% | 2,320 | 2,528 | +9% | 0 | 0 | — |
case-15 | fail→pass | 12,581 | 5,869 | -53% | 1 | 1 | 0% | 1,994 | 1,737 | -13% | 0 | 0 | — |
case-16 | pass→pass | 12,501 | 5,887 | -53% | 1 | 1 | 0% | 2,066 | 1,880 | -9% | 0 | 0 | — |
case-17 | pass→pass | 10,579 | 4,591 | -57% | 1 | 1 | 0% | 1,557 | 1,723 | +11% | 0 | 0 | — |
case-18 | pass→pass | 13,588 | 2,027 | -85% | 1 | 1 | 0% | 2,364 | 1,316 | -44% | 0 | 0 | — |
case-19 | pass→pass | 19,526 | 19,761 | +1% | 1 | 1 | 0% | 3,220 | 4,174 | +30% | 0 | 0 | — |
case-20 | pass→pass | 6,088 | 4,124 | -32% | 1 | 1 | 0% | 1,000 | 1,630 | +63% | 0 | 0 | — |
case-21 | pass→fail | 10,540 | 8,684 | -18% | 1 | 1 | 0% | 2,006 | 2,700 | +35% | 0 | 0 | — |
case-22 | pass→pass | 4,987 | 3,485 | -30% | 1 | 1 | 0% | 899 | 1,556 | +73% | 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. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 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.