/research
SkillMediaEnd-to-end research orchestrator — idea discovery → experiment design → execution → verdict → paper writing, with human gates and session-resumable state
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 /research skill
What this skill tells your AI
The instructions your AI receives, as published by skyllwt/autosci in .claude/skills/research/SKILL.md and read by ahel’s review.
End-to-end research orchestrator that composes all skills into a complete research workflow. Stage 0 (Bootstrap) + 5 Stages + 2 Human Gates, covering the full pipeline from empty wiki to paper submission. Zero-friction entry: if the wiki is empty, Bootstrap is triggered automatically (search + auto-ingest 5 papers); no need to run /init manually. Every Gate and Stage saves progress to
wiki/outputs/pipeline-progress.md, supporting cross-session recovery.Stage 3 is non-blocking: experiments are deployed and control returns immediately (
--automode automatically sets up a CronCreate to monitor every 30 minutes). When all experiments finish, Stage 4 is triggered automatically. Use/exp-statusat any time to check progress.
--automode skips manual confirmation (automatically selects the top-1 idea).--skip-paperruns the research without writing a paper.
Inputs
direction: research direction description or path to aRESEARCH_BRIEF.mdfile- Text form: one-sentence description of the research direction (e.g. "sparse LoRA for edge devices")
- File form: structured RESEARCH_BRIEF.md (containing domain, constraints, target venues)
--auto(optional): fully automatic mode; Gate 1 auto-selects top-1 idea, Gate 2 auto-continues, Stage 3b auto-creates CronCreate--start-from <stage>(optional): resume execution from the specified stage- Valid values:
stage1,stage2,stage3,stage3-collect,stage3-check,stage4,stage5 stage3-collect: skip deploy, go directly to Stage 3c (collect results from already-deployed experiments)stage3-check: check experiment status only (equivalent to/exp-status --pipeline {slug}), do not continue execution- Requires
wiki/outputs/pipeline-progress.mdto exist
- Valid values:
--skip-paper(optional): run research only (Stages 1-4), skip paper writing (Stage 5), but still run /exp-eval (Stage 4)--venue(optional): target conference (ICLR / NeurIPS / ICML / ACL / CVPR), passed to /paper-plan
Outputs
- Wiki updates (delegated to sub-skills): ideas/, experiments/, methods/, outputs/, graph/
- wiki/outputs/pipeline-progress.md — pipeline progress snapshot (for recovery)
- wiki/outputs/PIPELINE_REPORT.md — full pipeline report
- paper/ directory (if not --skip-paper) — submittable paper
- wiki/log.md — log appended after each stage
Wiki Interaction
Reads
wiki/graph/context_brief.md— global context (passed to sub-skills)wiki/graph/open_questions.md— knowledge gaps (passed to /ideate)wiki/ideas/*.md— Gate 1 selection, Stage 4 verdict, Stage 5 paper planningwiki/experiments/*.md— Stage 3-4 status checkswiki/methods/*.md— Stage 5 paper writing contextwiki/outputs/pipeline-progress.md— --start-from state recoverywiki/papers/*.md— Stage 5 paper writing context
Writes
wiki/outputs/pipeline-progress.md— save progress at each Gate (wiki entity writes are delegated to sub-skills)wiki/outputs/PIPELINE_REPORT.md— final reportwiki/log.md— append log entries- All other wiki entity writes are delegated to sub-skills (do not directly write to ideas/experiments/methods/)
Graph edges created
- None directly — all graph edges are delegated to sub-skills (/ideate, /exp-design, /exp-eval each create their own edges)
Workflow
Precondition:
- Confirm working directory is the wiki project root (containing
wiki/,raw/,tools/) - If
--start-fromis specified, readwiki/outputs/pipeline-progress.mdto restore state
Step 0: Initialize
-
Parse input:
- If file path: read RESEARCH_BRIEF.md, extract direction, domain, constraints, target_venue
- If text: use as direction; leave domain/constraints blank
- Generate slug:
python3 tools/research_wiki.py slug "{direction}"
-
Auto-recovery detection (when
--start-fromis not specified):- If
wiki/outputs/pipeline-progress.mdexists andstatus == running:- Read direction, current_stage, started, slug
- Use AskUserQuestion to prompt the user:
Unfinished pipeline detected: Direction: {direction} Current stage: {current_stage} Started: {started} [1] Resume from {current_stage} (recommended) [2] Start a new pipeline (will overwrite old progress) [3] View experiment status first (/exp-status --pipeline {slug}) - If --auto or user selects [1]: auto-set
--start-from {current_stage}, continue execution - If user selects [2]: continue creating new pipeline (overwrite old progress file)
- If user selects [3]: call
/exp-status --pipeline {slug}then exit without continuing
- If
-
Check recovery (when
--start-fromis specified):- If
wiki/outputs/pipeline-progress.mdexists:- Read progress file, restore idea_slug, experiment_slugs, stage3a_deployed, linked_idea_slugs, monitoring_cron_id
- Jump to specified stage
- If progress file does not exist: report error and exit; prompt user to run the full pipeline first
--start-from stage3-check: equivalent to calling/exp-status --pipeline {slug}; display status then exit--start-from stage3-collect: skip Stage 3a+3b; go directly to Stage 3c (collect already-deployed experiments)
- If
-
Create progress file
wiki/outputs/pipeline-progress.md:--- slug: "{pipeline-slug}" direction: "{research direction}" status: running current_stage: stage1 started: YYYY-MM-DD mode: auto|interactive skip_paper: true|false venue: "{venue}" idea_slug: "" experiment_slugs: [] stage3a_deployed: [] linked_idea_slugs: [] iteration_count: 0 --- ## Stage Log - Stage 0 (Bootstrap): skipped - Stage 1: pending - Gate 1: pending - Stage 2: pending - Stage 3a (Deploy): pending - Stage 3b (Await): pending - Stage 3c (Collect): pending - Stage 4: pending - Gate 2: pending - Stage 5: pending -
Append log:
python3 tools/research_wiki.py log wiki/ \ "research | started | direction: {direction} | mode: {auto|interactive}" -
Snapshot wiki state (for Growth Report in Step Final):
python3 tools/research_wiki.py maturity wiki/ --jsonSave returned JSON to memory variable
maturity_before.
Stage 0: Bootstrap (triggered automatically when wiki is empty)
Trigger condition: run python3 tools/research_wiki.py maturity wiki/ --json. If level == "cold" and papers < 3: enter Bootstrap automatically. Otherwise skip and proceed to Stage 1.
-
Initialize wiki structure (if not yet initialized):
python3 tools/research_wiki.py init wiki/ -
Search for relevant papers (use Agent tool with 3 parallel searches):
- DeepXiv:
python3 tools/fetch_deepxiv.py search "{direction}" --mode hybrid --limit 20 - Semantic Scholar:
python3 tools/fetch_s2.py search "{direction}" --limit 20 - arXiv:
python3 tools/fetch_arxiv.py(using direction keywords) - If DeepXiv is unavailable: skip; use only S2 + arXiv
- DeepXiv:
-
Merge, rank, and select top 5:
- Deduplicate by arxiv_id
- Ranking priority: DeepXiv relevance score > S2 citation count > recency
- Select top 5 (5 = minimum threshold for cold→warm)
-
Auto-ingest each paper:
Skill: ingest Args: "{arxiv_url_or_path}"Output progress after each ingest:
[{i}/5] Ingested: {paper_title} -
Rebuild derived data:
python3 tools/research_wiki.py rebuild-context-brief wiki/ python3 tools/research_wiki.py rebuild-open-questions wiki/ -
Bootstrap report:
python3 tools/research_wiki.py maturity wiki/ --jsonOutput to terminal:
Bootstrap complete: Papers: {N} | Concepts: {K} | Methods: {Mt} | Edges: {E} Maturity: cold → {new_level} Proceeding to Stage 1: Idea Discovery... -
Log + update progress:
python3 tools/research_wiki.py log wiki/ \ "research | stage0-bootstrap | auto-ingested {N} papers | maturity: {level}" python3 tools/research_wiki.py set-meta \ wiki/outputs/pipeline-progress.md current_stage stage1
Stage 1: Idea Discovery
Call /ideate:
Skill: ideate
Args: "{direction}" --auto
After completion:
- Read the generated ideas and sort them according to the pilot experiment results and priority.
- Update pipeline-progress: Stage 1 → completed, record generated idea slugs
- Append log
Gate 1: Select Idea
If --auto mode:
- Automatically select the highest-priority (top-1) idea
- Output selection result to terminal without waiting for confirmation
If interactive mode:
- List all generated ideas (slug, title, priority, novelty score,pilot result)
- Use AskUserQuestion to prompt user to select one idea (or enter "stop" to halt)
- If user selects stop: save progress, terminate pipeline
Save progress:
- Update pipeline-progress: Gate 1 → passed, record idea_slug
- Update selected idea status: proposed → in_progress
Stage 2: Experiment Design
Call /exp-design:
Skill: exp-design
Args: "{idea_slug}"
After completion:
- Read generated experiment slugs (pages in wiki/experiments/ where linked_idea == idea_slug,and retrieve the detailed specs of the experiment block from experiments/designs/{slug}-master.md based on the exp-slug)
- Update pipeline-progress: Stage 2 → completed, record experiment_slugs
Stage 3: Experiment Execution (non-blocking)
Stage 3 is divided into three sub-stages, allowing experiments to run asynchronously in the background without blocking the session.
Stage 3a: Deploy All
Deploy each experiment in run order (baseline → validation → ablation → robustness) by calling /exp-run {experiment_slug} (default deploy mode, Phase 1+2):
Skill: exp-run
Args: "{experiment_slug}"
(Default deploy mode, Phase 1+2: returns immediately after deployment, does not wait for experiment to finish)
After each deployment:
- Record deployment result (success/failure) in memory
- If deploy fails: record to pipeline-progress with a warning (baseline deploy failure gets a stronger warning), but continue deploying remaining experiments (do not abort)
After all deployments complete, update pipeline-progress.md:
python3 tools/research_wiki.py set-meta \
wiki/outputs/pipeline-progress.md current_stage stage3-await
python3 tools/research_wiki.py set-meta \
wiki/outputs/pipeline-progress.md stage3a_deployed \
"[{experiment_slug_1}, {experiment_slug_2}, ...]"
Append log:
python3 tools/research_wiki.py log wiki/ \
"research | stage3a | deployed {N} experiments | pipeline: {slug}"
Stage 3b: Await (non-blocking)
After all experiments are deployed, compute ETA, save progress, and end the current session.
- Update pipeline-progress:
python3 tools/research_wiki.py set-meta \ wiki/outputs/pipeline-progress.md current_stage stage3-await - Compute estimated completion time for each experiment:
For each deployed experiment, read
startedandestimated_hoursfrom frontmatter:eta = started + estimated_hoursrecommended_return = max(all etas) + 30-minute buffer, rounded up to nearest hour or half-hour
- Append log:
python3 tools/research_wiki.py log wiki/ \ "research | stage3b | awaiting {N} experiments | latest eta: {YYYY-MM-DD HH:MM} | pipeline: {slug}" - Output instructions then end current session:
Stage 3a complete: {N} experiments all deployed: Experiment Environment Est. Duration Est. Completion ────────────────────────────── ────────────── ───────────── ─────────────── exp-foo-baseline local ~8h Tomorrow 09:30 exp-foo-validation remote (gpu1) ~6h Today 23:00 exp-foo-ablation local ~4h Today 21:00 Latest completion: Tomorrow 09:30 (exp-foo-baseline) Recommended time to return: Tomorrow 10:00+ /exp-status ← confirm all experiments complete /research --start-from stage3-collect ← collect results and continue Progress saved to wiki/outputs/pipeline-progress.md; current session can be closed.
Stage 3c: Collect (triggered after experiments complete)
Trigger: user manually runs /research --start-from stage3-collect
For each deployed experiment (read from stage3a_deployed list):
Skill: exp-run
Args: "{experiment_slug} --collect"
(Collect mode, Phase 3+4: check completion status and collect results)
Decision after each collect:
- If outcome == failed and this is the baseline experiment → terminate pipeline, report baseline cannot be reproduced
- If outcome == failed and this is a validation experiment → record failure, continue collecting remaining experiments, proceed to Stage 4 evaluation
- If outcome == inconclusive → record and continue
After all collects complete:
-
Update pipeline-progress: Stage 3 → completed
python3 tools/research_wiki.py set-meta \ wiki/outputs/pipeline-progress.md current_stage stage4 -
Append log:
python3 tools/research_wiki.py log wiki/ \ "research | stage3c | collected {N} experiments | pipeline: {slug}" -
Update the status of linked idea: in_progress -> tested
-
Proceed to Stage 4
Stage 4: Verdict & Iteration
Call /exp-eval for each completed experiment:
Skill: exp-eval
Args: "{experiment_slug}" --auto
Evaluate whether the linked idea is sufficient:
- Read the latest status of the primary linked idea (and any supporting ideas)
- Determine whether iteration is needed:
- Sufficient (primary linked idea has been transitioned to
validated, OR ≥1 supporting experiment hasoutcome=succeeded) → proceed to Gate 2 - Insufficient (idea remains
proposedorin_progressortestedand all linked experiments arefailed/inconclusive, or idea isfailed) → enter iteration
- Sufficient (primary linked idea has been transitioned to
Iteration path (when insufficient, up to 1 retry):
- Analyze the cause of failure
- Call
/refinefor the corresponding experimental blocks that need improvement to optimize the experiment plan:Skill: refine Args: "{experiment_plan_slug}" --max-rounds 2 --focus evidence - Re-run Stage 3 → Stage 4 for new/modified experiments
- Maximum 2 iterations (prevents infinite loops); each stage has at most 1 auto-retry
After completion:
- Update pipeline-progress: Stage 4 → completed, record linked_idea_slugs
Gate 2: Confirm Paper Ready
If --skip-paper: skip Gate 2 and Stage 5, generate final report directly
If --auto mode: automatically continue, enter Stage 5
If interactive mode:
- Display idea status summary:
Idea: {slug} | Status: {status} | Novelty: {novelty_score} Linked experiments: {count} ({succeeded}/{inconclusive}/{failed}) - Use AskUserQuestion to prompt user: ready for paper / need more experiments / stop here
- If "need more experiments": return to Stage 2 for replanning
- If "stop here": save progress, generate final report (without paper)
Save progress:
- Update pipeline-progress: Gate 2 → passed
Stage 5: Paper Writing
Call sub-skills in sequence: /paper-plan → /paper-draft → /refine → /paper-compile
5a. Call /paper-plan:
Skill: paper-plan
Args: "{linked_idea_slugs}" --venue {venue}
(passes the validated idea slug(s) collected in Stage 4 to /paper-plan)
5b. Call /paper-draft:
Skill: paper-draft
Args: "wiki/outputs/PAPER_PLAN.md" --review
5c. Call /refine on paper:
Skill: refine
Args: "paper/main.tex" --max-rounds 3 --target-score 8 --focus writing
5d. Call /paper-compile:
Skill: paper-compile
Args: "paper/"
After completion:
- Update pipeline-progress: Stage 5 → completed, status: completed
Step Final: Pipeline Report
Generate wiki/outputs/PIPELINE_REPORT.md:
# Research Pipeline Report
## Stage Summary
| Stage | Status | Duration |
|-------|--------|----------|
| Stage 0: Bootstrap | completed/skipped | ... |
| Stage 1: Idea Discovery | completed | ... |
| Gate 1: Idea Selection | passed | ... |
| Stage 2: Experiment Design | completed | ... |
| Stage 3a: Deploy Experiments | completed | ... |
| Stage 3b: Await (async) | completed | ... |
| Stage 3c: Collect Results | completed | ... |
| Stage 4: Verdict | completed | ... |
| Gate 2: Paper Ready | passed | ... |
| Stage 5: Paper Writing | completed | ... |
## Selected Idea
- **Idea**: [[{idea_slug}]] — {idea title}
- **Priority**: {N}
- **Novelty score**: {score}
## Idea Trail
| Idea | Initial Status | Final Status | Novelty (start → end) |
|------|----------------|--------------|------------------------|
| [[{slug}]] | proposed | validated | 3 → 4 |
## Experiment Results
| Experiment | Outcome | Key Result |
|-----------|---------|------------|
| [[{slug}]] | succeeded | {result} |
## Iteration History
- Total iterations: {N}
- Reason for iteration: {idea evidence insufficient / ...}
## Deliverables
- Ideas: +{N} created, {N} validated
- Experiments: +{N} created, {N} completed
- Methods: +{N} created/updated
- Graph edges: +{N}
- Paper: paper/main.pdf (if applicable)
## Wiki Growth (pipeline total)
| Metric | Before | After | Delta |
|--------|--------|-------|-------|
| Papers | {N} | {N} | +{N} |
| Methods | {N} | {N} | +{N} |
| Ideas | {N} | {N} | +{N} |
| Experiments | {N} | {N} | +{N} |
| Edges | {N} | {N} | +{N} |
| Maturity | {level} | {level} | {status} |
| Coverage | {%} | {%} | +{%} |
(Data from comparing `maturity_before` from Step 0 against a fresh call to `maturity --json` here. Only rows with delta != 0 are shown.)
## Next Steps
- {recommendations based on remaining gaps or unresolved issues}
Append log:
python3 tools/research_wiki.py log wiki/ \
"research | completed | idea: {slug} | linked ideas: {N} updated | paper: {yes/no}"
Update pipeline-progress: status: completed
Constraints
- Orchestrator does not directly modify wiki entities or embed sub-skill logic: all wiki modifications are delegated to sub-skills; the pipeline only coordinates by calling them via the Skill tool
- Gates and Stages must save progress: every Gate and Stage must save pipeline-progress.md when completed or entering await
- Stage 3a deploy failures do not abort: record a warning and continue deploying; do not terminate early (baseline collect failure is what triggers termination)
- Baseline collect failure terminates: in Stage 3c, if baseline outcome == failed, terminate the pipeline
- Stage 3b ends the session: after Stage 3b completes, the current session ends; do not continue waiting for experiments
- Maximum 2 iterations: Stage 4 iterates at most 2 times to prevent infinite loops
- --auto does not skip computation: auto mode skips human confirmation but skips no computation steps
- --skip-paper still runs Stage 4 /exp-eval: idea/experiment updates must be completed even when not writing a paper
- Pass sub-skill parameters through: correctly pass domain, --venue, and other parameters to sub-skills
- Log every Stage: append a log.md audit entry after each Stage completes
- Do not re-run completed stages: --start-from skips already-completed stages
- Progress file at wiki/outputs/pipeline-progress.md: consistent location for easy discovery and recovery
- Auto-recovery first: if no --start-from is given and an unfinished pipeline exists, default to prompting the user to resume rather than starting fresh
Error Handling
- pipeline-progress missing but --start-from specified: report error; prompt user to run the full pipeline first
- pipeline-progress corrupted or malformed: attempt to infer progress from current wiki state (read ideas/experiments statuses), recover to the nearest Gate
- Sub-skill call fails: record error to pipeline-progress, report the failed stage, suggest --start-from to resume
- All ideas generation fails: terminate pipeline; suggest the user adjust the research direction
- All experiment deploys fail: terminate pipeline (Stage 3a); generate failure report; suggest checking GPU/SSH configuration
- Stage 3c baseline collect fails: terminate pipeline; report baseline cannot be reproduced; suggest re-running /exp-design
- All experiment collects fail (non-baseline): proceed to Stage 4 evaluation (treat failures as evidence)
- Gate user selects stop: save progress to pipeline-progress; generate partial report
- RESEARCH_BRIEF.md malformed: fall back to plain-text direction; ignore structured fields
- Wiki empty (no papers/concepts): auto-trigger Stage 0 Bootstrap (search + auto-ingest 5 papers)
- Idea evidence still insufficient after iteration: annotate report with "idea evidence insufficient after max iterations"; let user decide whether to continue
- User selects view status (auto-recovery detection [3]): call
/exp-status --pipeline {slug}then exit without starting a new pipeline
Dependencies
Skills(via Skill tool)
/ingest— Stage 0 Bootstrap auto-ingest/ideate— Stage 1 idea discovery/exp-design— Stage 2 experiment design/exp-run— Stage 3a (deploy mode) and Stage 3c (--collect mode)/exp-status— user manually checks experiment progress;--auto-advancecan automatically trigger Stage 4 when all complete/exp-eval— Stage 4 verdict/refine— Stage 4 iteration + Stage 5 paper improvement/paper-plan— Stage 5 paper planning/paper-draft— Stage 5 paper writing/paper-compile— Stage 5 paper compilation
Tools(via Bash)
python3 tools/research_wiki.py slug "{title}"— generate pipeline slugpython3 tools/research_wiki.py set-meta <path> <field> <value>— update pipeline-progress fieldspython3 tools/research_wiki.py log wiki/ "<message>"— append log entrypython3 tools/research_wiki.py maturity wiki/ --json— check wiki maturity (Stage 0 trigger + Growth Report)python3 tools/research_wiki.py init wiki/— initialize wiki structure (Stage 0)python3 tools/fetch_deepxiv.py search "{query}" --mode hybrid --limit 20— DeepXiv semantic search (Stage 0)python3 tools/fetch_s2.py search "{query}" --limit 20— Semantic Scholar search (Stage 0)python3 tools/fetch_arxiv.py— arXiv RSS search (Stage 0)
MCP Servers
- None directly — all Review LLM interactions are used indirectly via sub-skills
Claude Code Native
Read— read pipeline-progress, wiki pages, RESEARCH_BRIEFWrite— write pipeline-progress, PIPELINE_REPORTGlob— find experiments, ideas, methodsSkill— call sub-skills (core capability)AskUserQuestion— user interaction at Gates and auto-recovery detection
Signals
- GitHub stars
- 2k
- Forks
- 210
- Last commit
- Sep 2026
- Hacker News mentions
- 20
Advanced
- Catalog kind
- skill
- Gateway key
research-skyllwt- Source
- github.com/skyllwt/autosci