Conduct a comprehensive academic literature survey on a given research topic. Searches the web systematically for papers from recent to historical, producing a structured Markdown report with summaries. Use this skill whenever the user asks for a literature review, survey, related work search, prior art investigation, or wants to know what research exists on X. Also trigger when the user says things like papers about, survey the field of, what is the state of the art in, find relevant publications, prior work, related work, or any request to systematically gather academic references.
You are conducting a comprehensive academic literature survey. Your goal is to produce a well-organized, citable reference collection that gives the user a clear picture of the research landscape on their topic.
The entire report must be written in a single language, determined by the language of the user's topic description:
"Prose" means: section narratives, thesis/core/diff/limit annotations, category descriptions, gap analyses, seed proposals, significance descriptions, and methodology notes.
Always keep the following in English regardless of output language: chapter/section/subsection headings, paper titles, author names, venue names, proposed method/architecture names (e.g., "Rapid Motor Adaptation", "Domain Contraction"), DOI, URLs, BibTeX keys, and structural labels (thesis/core/diff/limit).
Do NOT mix languages within a single report. The template below contains placeholder descriptions in English; translate them to match the output language.
All subagents launched during the survey must use the middle-class model (the tier between the highest-capability and lowest-cost models in the current lineup). This balances annotation quality against cost and context efficiency.
Before searching, establish the survey's scope and boundaries with the user:
If the user's request is already specific enough, propose the RQs and criteria for confirmation rather than asking open-ended questions.
Search systematically in three temporal tiers:
Tier 1 — Recent (last 2-3 years): Exhaustive
Tier 2 — Established (3-10 years): High-impact focus
Tier 3 — Foundational (10+ years): Seminal works only
Before executing searches, derive a structured keyword set from the RQs:
Example: ("multi-robot" OR "multi-agent" OR "swarm") AND ("task allocation" OR "task assignment") AND ("cooperation" OR "coordination")
Record the final search strings in the Search Log.
Use multiple complementary search approaches to maximize coverage:
WebSearch is the primary discovery tool — it is fast, has no rate limits, and
reliably finds papers across all venues. Use it alongside the structured
metadata tools (Semantic Scholar MCP, OpenAlex script) described in
references/search_sources.md. Read that file at the start of Phase 2 for
tool-specific details (API formats, MCP parameters, OA resolution priority).
Use subagents to parallelize searches across different queries and sources. Each subagent should handle a distinct search angle (e.g., one for the main topic, one for a related subtopic, one for survey papers).
Search logging requirement: Every subagent must return a structured search log alongside its paper results. The log must record, for each search action performed: (1) the information source (e.g., WebSearch, Semantic Scholar API, arXiv API, ar5iv, IEEE Xplore), (2) the exact query string or URL used, (3) the number of results obtained, and (4) a brief note on relevance. This log is aggregated into the Survey Methodology → Search Log section of the final report.
DOI/URL requirement: Every paper collected must have at least one of:
publisher DOI (preferred), arXiv ID (fallback), or URL (last resort). See
references/search_sources.md § DOI Types for details. Papers for which
none of these can be found should be excluded.
Multiple search angles will inevitably find the same paper. Deduplicate before proceeding to Phase 2.5:
https://doi.org/ or https://arxiv.org/abs/)Before investing effort in paper-level analysis (Phase 3), present the search results to the user for review. This checkpoint exists because Phase 3 is the most token- and time-intensive part of the workflow — the paper list should be confirmed before analysis begins.
Present the following to the user:
A paper list grouped by temporal tier, sorted within each tier by citation count (descending):
## Search Results (N papers found, target: M)
### Tier 1 — Recent (2023-2026): N papers
| # | Title | Year | Venue | Citations |
|---|-------|------|-------|-----------|
| 1 | ... | 2025 | NeurIPS | 42 |
### Tier 2 — Established (2016-2022): N papers
| # | Title | Year | Venue | Citations |
|---|-------|------|-------|-----------|
### Tier 3 — Foundational (~2015): N papers
| # | Title | Year | Venue | Citations |
|---|-------|------|-------|-----------|
### Coverage Summary
- Search angles used: N (list them)
- Top venues represented: ...
- Duplicates removed: N
Scoring criteria (used for sort order and for pruning when count exceeds target):
Before presenting, apply the inclusion/exclusion criteria defined in Phase 1 and note any papers excluded with reasons.
Ask the user:
Do not proceed to Phase 3 until the user approves the paper list.
Classify the approved papers by full-text accessibility, then process OA papers first.
Step 1 — Classify papers:
For each approved paper, determine full-text access status:
openAccessPdf was returned by search_semantic_scholar, classify as OA.resolve_oa_url with the paper's DOI / arXiv ID / S2 ID.
best_url is non-null → OAbest_url is null → PaywallRecord the classification and the resolved URL for each paper.
Step 2 — Extract key sections (deterministic):
For arXiv papers, run the section extraction script to obtain structured content without reading full text:
python3 scripts/extract_sections.py --input oa_papers.json --output sections.json
The script fetches ar5iv HTML and extracts: abstract, introduction, conclusion, limitations, future work, tables (as Markdown), and figure captions. This replaces full-text reading for most papers — the extracted sections contain the information needed for all four annotation fields.
For non-arXiv OA papers (e.g., publisher HTML), fall back to WebFetch on the OA URL, but instruct the subagent to focus on the same sections.
Step 3 — Annotate via subagents:
Distribute the extracted sections across subagents in batches of 15-20 papers each. Because each paper is now represented by its key sections (~2,000-5,000 tokens) rather than full text (~10,000-15,000 tokens), larger batches are feasible.
Each subagent receives the pre-extracted sections and returns only a JSON array — no intermediate reasoning or raw content:
[
{
"key": "Author2024_keyword",
"title": "...", "authors": "...", "year": 2024,
"venue": "...", "doi": "...", "arxiv_id": "...", "oa_url": "...",
"thesis": "1-2 sentences",
"core": "1-2 sentences",
"diff": "1-2 sentences",
"limit": "1-2 sentences"
}
]
Annotation field definitions:
thesis: The author's central claim — not what the method does, but what the author argues is true. Frame as an argumentative stance (e.g., "dense physical features from interaction are necessary for manipulation, visual appearance alone is insufficient" rather than "proposes a method to assign dense physical features").
core: The essential, irreplaceable element(s) of the method. Without this, the approach would not work. Be specific (e.g., "differentiable rendering loss that back-propagates through the physics simulator" not just "differentiable rendering").
diff: Explicit contrast with prior work. Name the predecessor(s) and state what limitation is overcome or what new capability is introduced. Avoid vague statements like "improves over previous methods".
limit: Constraints or unsolved problems the authors explicitly acknowledge — from the extracted Limitations/Future Work sections. Record only what the authors themselves state. If the extraction script could not find a Limitations section, supplement with abstract hints or write "limit not available" rather than guessing.
No speculation: Fabricated limitations are indistinguishable from real ones and undermine the survey's reliability.
After all subagents return, merge their JSON arrays into a unified paper list. Then identify themes, trace the evolution, and highlight connections across the full set.
Step 3 — OA coverage analysis and paywall processing recommendation:
After processing all OA papers, analyze coverage and present a recommendation before proceeding to Phase 3b:
Present the analysis and recommendation to the user:
## Paywall Processing Recommendation
### OA Coverage Analysis
- Total: N papers (OA: X, Paywall: Y)
- Categories with OA-only coverage: [list]
- Categories requiring Paywall papers: [list, with reason]
- Annotation completeness (OA only): Z%
### Recommendation: [Skip all / Selective fetch / Full fetch]
[1-2 sentence justification]
### Paywall Papers (Y papers, M publishers)
| Publisher | Count | Papers | Priority |
|-----------|-------|--------|----------|
| IEEE Xplore | 3 | [Title1], ... | [High/Low] |
| Elsevier | 2 | [Title4], ... | [High/Low] |
For publishers you want to fetch:
1. Log in via your browser
2. Export cookies via Cookie-Editor (Export → JSON → copies to clipboard)
3. Run: bash ~/.claude/mcp/academic-fetch/save-cookies.sh
4. Say "ready" to process that publisher's papers
You can also say "skip" for any publisher to mark those papers as
"limit not available (paywall)" and move on.
If there are no paywall papers, skip Phase 3b entirely and proceed to Phase 4.
Process paywall papers one publisher group at a time:
for each publisher group (IEEE, Elsevier, Springer, ACM, ...):
1. Ask the user to export cookies for this publisher + run save-cookies.sh
2. User says "ready" → process all papers from this publisher via fetch_with_auth
3. Annotate with the same four fields (thesis/core/diff/limit)
4. If fetch_with_auth returns session-expiry → ask user to re-export cookies
5. User says "skip" → mark all papers from this publisher as
"limit not available (paywall)"
After all publisher groups are processed (or skipped), merge Phase 3a and 3b results into a unified set of annotated papers. Update the themes and connections identified in Phase 3a to incorporate newly analyzed paywall papers.
Before proceeding to Phase 4, consolidate the analysis state. At this point, only the following information is needed for the remaining phases:
All raw search results, full-text content, and intermediate reasoning from Phase 2-3 subagents have already been consumed and should not be carried forward. If the conversation context has grown large, summarize the above into a compact working state before continuing.
Many ML/AI papers first appear on arXiv but are later published at venues
with a separate publisher DOI. The arXiv DOI (10.48550/arXiv.XXXX.XXXXX)
is not the publisher DOI — the publisher DOI should appear in formal citations.
Run the DOI resolution script on all papers that currently only have an arXiv ID or URL:
python3 scripts/resolve_dois.py --input papers.json --output resolved.json
The script queries DBLP, resolve_oa_url MCP tool, and Crossref in cascade,
respecting rate limits. Resolution priority: publisher DOI > arXiv ID > URL.
Record the resolution results in the DOI Resolution Log section of the final report (see Phase 7 template).
Derive survey-level findings by cross-cutting the paper-level annotations. This is the primary intellectual contribution of the survey — it transforms a collection of papers into actionable research insight.
Read references/synthesis_guide.md for detailed writing guidelines for
each section. The four paper-level axes aggregate into survey-level sections:
references/seed_format.md for structure.Additionally, produce these cross-cutting analyses from the consolidated paper metadata (no new searches needed):
Use the reference-verify skill to verify all collected papers and retrieve
missing limit fields. Invoke it with:
limit fieldThe reference-verify skill will:
limit fields by barrier type (paywall /
rendering failure / no Limitations section expected) and ask the user
per-category whether to attempt additional retrievalOnly proceed to Phase 7 after reference-verify completes and the user has responded to any triage prompts.
Produce the survey report in docs/SURVEYS/<topic_slug>.md.
Read references/report_template.md for the complete report structure.
If the user requested research proposals/seeds, also read
references/seed_format.md for the Seed section structure.
Generate the report in sections to avoid hitting output limits and to maintain quality across the full document:
Follow the citation conventions in .claude/rules/references.md.
Additional steps:
docs/SURVEYS/README.md
after the survey is completedocs/LOGS/literature-survey.md with the search process,
output file paths, and implications for the projectBefore delivering results, read references/quality_checklist.md and verify
all items.