/exp-eval
SkillAI & modelsExperiment verdict gate — Review LLM independently judges results → 4 verdict paths → auto-update the linked idea's status / failure_reason and graph edges
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-eval skill
What this skill tells your AI
The instructions your AI receives, as published by skyllwt/autosci in .claude/skills/exp-eval/SKILL.md and read by ahel’s review.
Convert completed experiment results into wiki knowledge updates. Review LLM acts as an impartial judge (following cross-model-review), independently evaluating how experimental results affect the linked idea's hypothesis. Four verdict paths: supported → idea validated / partially_supported → supplementary experiments / not_supported → idea failed / inconclusive → debug. Auto-updates the linked idea's
status,failure_reason, and graph edges.
Inputs
experiment: slug fromwiki/experiments/(status must becompleted)--auto(optional): automatic mode — do not pause for user confirmation before wiki updates (used when called by /research)
Outputs
wiki/ideas/{linked-idea}.md— updatedstatus,failure_reason,date_resolvedwiki/experiments/{slug}.md—## Idea updatessection filled in (records the linked idea's status transition; replaces the legacy## Claim updatesheading)wiki/graph/edges.jsonl— newsupports/invalidatesedges added (experiment → idea)wiki/graph/context_brief.md— rebuiltwiki/graph/open_questions.md— rebuiltwiki/log.md— appended log entry- VERDICT_REPORT (printed to terminal) — verdict result, wiki change summary, next step suggestions
Wiki Interaction
Reads
wiki/experiments/{slug}.md— experiment results:outcome,key_result,metrics, full Results section,linked_ideawiki/ideas/{linked-idea}.md— linked idea current state:status,## Hypothesis,## Riskswiki/experiments/*.md— sibling experiments with the samelinked_idea(aggregate assessment)wiki/graph/context_brief.md— global context.claude/skills/shared-references/cross-model-review.md— reviewer independence principle
Writes
wiki/ideas/{linked-idea}.md— updatestatus,failure_reason,date_resolvedwiki/experiments/{slug}.md— fill in## Idea updatessectionwiki/graph/edges.jsonl— addsupports/invalidatesedges (experiment → idea)wiki/graph/context_brief.md— rebuildwiki/graph/open_questions.md— rebuildwiki/log.md— append operation log
Graph edges created
supports: experiment → idea (experiment supports the idea's hypothesis) — verdict = supported or partially_supportedinvalidates: experiment → idea (experiment refutes the idea's hypothesis) — verdict = not_supported
Workflow
Precondition:
- Confirm working directory is the wiki project root (directory containing
wiki/,raw/,tools/) - Confirm experiment status ==
completed(incomplete experiments cannot be evaluated)
Step 1: Load Context
-
Read experiment page
wiki/experiments/{slug}.md:outcome(succeeded/failed/inconclusive)key_resultlinked_ideaslug (mandatory; refuse to proceed if missing)metricsand full## Resultssectionhypothesis
-
Read linked idea
wiki/ideas/{linked-idea}.md:- Current
status ## Hypothesis,## Approach sketch,## Risks,## Novelty argument
- Current
-
Load sibling experiments (same
linked_idea):- Glob
wiki/experiments/*.md, filterlinked_idea == this idea - Summarize their outcomes (the verdict considers the whole evidence portfolio, not just this one experiment)
- Glob
-
Read global context:
wiki/graph/context_brief.md -
Read cross-model-review.md: confirm Review LLM independence principle
Step 2: Review LLM Verdict (Cross-Model Verdict)
Follow cross-model-review.md: do not send Claude's pre-judgment to Review LLM.
mcp__llm-review__chat:
system: "You are an impartial scientific judge evaluating whether experimental
results support or refute a research hypothesis. Be rigorous and objective.
Consider: statistical significance, effect size, experimental validity,
potential confounds, and whether the results generalize beyond the
specific setup tested."
message: |
## Idea Hypothesis Under Test
Title: {idea title}
Hypothesis: {idea ## Hypothesis section}
Novelty argument: {idea ## Novelty argument section}
Current status: {idea status}
## Experiment
Title: {experiment title}
Hypothesis: {experiment hypothesis}
Setup: {model, dataset, hardware, framework}
Metrics: {metrics list}
## Results
{full Results section from experiment page}
## Key Finding
{key_result}
## Sibling Experiments on This Idea
{summary of other experiments' outcomes that share the same linked_idea, if any}
## Your Task
Provide your verdict:
1. **Verdict**: One of: supported / partially_supported / not_supported / inconclusive
2. **Evidence strength**: weak / moderate / strong
3. **Idea status recommendation**: keep current / advance to validated / mark failed
4. **Key reasoning**: 2-3 sentences explaining your verdict
5. **Concerns**: Any methodological concerns or limitations
6. **Suggested next steps**: What would strengthen or clarify this result?
Record Review LLM's verdict.
Step 3: Claude Synthesis
-
Form Claude's independent verdict (after reading Review LLM's verdict, Claude also analyzes independently):
- Based on experimental results, the idea's hypothesis, and aggregate evidence from sibling experiments
- Form Claude's own verdict and idea-status recommendation
-
Synthesize both verdicts (follow cross-model-review.md composing rules):
- Both agree (same verdict): use that verdict, high certainty
- Both disagree:
- Explicitly flag the disagreement
- Take the more conservative verdict (supported > partially_supported > not_supported)
- Detail the disagreement reason in the report
- Fatal findings take priority: if either party finds a methodological issue (data leakage, unfair comparison), that finding takes precedence
-
Determine final verdict: verdict + evidence_strength + idea_status_change
Step 4: Update Wiki Based on Verdict
If --auto is not set: display verdict and planned changes first, wait for user confirmation.
Path A: SUPPORTED (experiment supports the idea's hypothesis)
-
Update idea:
- If the idea covers a single hypothesis and this experiment is the main experiment block, transition the idea to
validated:python3 tools/research_wiki.py transition wiki/ideas/{linked-idea}.md --to validated - Otherwise leave the idea in its current lifecycle state (
testedif it had previously been;in_progressif not).
- If the idea covers a single hypothesis and this experiment is the main experiment block, transition the idea to
-
Add graph edge:
python3 tools/research_wiki.py add-edge wiki/ \ --from "experiments/{slug}" --to "ideas/{linked-idea}" \ --type supports --evidence "{key_result}" -
Suggest next steps:
/paper-plan {linked-idea}or continue ablation/robustness experiments
Path B: PARTIALLY_SUPPORTED (partial support)
-
Update idea:
- Lifecycle stays at the current state (
in_progressortested)
- Lifecycle stays at the current state (
-
Add graph edge:
python3 tools/research_wiki.py add-edge wiki/ \ --from "experiments/{slug}" --to "ideas/{linked-idea}" \ --type supports --evidence "Partially supported: {limitation}" -
Suggest supplementary experiments:
- Specify what evidence is missing
- Suggest using
/exp-design --linked-idea {linked-idea}to design supplementary experiments - If Review LLM-flagged concerns are addressable by experiment, suggest concrete experiment direction
Path C: NOT_SUPPORTED (experiment refutes the idea's hypothesis)
-
Update idea:
- Transition to
failed:python3 tools/research_wiki.py transition wiki/ideas/{linked-idea}.md --to failed --reason "<concrete reason>"transitionrequires a non-empty--reason; supply the synthesized failure reason here. Thetransitioncommand writesfailure_reasonanddate_resolvedautomatically. - Note:
failure_reasonis anti-repetition memory — it must state the concrete reason, not vague "did not work".
- Transition to
-
Add graph edge:
python3 tools/research_wiki.py add-edge wiki/ \ --from "experiments/{slug}" --to "ideas/{linked-idea}" \ --type invalidates --evidence "{failure_reason}" -
Suggest next steps:
- Analyze the failure reason
- Consider pivoting (new idea addressing the same gap while avoiding the known failure)
- Suggest
/ideateto generate alternatives
Path D: INCONCLUSIVE (results are uncertain)
-
Do not modify idea status: insufficient evidence to make a judgment
-
Update experiment page: outcome is already inconclusive (set by /exp-run)
-
Suggest debugging:
- Data issue? Implementation bug? Wrong metric?
- Too much variance? More seeds needed?
- Experiment setup not aligned with the idea's hypothesis?
-
Idea status unchanged: keep current status
All Paths (common steps)
-
Fill in the
## Idea updatessection of the experiment page (records changes to the linked idea, not a separate claim entity):## Idea updates - **Verdict**: {supported/partially_supported/not_supported/inconclusive} - **Linked idea**: [[{linked-idea}]] status {old} → {new} - **Judge agreement**: {Claude and Review LLM agreed / disagreed on ...} - **Date**: YYYY-MM-DD -
Update index.md (if idea status changed)
-
Rebuild derived data:
python3 tools/research_wiki.py rebuild-context-brief wiki/ python3 tools/research_wiki.py rebuild-open-questions wiki/ -
Append log:
python3 tools/research_wiki.py log wiki/ \ "exp-eval | {slug} → ideas/{linked-idea} | verdict: {verdict} | idea status: {old}→{new}" -
Print VERDICT_REPORT to terminal:
# Verdict Report: {experiment title} ## Verdict: {SUPPORTED / PARTIALLY_SUPPORTED / NOT_SUPPORTED / INCONCLUSIVE} ## Judge Assessment | | Claude | Review LLM | Final | |---|-------|------|-------| | Verdict | {verdict} | {verdict} | {verdict} | | Idea status rec | {rec} | {rec} | {rec} | | Evidence strength | {strength} | {strength} | {strength} | ## Key Reasoning {2-3 sentences from Review LLM + Claude synthesis} ## Wiki Changes | Entity | Field | Before | After | |--------|-------|--------|-------| | ideas/{slug} | status | {old} | {new} | ## Graph Edges Added - experiments/{slug} → ideas/{linked-idea} (supports/invalidates) ## Concerns {methodological concerns from Review LLM} ## Next Steps - {path-specific suggestions} ## Wiki Growth | Metric | Before | After | Delta | |--------|--------|-------|-------| | Ideas validated | {before} | {after} | +{delta} | | Ideas failed | {before} | {after} | +{delta} | | Edges | {before} | {after} | +{delta} | | Maturity | {level} | {level} | {unchanged/upgraded} | (Data from comparing `python3 tools/research_wiki.py maturity wiki/ --json` calls at the start of Step 1 and end of Step 4.)
Constraints
- Only process completed experiments: experiments with status != completed are refused; prompt user to use /exp-run first.
linked_ideais mandatory: refuse to evaluate any experiment whoselinked_ideais empty (the new schema enforces this; if you encounter such a page it is a pre-refactor artifact and must be fixed manually).- Reviewer independence: strictly follow cross-model-review.md — do not send Claude's pre-judgment to Review LLM.
failure_reasonmust be specific: the not_supported path'sfailure_reasoncannot be vague (e.g. "experiment failed") — must state the concrete reason.transition --reasonrejects an empty string.- Idea lifecycle is forward-only:
proposed → in_progress → tested → validated/failed. Usetools/research_wiki.py transition(not direct frontmatter writes) so the lifecycle validator runs. - Graph edges via tools/research_wiki.py: do not manually edit
edges.jsonl. - Conservative principle: when Claude and Review LLM verdicts disagree, use the more conservative verdict.
- Assess using all sibling experiments: consider not just the current experiment but also other experiments sharing the same
linked_idea.
Error Handling
- Experiment not found: prompt user to check slug, list candidates in
wiki/experiments/with status=completed. - Experiment not completed: report status, suggest running
/exp-run {slug}or/exp-run {slug} --check. linked_ideamissing: refuse to proceed; instruct the user to run/editto set the experiment'slinked_idea.- Linked idea page does not exist: report a dangling reference; refuse to update — recommend
/editor/ideateto create the idea page first. - Review LLM unavailable: fall back to Claude single-model verdict, note "single-model verdict, cross-model verification unavailable" in report, suggest user confirm later.
- Idea was modified by another experiment: re-read the latest state before applying transitions; do not overwrite a more advanced lifecycle state with a lower one.
- Results data missing: if the experiment page's Results section is empty, prompt user to run
/exp-run {slug} --checkfirst.
Dependencies
Tools(via Bash)
python3 tools/research_wiki.py transition wiki/ideas/{slug}.md --to validated|failed [--reason "..."]— advance idea lifecyclepython3 tools/research_wiki.py add-edge wiki/ ...— add graph edgepython3 tools/research_wiki.py rebuild-context-brief wiki/— rebuild query_packpython3 tools/research_wiki.py rebuild-open-questions wiki/— rebuild gap_mappython3 tools/research_wiki.py log wiki/ "<message>"— append log
MCP Servers
mcp__llm-review__chat— Step 2 Review LLM independent verdict
Claude Code Native
Read— read wiki pagesGlob— find sibling experiments sharing the samelinked_ideaEdit— update wiki pages
Shared References
.claude/skills/shared-references/cross-model-review.md— Review LLM independence principle (required reading)
Called by
/researchStage 4 (verdict and iteration stage)- User directly
Signals
- GitHub stars
- 2k
- Forks
- 210
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
exp-eval-skyllwt- Source
- github.com/skyllwt/autosci