/exp-pilot-eval
SkillDev toolsPilot result evaluation — read pilot results, apply success criteria, update idea page (pilot_result, failure_reason if failed), generate PILOT_VERDICT_REPORT. Called by /ideate Phase 5 after /exp-pilot-run.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the /exp-pilot-eval skill
What this skill tells your AI
The instructions your AI receives, as published by skyllwt/autosci in .claude/skills/exp-pilot-eval/SKILL.md and read by ahel’s review.
Evaluate pilot experiment results and update the linked idea page. Reads pilot results from
experiments/pilot/code/{slug}/results/, applies verdict logic (pass/fail/inconclusive), and updates the idea'spilot_result,failure_reason, andstatusfields. Called by/ideatePhase 5 after/exp-pilot-runcompletes.
Inputs
idea-slug: slug of the idea whose pilot was just run--auto(optional): automatic mode, no pause for user confirmation (used when called by/research)
Outputs
wiki/ideas/{slug}.md— updatedpilot_result(always),failure_reason(if failed),status(if failed →failed)wiki/log.md— appended log entry- PILOT_VERDICT_REPORT (printed to terminal) — verdict, wiki change summary, next step suggestions
experiments/pilot/{slug}/report.md— PILOT_VERDICT_REPORT file copy (persistent record)
Wiki Interaction
Reads
wiki/ideas/{slug}.md— linked idea current state:status,pilot_result,failure_reasonexperiments/pilot/code/{slug}/results/seed_*.json— pilot experiment resultsexperiments/pilot/code/{slug}/pilot.log— pilot run log (for failure diagnosis: errors, warnings, runtime behavior)experiments/pilot/{slug}.yaml— Pilot Spec (for success_criterion and baseline reference)
Writes
wiki/ideas/{slug}.md— updatepilot_result,failure_reason(if failed),status(if failed)wiki/log.md— append operation logexperiments/pilot/{slug}/report.md— PILOT_VERDICT_REPORT file copy
Graph edges created
- None. Pilot evaluations do not create graph edges (those are for formal experiments via
/exp-eval).
Workflow
Step 1: Load Context
-
Read idea page
wiki/ideas/{slug}.md:- Current
statusandpilot_result - Current
failure_reason(should be empty for proposed ideas)
- Current
-
Read pilot results from
experiments/pilot/code/{slug}/results/seed_*.json:- Parse result files (JSON)
- Compute mean ± std per metric (across seeds)
-
Read pilot log from
experiments/pilot/code/{slug}/pilot.log:- Scan for errors, warnings, OOM, divergence signals
- Extract runtime behavior context for failure diagnosis and verdict report
-
Read Pilot Spec from
experiments/pilot/{slug}.yaml:- Extract
success_criterion(pass, fail, inconclusive conditions) - Extract
baseline.expected_valuefor comparison
- Extract
Step 2: Apply Verdict Logic
Evaluate the pilot results against the success_criterion from the Pilot Spec. The verdict thresholds are intentionally lenient — the purpose of a pilot is to detect obvious failures, not to measure final performance.
- Pass: pilot does NOT show clear failure. Since pilots use reduced batch size (1/4–1/8 of paper's) and shortened training (10–30% of full steps), results are inherently noisy and biased downward. Therefore: improvement over baseline, roughly on par with baseline, or even slightly worse than baseline all count as pass. Also passes if the gap is confirmed (path C: existing methods indeed fail under new setting).
- Fail: pilot shows clear, unambiguous failure (divergence, severe degradation vs baseline, fundamental incompatibility). The threshold is high — only ideas that are clearly broken should fail at this stage.
- Inconclusive: pilot is noisy or ambiguous — results don't clearly pass or fail.
Step 3: Update Idea Page
If verdict == pass:
- Set
pilot_result:"pass — <one-sentence summary of key metric vs baseline>" - Status unchanged (stays
proposedor current) - Example:
"pass — accuracy 0.82 vs baseline 0.80, loss converges"
If verdict == fail:
- Set
pilot_result:"fail — <specific failure>" - Set
failure_reason:"[pilot] <specific failure description>"- The
[pilot]prefix distinguishes pilot failures from[filter]eliminations (Phase 3) and post-experiment failures from/exp-eval
- The
- Transition status to
failed:python3 tools/research_wiki.py set-meta wiki/ideas/{slug}.md pilot_result "fail — <specific failure>" python3 tools/research_wiki.py transition wiki/ideas/{slug}.md --to failed --reason "[pilot] <specific failure description>"transitionvalidates lifecycle rules (e.g. refuses to downgradevalidated→failed) and auto-setsfailure_reasonanddate_resolved.
- Example failure_reason:
"[pilot] loss diverged after 50 steps (reached 1e5 vs baseline 0.3)"
If verdict == inconclusive:
- Set
pilot_result:"inconclusive — needs full experiment" - Status unchanged
Step 4: Report
-
If
--autois not set: display verdict and wiki changes in terminal, wait for user confirmation on borderline cases -
Append log:
python3 tools/research_wiki.py log wiki/ \ "exp-pilot-eval | {slug} | verdict: {verdict} | pilot_result: {result}" -
Print PILOT_VERDICT_REPORT to terminal and write to
experiments/pilot/{slug}/report.md:# Pilot Verdict Report: {slug} ## Verdict: {pass / fail / inconclusive} ## Results Summary | Metric | Baseline | Pilot (mean±std) | Δ | |--------|----------|------------------|---| | {metric} | {baseline-value} | {mean}±{std} | {delta} | ## Pilot Log - Log: experiments/pilot/code/{slug}/pilot.log - Key signals: {errors / warnings / OOM / divergence observed in log, or "clean run"} ## Wiki Changes | Page | Field | Old | New | |------|-------|-----|-----| | ideas/{slug} | pilot_result | {old} | {new} | | ideas/{slug} | status | {old} | {new} | (only if changed) | | ideas/{slug} | failure_reason | — | {new} | (only if failed) | ## Next Steps - {if pass: proceed to /exp-design for full experiments} - {if fail: idea eliminated; review pilot log for details} - {if inconclusive: proceed to full experiment with caution}
Constraints
- Only processes pilot-tested ideas: results must exist in
experiments/pilot/code/{slug}/results/ - failure_reason must be specific: not vague "pilot failed" — include what failed and why
- Idea lifecycle is forward-only:
proposed → failed(cannot regress validated → failed) - Does NOT create graph edges: those are for formal experiments via
/exp-eval - Pilot pass threshold is intentionally low: detect obvious failures, not measure final performance
- The
[pilot]prefix is mandatory on failure_reason: distinguishes from[filter]and post-experiment failures
Error Handling
- Idea page not found: report error, suggest running
/ideatefirst - Pilot results not found: report error, suggest running
/exp-pilot-runfirst - Idea already failed: report current state, do not overwrite
- Idea already validated: refuse to downgrade status, report warning
- Pilot Spec not found: report error, suggest running
/ideatefirst to generate the spec
Dependencies
Skills (via Skill tool)
- None
Tools (via Bash)
python3 tools/research_wiki.py set-meta wiki/ideas/{slug}.md <field> "<value>"— update idea fields (e.g. pilot_result)python3 tools/research_wiki.py transition wiki/ideas/{slug}.md --to <status> [--reason "..."]— transition idea lifecycle statuspython3 tools/research_wiki.py log wiki/ "<message>"— append log
Claude Code Native
Read— read idea page, pilot results, pilot log, Pilot SpecEdit— update idea page fieldsBash— execute research_wiki.py commands
Called by
/ideatePhase 5- User directly
Signals
- GitHub stars
- 2k
- Forks
- 210
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
exp-pilot-eval- Source
- github.com/skyllwt/autosci