/exp-design
SkillMediaIdea-driven experiment design with iterative ablation — method candidate generation (direct / hybrid / cross-idea combination) → benchmark selection → iterative ablation (non-linear: ablation can trigger method simplification and re-planning) → sensitivity analysis → main experiment → optional generalization → deep analysis of intermediate quantities. Use when designing a full experiment suite for an idea after pilot evaluation.
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-design skill
What this skill tells your AI
The instructions your AI receives, as published by skyllwt/autosci in .claude/skills/exp-design/SKILL.md and read by ahel’s review.
Design a complete, non-linear experiment suite for an idea. This skill supports method candidate generation, iterative ablation with method simplification, sensitivity analysis, and deep analysis of intermediate quantities. The ablation loop is the core non-linear feature: ablation results classify factors as essential/contributing/marginal/harmful, and marginal/harmful factors trigger method simplification and re-planning (capped at 2 iterations).
Inputs
idea-slug: the idea to design experiments for (reads fromwiki/ideas/{slug}.md)
Outputs
- Experiment wiki pages:
wiki/experiments/{exp-slug}.md— one per experiment block (ablation, sensitivity, main, generalization, analysis), each withstatus: plannedandlinked_ideaset - Master design document:
experiments/designs/{slug}-master.md— detailed specs for all experiment blocks wiki/graph/edges.jsonl— newtested_byedges: idea → each experimentwiki/ideas/{slug}.md— updatedlinked_experimentsfieldwiki/graph/context_brief.md— rebuiltwiki/graph/open_questions.md— rebuiltwiki/log.md— appended log entry- DESIGN_REPORT (printed to terminal) — experiment suite summary, run order, compute budget
Wiki Interaction
Reads
wiki/ideas/{slug}.md— idea's hypothesis, approach, risks, novelty argumentwiki/ideas/*.md— other ideas (for Candidate C cross-idea combination, filtering for validated/pilot-passed ideas)experiments/pilot/{slug}/report.md— pilot evaluation results (if exists)wiki/papers/*.md— related papers for baseline setups and method detailswiki/concepts/*.mdandwiki/topics/*.md— referenced via idea'sorigin_gapswiki/methods/*.md— reusable methods the idea builds onwiki/experiments/*.md— existing experiments (avoid duplicate designs)wiki/graph/context_brief.md— global contextwiki/graph/open_questions.md— knowledge gaps
Writes
wiki/experiments/{exp-slug}.md— experiment wiki pages (one per block, following entity schema)experiments/designs/{slug}-master.md— master design document with detailed block specswiki/ideas/{slug}.md— append experiment slugs tolinked_experimentswiki/graph/edges.jsonl— addtested_byedges (idea → each experiment)wiki/graph/context_brief.md— rebuildwiki/graph/open_questions.md— rebuildwiki/log.md— append operation log
Graph edges created
tested_by: idea → experiment (the idea is being validated by this experiment). The reverse direction is captured by the experiment'slinked_ideafrontmatter field, whichxref.yamlreverses into the idea'slinked_experimentslist.
Workflow
Precondition: confirm working directory is the wiki project root (directory containing wiki/, raw/, tools/).
Phase 1: Load Context & Validate Prerequisites
-
Read idea page: load
wiki/ideas/{slug}.md, extract## Motivation,## Hypothesis,## Approach sketch,## Novelty argument,## Risksplus frontmatter fieldsorigin_gaps,tags,target_venue,priority,novelty_score. -
Read pilot results (if exists): load
experiments/pilot/{slug}/report.mdto understand pilot outcome. If pilot passed, proceed with confidence. If no pilot exists, proceed with caution and note reduced confidence in design document. -
Load relevant wiki context:
- Read
wiki/graph/context_brief.mdandwiki/graph/open_questions.md - From idea's
origin_gaps, read referencedwiki/concepts/*.mdandwiki/topics/*.md - From
## Approach sketchwikilinks, read referencedwiki/methods/*.md - Read existing
wiki/experiments/*.mdwhoselinked_ideamatches this idea
- Read
-
Read related papers: from
wiki/papers/*.md, extract baseline setups and method details relevant to the idea.
Phase 2: Method Candidate Generation
Generate 2–3 method candidates from the idea. Each candidate represents a different implementation strategy:
- Candidate A — Direct: straight implementation of the idea's proposed method from
## Approach sketch - Candidate B — Hybrid/Fusion: combine the idea's method with an existing method (from
wiki/methods/) to balance performance and cost - Candidate C — Cross-idea Combination: combine this idea with another existing idea that has been validated or passed pilot experiments (check
wiki/ideas/for ideas withpilot_result: passedorstatus: validated). This tests whether two complementary ideas can compound gains.
For each candidate, document:
- Core mechanism / algorithm sketch (2–4 sentences)
- Expected advantages and risks
- Implementation complexity: low / medium / high
- Computational cost estimate (relative to baseline)
Present candidates to user for review and selection. User selects 1–2 candidates to proceed with. If user doesn't select, re-present with clearer trade-off comparison.
Phase 3: Benchmark & Metric Selection
Select the benchmark, including datasets, evaluation metrics and baseline methods. Among them, the datasets and evaluation metrics shall adopt the universally recognized standard benchmarks in the corresponding research field.
-
Identify benchmark(s) based on:
- The idea's domain (NLP, CV, RL, etc.)
- Standard benchmarks used in related papers (from
wiki/papers/) - Dataset availability and compute constraints
-
Select Dataset:
- Clarify the dataset to be used (taking into account task adaptability, scale and standardization level)
- Specify the composition structure, usage methods and specifications of the dataset
-
Select metrics:
- Primary metric: the single most important measure of success (e.g., accuracy, F1, reward)
- Secondary metrics: supplementary measures (e.g., latency, memory, throughput)
-
Define baselines: list all methods the selected candidate(s) will be compared against. Include:
- The reproduced baseline from the most relevant paper
- Any SOTA methods from related work
-
Document rationale: why these benchmarks and metrics are appropriate for the idea's hypothesis.
Phase 4: Experiment Suite Design (non-linear, with iteration)
This phase designs all experiment blocks. The ablation loop (Step 4.6) is the core non-linear feature.
Step 4.1 — Design Ablation Experiment
- Identify ablation factors: each independent component or hypothesis of the method that can be toggled on/off
- Design the ablation matrix: which combinations to test (typically: full method minus one factor per run)
- Define metrics to collect: not just final performance — also intermediate quantities (loss components, gradient norms, etc.) that help diagnose why each factor matters
- Each factor will later be classified as: ESSENTIAL / CONTRIBUTING / MARGINAL / HARMFUL
Step 4.2 — Design Sensitivity Analysis
- Identify hyperparameters to sweep: learning rate, method-specific parameters (e.g., sparsity ratio, fusion weight), model-specific params
- Define sweep ranges and resolution: start broad, refine later
- Plan incremental execution: run on a subset first (fewer steps, smaller dataset), then run full sweep with narrowed ranges
Step 4.3 — Design Main Experiment
- Selected method candidate(s) vs all baselines on full benchmark
- Multi-seed (>= 3 seeds for variance estimation)
- Full training budget
- Collect both final metrics and intermediate quantities (for deep analysis in Step 4.5)
Step 4.4 — Design Generalization Experiment (optional)
- Test on a different benchmark, dataset, or setting
- Verify the method's assumptions hold beyond the primary setup
- Only include if the idea's hypothesis makes generalization claims
- If included, document: what changes from main experiment, what new insight it provides
Step 4.5 — Design Deep Analysis
- Identify intermediate quantities to log during main experiment:
- Gradient norms (per-layer, per-component)
- Attention patterns or feature distributions
- Loss decomposition (individual loss terms)
- Anything that validates or invalidates the method's core hypothesis
- Define analysis scripts/visualizations to produce after experiments complete
- This is NOT about final metrics — it's about understanding why the method works (or doesn't)
- Specify which quantities must be collected before experiments run (instrumentation requirements)
Each experiment block carries:
title: descriptive titlelinked_idea: the source idea slug (mandatory; required by the schema)hypothesis: specific hypothesis the experiment teststype: ablation / sensitivity / main / generalization / analysis — captured as a tagsetup: model, dataset, hardware, frameworkmetrics: list of evaluation metricsbaseline: comparison baselinesuccess_criterion: explicit pass/fail criterion (will live in## Procedureof the experiment page)estimated_gpu_hours: estimated compute timeseeds: number of random seeds (recommend >= 3)
Block-specific requirements:
Ablation:
- Purpose: isolate the contribution of each independent factor of the method
- Each ablation removes one factor and validates the resulting performance drop
- N factors → N ablation runs (plus full method as control)
- Collect intermediate quantities for each run (not just final metrics)
- Success criterion: factor classification table (ESSENTIAL / CONTRIBUTING / MARGINAL / HARMFUL)
- Compute: similar to main experiment × N factors
Sensitivity:
- Purpose: find optimal hyperparameter values for the method
- Identify all method-specific hyperparameters (learning rate, sparsity ratio, fusion weight, etc.)
- Define sweep ranges (start broad) and resolution (grid or random search)
- Incremental: run on subset first, narrow ranges, then full sweep
- Success criterion: identified optimal hparams with clear sensitivity patterns
- Compute: moderate (subset sweep is cheap, full sweep depends on param count)
Main:
- Purpose: validate the idea's central proposition vs all baselines on full benchmark
- Selected method with best hparams from sensitivity analysis
- Multi-seed (>= 3 seeds) for statistical reliability
- Collect both final metrics and intermediate quantities for deep analysis
- Success criterion: statistically significant improvement over baselines
- Compute: highest (full training budget, multiple seeds, multiple baselines)
Generalization (optional):
- Purpose: verify the method holds under different conditions
- Test on at least 2 variation dimensions (different dataset, model size, domain, etc.)
- Uses finalized method and best hparams from main experiment
- Success criterion: performance holds (no catastrophic degradation) on new settings
- Compute: depends on number of variation dimensions
Analysis:
- Purpose: understand why the method works (or doesn't) by examining intermediate quantities
- Input: logs and intermediate data collected during main experiment
- Produce visualizations: gradient norms, attention patterns, loss decomposition, etc.
- Success criterion: intermediate quantities confirm (or contradict) the method's core hypothesis
- Compute: minimal (post-hoc analysis, no new training runs)
Step 4.6 — Iterative Ablation Loop (non-linear core)
This is the key difference from linear experiment design. After initial ablation results:
iteration = 0
while iteration < 2:
run ablation experiment (via /exp-run)
classify each ablation factor based on results:
- ESSENTIAL: removing it causes major performance degradation (>10%) → keep
- CONTRIBUTING: removing it causes moderate degradation (3-10%) → keep
- MARGINAL: removing it has negligible effect (<3%) → candidate for removal
- HARMFUL: removing it improves performance → remove
if any MARGINAL or HARMFUL factors found:
simplify method:
- Remove all HARMFUL factors
- Discuss with user whether to remove MARGINAL factors
re-plan ablation with reduced factor set
iteration += 1
else:
break # method is clean, proceed to main experiment
- After loop exits (max 2 iterations): finalize method design
- Record full iteration history in design document (what was removed, why, results at each iteration)
- The finalized method from this loop becomes the method used in main experiment (Step 4.3)
Phase 5: Build Run Order
Order experiments by dependency and set decision gates:
Stage 0: Ablation (iteration 1)
└── Run ablation matrix
└── Classify factors → simplify if needed → re-run (iteration 2, up to max 2)
Stage 1: Sensitivity analysis (subset)
└── Run on small subset to narrow hyperparameter ranges
└── Gate: if no reasonable hparams found → stop, reconsider method
Stage 2: Main experiment
└── Finalized method vs baselines, full benchmark, multi-seed
└── Gate: no improvement over baseline → stop, analyze via deep analysis
Stage 3: Generalization (optional)
└── Only if generalization experiment was designed in Step 4.4
└── Uses finalized method and best hparams
Stage 4: Deep analysis
└── Analyze intermediate quantities collected during Stage 2
└── Produce visualizations and diagnostic report
Estimate total compute budget. Generate execution checklist with dependencies.
Gate: User reviews designed experimental modules and execution sequence
Before finalizing experimental modules and preparing design documents and wiki pages, confirmation must be obtained from users. Users are required to manually inspect the designed experimental modules. Proceed to Phase6 once confirmed; otherwise, make revisions repeatedly until users give approval.
Phase 6: Write Design Document
-
Create master design document at
experiments/designs/{slug}-master.md:--- title: "Experiment Design: {idea-title}" slug: "{idea-slug}-design" status: planned linked_idea: "{idea-slug}" tags: ["exp-design"] date_planned: YYYY-MM-DD --- ## Idea Summary {idea hypothesis and approach sketch} ## Method Candidates {table of candidates with selection rationale} ## Benchmark & Metrics {dataset, metrics, baselines} ## Experiment Blocks ### Ablation {ablation factors, matrix, metrics} ### Sensitivity Analysis {hyperparameters, sweep ranges} ### Main Experiment {method vs baselines, full config} ### Generalization (optional) {different setting/benchmark} ### Deep Analysis {intermediate quantities, analysis plan} ## Ablation Iteration History {record of each iteration: factors classified, simplifications made} ## Run Order & Budget {stage dependencies, estimated GPU-hours} ## Results (to be filled after /exp-run) -
Create experiment wiki pages — one page per experiment block (following
runtime/schema/entities.yamlandruntime/templates/experiments.md.tmpl):python3 tools/research_wiki.py slug "<experiment-title>"Create
wiki/experiments/{slug}.mdfollowingruntime/schema/entities.yaml::experimentsandruntime/templates/experiments.md.tmplexactly — every frontmatter field below must be present even if empty, because/exp-runlater usestools/research_wiki.py set-metato update them, andset-metarefuses to create fields that don't already exist:--- title: "" slug: "" status: planned linked_idea: "{idea-slug}" # MANDATORY (required by schema). Reverse link to wiki/ideas/{idea-slug}.md::linked_experiments via xref.yaml. hypothesis: "" tags: [] # include the type tag here: ["ablation"], ["sensitivity"], ["main"], ["generalization"], or ["analysis"] setup: model: "" dataset: "" hardware: "" framework: "" metrics: [] baseline: "" outcome: "" # empty until /exp-run Phase 4 — succeeded | failed | inconclusive key_result: "" # empty until /exp-run Phase 4 date_planned: YYYY-MM-DD date_completed: "" # empty until /exp-run Phase 4 run_log: "" # empty until /exp-run Phase 2 started: "" # empty until /exp-run Phase 2 (ISO timestamp, set via set-meta) estimated_hours: 0 # 0 until /exp-run Phase 2 (set via set-meta) remote: # full block must exist so /exp-run --env remote can populate sub-fields via Edit server: "" gpu: "" session: "" started: "" completed: "" ---Body sections per block type:
Ablation (
tags: ["ablation"]):## Objective— which factors are being tested, what the ablation reveals about the method## Setup— ablation matrix (factor combinations), model, dataset, hardware, hyperparameters## Procedure— step-by-step: run each factor combination, collect metrics and intermediate quantities## Results(to be filled after /exp-run) — factor classification table: ESSENTIAL / CONTRIBUTING / MARGINAL / HARMFUL## Analysis(to be filled after /exp-run) — which factors to remove, iteration history## Follow-up— if MARGINAL/HARMFUL found: simplify method and re-run ablation (iteration 2); if all ESSENTIAL/CONTRIBUTING: proceed to main experiment
Sensitivity (
tags: ["sensitivity"]):## Objective— which hyperparameters are being swept, what range is optimal## Setup— sweep ranges and resolution, model, dataset, hardware## Procedure— step-by-step: run subset first, narrow ranges, then full sweep## Results(to be filled after /exp-run) — best hyperparameter values, performance curves## Analysis(to be filled after /exp-run) — sensitivity patterns, recommended values for main experiment## Follow-up— pass best hparams to main experiment
Main (
tags: ["main"]):## Objective— what this experiment proves about the linked idea vs baselines## Setup— method vs all baselines, full benchmark, multi-seed (>=3), best hparams from sensitivity## Procedure— step-by-step execution plan with explicit success criterion; collect intermediate quantities for deep analysis## Results(to be filled after /exp-run) — metric comparison table (method vs baselines), statistical significance## Analysis(to be filled after /exp-run) — why method works/fails, intermediate quantity analysis## Follow-up— contingency plans: what to do if success / failure
Generalization (
tags: ["generalization"], optional):## Objective— what generalization claim is being tested## Setup— different benchmark/dataset/setting from main experiment## Procedure— run finalized method with best hparams on new setting## Results(to be filled after /exp-run) — performance on new setting vs main setting## Analysis(to be filled after /exp-run) — does the method generalize?## Follow-up— if fails: identify which assumption breaks
Analysis (
tags: ["analysis"]):## Objective— which intermediate quantities to analyze, what hypothesis they validate## Setup— data sources (logs from main experiment), visualization specs## Procedure— run analysis scripts, produce plots and diagnostic tables## Results(to be filled after /exp-run) — plots, tables, key observations## Analysis(to be filled after /exp-run) — do intermediate quantities confirm the method's hypothesis?## Follow-up— if hypothesis not confirmed: identify what went wrong
-
Add graph edges:
# For each experiment page, idea → experiment python3 tools/research_wiki.py add-edge wiki/ \ --from "ideas/{idea-slug}" --to "experiments/{exp-slug}" \ --type tested_by --evidence "Designed by /exp-design" -
Update idea page: append all experiment slugs to
linked_experimentsinwiki/ideas/{slug}.md. -
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-design | {N} experiments designed for idea {slug} | linked_idea: {slug}" -
Print DESIGN_REPORT to terminal:
# Design Report: {idea-slug} ## Target Idea - Idea: [[idea-slug]] - Hypothesis: {hypothesis} ## Method Candidates | # | Candidate | Type | Complexity | Selected | |---|-----------|------|------------|----------| | A | {name} | Direct | {low/med/high} | {yes/no} | | B | {name} | Hybrid/Fusion | {low/med/high} | {yes/no} | | C | {name} | Cross-idea Combination | {low/med/high} | {yes/no} | ## Benchmark - Primary: {benchmark} | Metric: {metric} - Baselines: {list} ## Experiment Blocks | # | Experiment | Type | GPU-hrs | Stage | |---|-----------|------|---------|-------| | 1 | [[slug]] | sensitivity | {N} | 0 | | 2 | [[slug]] | ablation | {N} | 1 | | 3 | [[slug]] | main | {N} | 2 | | 4 | [[slug]] | generalization | {N} | 3 | ## Ablation Iterations - Iterations planned: {N} (max 2) - Factors: {list with classifications} ## Run Order Stage 0: Sensitivity → Stage 1: Ablation → Stage 2: Main → Stage 3: Generalization → Stage 4: Deep Analysis ## Budget - Total estimated: {N} GPU-hours ## Next Steps - Run `/exp-run [[sensitivity-slug]]` to start Stage 0
Constraints
- Every experiment must reference an idea:
linked_ideais required by the schema. If no idea page exists, refuse to design — instruct user to run/ideatefirst. - No duplicate experiments: before creating, scan
wiki/experiments/*.mdfor existing experiments with samelinked_idea+hypothesis. - Do NOT overwrite existing design files: if
experiments/designs/{slug}-master.mdalready exists, ask user before overwriting. - Method candidates must be grounded: no hallucinated methods — all candidates must derive from the idea page's content.
- Ablation loop capped at 2 iterations: prevents infinite loops. After 2 iterations, finalize with current design.
- Sensitivity sweep must be incremental: subset first, full sweep second.
- Deep analysis must be pre-planned: specify which intermediate quantities to collect before experiments run — this is instrumentation, not post-hoc analysis.
- Graph edges via tools/research_wiki.py: do not manually edit
edges.jsonl. - At least 3 seeds: experiments requiring statistical reliability (main experiment) must specify >= 3 random seeds.
- Success criteria must be quantified: each experiment block needs a specific pass/fail number.
Error Handling
- Idea page not found: report error, suggest running
/ideatefirst. - No pilot results: warn user, proceed but note reduced confidence in design document.
- User doesn't select any method candidate: re-present candidates with clearer trade-off comparison, ask for explicit choice.
- Benchmark unavailable: suggest alternatives, let user decide.
- Ablation loop hits 2 iterations: finalize with current design, note remaining marginal factors in report.
- Similar experiment already exists: list existing experiments, ask user whether to add or skip.
- Insufficient compute budget: reduce generalization experiment scope, note actual allocation in report.
Dependencies
Skills (via Skill tool)
/exp-run— execute designed experiments/exp-pilot-eval— prerequisite: pilot evaluation should complete before formal design
Shortened here. Read the whole file on GitHub.
Signals
- GitHub stars
- 2k
- Forks
- 210
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
exp-design-skyllwt- Source
- github.com/skyllwt/autosci