Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Evaluate-Loop Step 4: EVALUATE EXECUTION. This is the dispatcher agent — it determines the track type and invokes the correct specialized evaluator. Does NOT run a generic checklist. Instead dispatches to: eval-ui-ux (screens/design), eval-code-quality (features/infrastructure), eval-integration (APIs/auth/payments), eval-business-logic (generator/rules/state). Triggered by: 'evaluate execution', 'review implementation', 'check build', '/phase-review'. Always runs after loop-executor.
.claude/skills/ibrahim-3d-loop-execution-evaluator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 185% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 38% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 30% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 122% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 43% | 0% |
This agent does NOT evaluate directly. It determines the track type and dispatches the correct specialized evaluator.
Different track types need fundamentally different checks:
A generic checklist misses critical issues specific to each type.
read_file the track's metadata.json and spec.md to determine the track type, then dispatch:
| Track Type | Keywords in spec/metadata | Evaluator | |-----------|--------------------------|-----------| | UI / Design | "screen", "component", "design system", "layout", "visual", "UI shell" | eval-ui-ux | | Feature / Code | "implement", "feature", "refactor", "infrastructure", "hook", "store" | eval-code-quality | | Integration | "Supabase", "Stripe", "Gemini", "API", "auth", "database", "webhook" | eval-integration | | Business Logic | "generation", "lock", "dependency", "pricing", "tier", "pipeline", "download" | eval-business-logic |
Some tracks need multiple evaluators. For example:
eval-business-logic + eval-code-qualityeval-integration + eval-code-qualityeval-ui-ux onlyWhen multiple evaluators apply, run them all. The track passes only if ALL evaluators pass.
1. read_file track metadata.json + spec.md
2. Determine track type(s)
3. Dispatch evaluator(s):
→ eval-ui-ux (if UI track)
→ eval-code-quality (if code/feature track)
→ eval-integration (if integration track)
→ eval-business-logic (if logic track)
4. Collect results from all dispatched evaluators
5. Aggregate into final verdictRegardless of track type, always verify these baseline checks:
| Check | Method | |-------|--------| | plan.md updated | All completed tasks marked [x] with commit SHA and summary | | Scope alignment | No unplanned work added without documentation | | No skipped tasks | All [ ] tasks either completed or documented as intentionally deferred | | Build passes | npm run build exits 0 | | Business docs in sync | If track made pricing/model/business decisions, verify docs are flagged for Step 5.5 sync |
If the track made any business-impacting changes, verify:
Business Doc Sync Required: YesWhat counts as business-impacting:
See ${CLAUDE_PLUGIN_ROOT}/skills/business-docs-sync/SKILL.md for the full registry.
markdown## Execution Evaluation Report **Track**: [track-id] **Evaluator**: loop-execution-evaluator (dispatcher) **Date**: [YYYY-MM-DD] ### Evaluators Dispatched | Evaluator | Reason | Verdict | |-----------|--------|---------| | eval-ui-ux | Track builds P0 screens | PASS ✅ / FAIL ❌ | | eval-code-quality | Track implements features | PASS ✅ / FAIL ❌ | ### Structural Checks - plan.md updated: YES / NO - Scope alignment: YES / NO - Build passes: YES / NO - Business doc sync needed: YES / NO (if YES, list affected docs) ### Final Verdict: PASS ✅ / FAIL ❌ All evaluators must PASS for the track to pass. [If FAIL, aggregate all fix actions from all evaluators]
The execution evaluator MUST update the track's metadata.json at key points:
json{ "loop_state": { "current_step": "EVALUATE_EXECUTION", "step_status": "IN_PROGRESS", "step_started_at": "[ISO timestamp]", "checkpoints": { "EVALUATE_EXECUTION": { "status": "IN_PROGRESS", "started_at": "[ISO timestamp]", "agent": "loop-execution-evaluator" } } } }
json{ "loop_state": { "current_step": "BUSINESS_SYNC", "step_status": "NOT_STARTED", "checkpoints": { "EVALUATE_EXECUTION": { "status": "PASSED", "completed_at": "[ISO timestamp]", "verdict": "PASS", "evaluators_run": [ { "evaluator": "eval-code-quality", "verdict": "PASS", "issues": [] }, { "evaluator": "eval-business-logic", "verdict": "PASS", "issues": [] } ], "business_sync_required": true }, "BUSINESS_SYNC": { "status": "NOT_STARTED", "required": true } } } }
json{ "loop_state": { "current_step": "FIX", "step_status": "NOT_STARTED", "checkpoints": { "EVALUATE_EXECUTION": { "status": "FAILED", "completed_at": "[ISO timestamp]", "verdict": "FAIL", "evaluators_run": [ { "evaluator": "eval-code-quality", "verdict": "PASS", "issues": [] }, { "evaluator": "eval-business-logic", "verdict": "FAIL", "issues": ["Business rule violation found"] } ], "failure_items": [ "Fix business rule enforcement in resolver", "Add test coverage for edge case" ] }, "FIX": { "status": "NOT_STARTED", "cycle": 1 } } } }
metadata.jsonloop_state.checkpoints.EVALUATE_EXECUTION with resultscurrent_step to BUSINESS_SYNCcurrent_step to COMPLETEcurrent_step to FIX, increment fix_cycle_count in loop_statemetadata.jsonloop-fixer with combined fix list| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 4,423 | 23,944 | +441% | 1 | 1 | 0% | 350 | 2,217 | +533% | 0 | 0 | — |
case-02 | fail→fail | 5,373 | 6,124 | +14% | 1 | 1 | 0% | 291 | 2,155 | +641% | 0 | 0 | — |
case-03 | fail→fail | 4,754 | 6,049 | +27% | 1 | 1 | 0% | 286 | 2,192 | +666% | 0 | 0 | — |
case-04 | fail→pass | 4,754 | 2,184 | -54% | 1 | 1 | 0% | 754 | 2,152 | +185% | 0 | 0 | — |
case-05 | fail→pass | 11,491 | 5,148 | -55% | 1 | 1 | 0% | 1,933 | 2,676 | +38% | 0 | 0 | — |
case-06 | fail→pass | 12,835 | 6,339 | -51% | 1 | 1 | 0% | 2,221 | 2,880 | +30% | 0 | 0 | — |
case-07 | fail→pass | 5,771 | 1,496 | -74% | 1 | 1 | 0% | 883 | 1,961 | +122% | 0 | 0 | — |
case-08 | fail→pass | 11,723 | 4,658 | -60% | 1 | 1 | 0% | 1,866 | 2,662 | +43% | 0 | 0 | — |
case-09 | pass→pass | 13,372 | 5,462 | -59% | 1 | 1 | 0% | 2,149 | 2,876 | +34% | 0 | 0 | — |
case-10 | pass→pass | 10,328 | 2,660 | -74% | 1 | 1 | 0% | 1,888 | 2,285 | +21% | 0 | 0 | — |
case-11 | pass→pass | 5,973 | 1,543 | -74% | 1 | 1 | 0% | 998 | 1,978 | +98% | 0 | 0 | — |
case-12 | fail→pass | 8,473 | 5,411 | -36% | 1 | 1 | 0% | 1,493 | 2,941 | +97% | 0 | 0 | — |
case-13 | fail→pass | 7,850 | 2,057 | -74% | 1 | 1 | 0% | 1,257 | 2,122 | +69% | 0 | 0 | — |
case-14 | pass→pass | 2,774 | 2,228 | -20% | 1 | 1 | 0% | 362 | 2,127 | +488% | 0 | 0 | — |
case-15 | pass→pass | 8,846 | 3,196 | -64% | 1 | 1 | 0% | 1,409 | 2,305 | +64% | 0 | 0 | — |
case-16 | pass→pass | 12,879 | 5,878 | -54% | 1 | 1 | 0% | 1,763 | 2,773 | +57% | 0 | 0 | — |
case-17 | fail→pass | 9,571 | 1,281 | -87% | 1 | 1 | 0% | 1,537 | 1,976 | +29% | 0 | 0 | — |
case-18 | fail→pass | 8,408 | 3,211 | -62% | 1 | 1 | 0% | 1,212 | 2,364 | +95% | 0 | 0 | — |
case-19 | pass→pass | 9,205 | 4,028 | -56% | 1 | 1 | 0% | 1,384 | 2,430 | +76% | 0 | 0 | — |
case-20 | fail→fail | 5,091 | 5,784 | +14% | 1 | 1 | 0% | 243 | 2,092 | +761% | 0 | 0 | — |
case-21 | fail→fail | 19,815 | 4,048 | -80% | 1 | 1 | 0% | 3,264 | 2,081 | -36% | 0 | 0 | — |
case-22 | fail→pass | 15,326 | 12,186 | -20% | 1 | 1 | 0% | 2,811 | 3,362 | +20% | 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 17 counted toward the lift figure. The other 5 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 +45 percentage points is the difference between those two pass rates over the 17 comparable cases.
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.