Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Seven-stage research workflow (SCOPE→LITERATURE→REASON→DESIGN→COMPUTE→SYNTHESIZE→WRITE). Use for: structuring an AI agent's research process, generating literature review prompts, scoping methodology. Usage: from infrastructure.research import ResearchWorkflow; ResearchWorkflow.describe() Config: set stage overrides in projects/{name}/manuscript/config.yaml `research_workflow:` block.
.claude/skills/docxology-research-workflow/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 63% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 85% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -51% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -5% | 0% |
Seven-stage research workflow scaffolding for AI-assisted research processes. Each stage produces structured prompts and acceptance criteria for agent loops.
| # | Stage | Purpose | | --- | --- | --- | | 1 | SCOPE | Define research question, scope, and success criteria | | 2 | LITERATURE | Survey prior work; produce annotated bibliography | | 3 | REASON | Identify gaps, contradictions, and open questions | | 4 | DESIGN | Formulate methodology and experimental plan | | 5 | COMPUTE | Execute analysis; collect and validate results | | 6 | SYNTHESIZE | Interpret results relative to prior work | | 7 | WRITE | Draft manuscript sections and iterative revision |
pythonfrom infrastructure.research import ResearchWorkflow # Print all stage descriptions ResearchWorkflow.describe() # Get a structured prompt for a specific stage prompt = ResearchWorkflow.prompt("SCOPE", question="What drives protein misfolding?") print(prompt) # Iterate stages in order for stage in ResearchWorkflow.stages(): print(f"{stage.index}. {stage.name}: {stage.description}")
bash# Run research workflow scaffolding for a named project uv run python scripts/pipeline/stage_10_research_workflow.py --project my_project # Run only specific stages uv run python scripts/pipeline/stage_10_research_workflow.py --project my_project --stages SCOPE,LITERATURE # Generate stage prompts without executing uv run python scripts/pipeline/stage_10_research_workflow.py --project my_project --dry-run
Set stage overrides in projects/{name}/manuscript/config.yaml:
yamlresearch_workflow: question: "How do transformer attention patterns relate to syntactic structure?" stages: SCOPE: depth: detailed LITERATURE: max_papers: 50 sources: - arxiv - semantic_scholar WRITE: target_venue: NeurIPS
pythonfrom infrastructure.research import ( ResearchWorkflow, # instance API — workflow.stage(name) / all_stages() / describe() ResearchStage, # Stage descriptor: name, label, description, inputs, outputs, gate, status, order ResearchWorkflowConfig, # Parsed config.yaml `research_workflow:` block )
> Doc/code drift (tracked for follow-up): the "Stages" table, .prompt(), > .stages(), .render(), and .record_output() calls elsewhere in this > file describe an OpenScience-ported design (uppercase SCOPE/LITERATURE/... > stage names, per-stage sub-agent fan-out and prompt templates) that > ResearchWorkflow/ResearchStage do not implement — the real stage names > are lowercase (scope, survey, hypothesise, experiment, validate, review, > write) and there is no .prompt()/.stages()/.render() API. Treat > those sections as design intent, not a verified API surface.
pythonfrom infrastructure.research import ResearchWorkflow # Generate LITERATURE stage prompt for a specific project prompt = ResearchWorkflow.prompt( "LITERATURE", question="Neural scaling laws", context={"prior_papers": 12, "target_venue": "ICML"}, )
pythonfrom infrastructure.research import ResearchWorkflow # Use in an agent loop for stage in ResearchWorkflow.stages(): prompt = stage.render(project_context) response = llm_call(prompt) stage.record_output(response, output_dir="output/research/")
bashuv run pytest tests/infra_tests/research/ -v
AGENTS.md — operating contract and architecture../search/SKILL.md — literature search integration../llm/SKILL.md — LLM review integration| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 12,309 | 12,725 | +3% | 1 | 1 | 0% | 1,713 | 2,697 | +57% | 0 | 0 | — |
case-02 | fail→pass | 7,091 | 9,320 | +31% | 1 | 1 | 0% | 1,291 | 2,106 | +63% | 0 | 0 | — |
case-03 | fail→pass | 5,951 | 5,522 | -7% | 1 | 1 | 0% | 1,141 | 2,109 | +85% | 0 | 0 | — |
case-04 | pass→pass | 11,846 | 11,530 | -3% | 1 | 1 | 0% | 2,377 | 3,247 | +37% | 0 | 0 | — |
case-05 | pass→pass | 8,714 | 9,202 | +6% | 1 | 1 | 0% | 1,882 | 3,046 | +62% | 0 | 0 | — |
case-06 | pass→pass | 8,746 | 7,326 | -16% | 1 | 1 | 0% | 1,772 | 2,321 | +31% | 0 | 0 | — |
case-07 | fail→pass | 15,066 | 2,140 | -86% | 1 | 1 | 0% | 2,614 | 1,279 | -51% | 0 | 0 | — |
case-08 | fail→pass | 26,256 | 3,730 | -86% | 1 | 1 | 0% | 1,937 | 1,695 | -12% | 0 | 0 | — |
case-09 | fail→pass | 7,257 | 1,871 | -74% | 1 | 1 | 0% | 1,325 | 1,264 | -5% | 0 | 0 | — |
case-10 | fail→pass | 9,325 | 1,831 | -80% | 1 | 1 | 0% | 1,720 | 1,247 | -28% | 0 | 0 | — |
case-11 | fail→pass | 10,082 | 1,592 | -84% | 1 | 1 | 0% | 1,920 | 1,228 | -36% | 0 | 0 | — |
case-12 | fail→pass | 7,007 | 1,377 | -80% | 1 | 1 | 0% | 1,280 | 1,156 | -10% | 0 | 0 | — |
case-13 | fail→pass | 6,428 | 3,214 | -50% | 1 | 1 | 0% | 1,219 | 1,559 | +28% | 0 | 0 | — |
case-14 | fail→pass | 5,241 | 1,817 | -65% | 1 | 1 | 0% | 894 | 1,250 | +40% | 0 | 0 | — |
case-15 | pass→pass | 8,419 | 2,121 | -75% | 1 | 1 | 0% | 1,242 | 1,281 | +3% | 0 | 0 | — |
case-16 | fail→pass | 14,082 | 2,714 | -81% | 1 | 1 | 0% | 1,474 | 1,492 | +1% | 0 | 0 | — |
case-17 | fail→pass | 11,352 | 1,364 | -88% | 1 | 1 | 0% | 1,957 | 1,160 | -41% | 0 | 0 | — |
case-18 | fail→pass | 2,926 | 2,448 | -16% | 1 | 1 | 0% | 405 | 1,423 | +251% | 0 | 0 | — |
case-19 | fail→fail | 18,977 | 9,019 | -52% | 1 | 1 | 0% | 2,246 | 2,968 | +32% | 0 | 0 | — |
case-20 | fail→pass | 8,073 | 1,432 | -82% | 1 | 1 | 0% | 1,202 | 1,170 | -3% | 0 | 0 | — |
case-21 | fail→pass | 13,640 | 1,949 | -86% | 1 | 1 | 0% | 2,241 | 1,269 | -43% | 0 | 0 | — |
case-22 | fail→pass | 9,362 | 4,758 | -49% | 1 | 1 | 0% | 1,475 | 1,781 | +21% | 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 21 counted toward the lift figure. The other 1 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 +73 percentage points is the difference between those two pass rates over the 21 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.