Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Evaluate-Loop Step 5: FIX. Use this agent when an evaluation (plan or execution) returns FAIL. Takes the evaluator's fix list, creates specific fix tasks in plan.md, executes the fixes, and triggers re-evaluation. Handles the loop-back mechanism of the Evaluate-Loop. Triggered by: evaluation FAIL verdict, 'fix issues', 'address evaluation failures'.
.claude/skills/ibrahim-3d-loop-fixer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 73% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 174% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 1726% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 204% | 0% |
Handles the loop-back when an evaluation fails. Takes the evaluator's failure report, converts it into fix tasks, executes them, and hands back to the evaluator for re-check.
loop-plan-evaluator or loop-execution-evaluatorplan.md — to add fix tasksspec.md — to verify fixes align with requirementsread_file the evaluation report and extract:
Add a "Fix Phase" section to plan.md:
markdown## Fix Phase (from Evaluation on [date]) ### Issues to Fix Source: [loop-plan-evaluator / loop-execution-evaluator] report - [ ] Fix 1: [Specific action from evaluator] - Issue: [What failed] - Acceptance: [How to verify this is fixed] - [ ] Fix 2: [Specific action] - Issue: [What failed] - Acceptance: [How to verify]
Follow the same protocol as loop-executor:
[~] when starting[x] with commit SHA and summary when doneBefore handing back to evaluator, do a quick self-check:
markdown## Fix Summary **Fixes Completed**: [X]/[Y] **Commits**: [list] **Self-Check**: [PASS/CONCERNS] **Ready for**: Re-evaluation → hand back to [loop-plan-evaluator / loop-execution-evaluator]
The fix cycle continues until the evaluator returns PASS:
FAIL → Fixer creates fix tasks → Fixer executes → Evaluator re-checks
│ │
│ PASS → Done ✅
│ FAIL → loop again
└──────────────────────────────────────────────┘completed-with-warnings (NEVER ask user)[x] with summaryThe fixer MUST update the track's metadata.json at key points:
json{ "loop_state": { "current_step": "FIX", "step_status": "IN_PROGRESS", "step_started_at": "[ISO timestamp]", "fix_cycle_count": 1, "checkpoints": { "FIX": { "status": "IN_PROGRESS", "started_at": "[ISO timestamp]", "agent": "loop-fixer", "cycle": 1, "fixes_applied": [], "fixes_remaining": ["Fix 1", "Fix 2", "Fix 3"] } } } }
json{ "loop_state": { "checkpoints": { "FIX": { "status": "IN_PROGRESS", "fixes_applied": [ { "issue": "Lock propagation broken", "fix": "Updated cascade logic", "commit_sha": "abc1234" } ], "fixes_remaining": ["Fix 2", "Fix 3"] } } } }
json{ "loop_state": { "current_step": "EVALUATE_EXECUTION", "step_status": "NOT_STARTED", "checkpoints": { "FIX": { "status": "PASSED", "completed_at": "[ISO timestamp]", "cycle": 1, "fixes_applied": [ { "issue": "Lock propagation broken", "fix": "Updated cascade logic", "commit_sha": "abc1234" }, { "issue": "Missing test coverage", "fix": "Added unlock tests", "commit_sha": "def5678" } ], "fixes_remaining": [] }, "EVALUATE_EXECUTION": { "status": "NOT_STARTED" } } } }
fix_cycle_count in loop_state tracks total cycles across the trackcycle field tracks which cycle numberfix_cycle_count >= 5: Mark track as completed-with-warnings — NEVER ask userjson{ "loop_state": { "current_step": "COMPLETE", "step_status": "PASSED_WITH_WARNINGS", "checkpoints": { "FIX": { "status": "COMPLETED_WITH_WARNINGS" } } }, "warnings": [{ "id": "warning-1", "description": "Fix cycle limit exceeded (5 cycles)", "logged_at": "[timestamp]", "unresolved_issues": ["list of remaining failures"] }] }
metadata.jsonfix_cycle_count — if >= 5, complete with warnings (NEVER ask user)fix_cycle_count at startfixes_applied and fixes_remaining after each fixcurrent_step back to the evaluator stepmetadata.jsonAfter fixes complete → Conductor dispatches the original evaluator agent to re-run:
loop-plan-evaluatorloop-execution-evaluator| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 4,334 | 13,086 | +202% | 1 | 1 | 0% | 150 | 1,745 | +1063% | 0 | 0 | — |
case-02 | fail→fail | 3,254 | 5,393 | +66% | 1 | 1 | 0% | 322 | 1,869 | +480% | 0 | 0 | — |
case-03 | fail→fail | 3,877 | 3,254 | -16% | 1 | 1 | 0% | 117 | 1,656 | +1315% | 0 | 0 | — |
case-04 | pass→pass | 15,659 | 18,119 | +16% | 1 | 1 | 0% | 2,696 | 4,420 | +64% | 0 | 0 | — |
case-05 | fail→fail | 9,594 | 5,207 | -46% | 1 | 1 | 0% | 169 | 1,737 | +928% | 0 | 0 | — |
case-06 | pass→fail | 6,084 | 11,507 | +89% | 1 | 1 | 0% | 1,108 | 3,461 | +212% | 0 | 0 | — |
case-07 | fail→pass | 8,405 | 5,476 | -35% | 1 | 1 | 0% | 1,475 | 2,549 | +73% | 0 | 0 | — |
case-08 | fail→fail | 3,916 | 5,842 | +49% | 1 | 1 | 0% | 207 | 2,056 | +893% | 0 | 0 | — |
case-09 | fail→pass | 5,406 | 6,745 | +25% | 1 | 1 | 0% | 1,008 | 2,765 | +174% | 0 | 0 | — |
case-10 | fail→pass | 4,377 | 6,180 | +41% | 1 | 1 | 0% | 155 | 2,831 | +1726% | 0 | 0 | — |
case-11 | pass→pass | 7,896 | 4,036 | -49% | 1 | 1 | 0% | 1,341 | 2,177 | +62% | 0 | 0 | — |
case-12 | fail→pass | 7,433 | 4,088 | -45% | 1 | 1 | 0% | 1,337 | 2,249 | +68% | 0 | 0 | — |
case-13 | fail→pass | 4,744 | 4,245 | -11% | 1 | 1 | 0% | 750 | 2,278 | +204% | 0 | 0 | — |
case-14 | pass→fail | 3,566 | 3,832 | +7% | 1 | 1 | 0% | 583 | 2,177 | +273% | 0 | 0 | — |
case-15 | fail→pass | 8,187 | 5,470 | -33% | 1 | 1 | 0% | 1,374 | 2,524 | +84% | 0 | 0 | — |
case-16 | fail→pass | 5,878 | 4,248 | -28% | 1 | 1 | 0% | 1,126 | 2,350 | +109% | 0 | 0 | — |
case-17 | fail→pass | 9,688 | 4,482 | -54% | 1 | 1 | 0% | 1,587 | 2,372 | +49% | 0 | 0 | — |
case-18 | fail→pass | 11,085 | 6,062 | -45% | 1 | 1 | 0% | 1,832 | 2,645 | +44% | 0 | 0 | — |
case-19 | fail→pass | 5,986 | 5,047 | -16% | 1 | 1 | 0% | 1,011 | 2,607 | +158% | 0 | 0 | — |
case-20 | fail→pass | 7,008 | 3,859 | -45% | 1 | 1 | 0% | 1,326 | 2,236 | +69% | 0 | 0 | — |
case-21 | pass→pass | 7,046 | 1,980 | -72% | 1 | 1 | 0% | 1,216 | 1,852 | +52% | 0 | 0 | — |
case-22 | pass→pass | 11,317 | 6,911 | -39% | 1 | 1 | 0% | 1,893 | 2,772 | +46% | 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 16 counted toward the lift figure. The other 6 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 +41 percentage points is the difference between those two pass rates over the 16 comparable cases. 2 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.