Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Systematic literature review across multiple arXiv papers.
.claude/skills/hezaohezao-systematic-literature-review/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 52% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 59% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 101% | 0% |
| case-20 | ✗→✓ | ▲ Improved | -7% | 0% |
Produces a structured systematic literature review (SLR) across multiple academic papers on a research topic. Given a topic query, searches arXiv, extracts structured metadata from each paper, synthesizes themes, and emits a final report with consistent citations.
Distinct from academic-paper-review: that skill does deep peer review of a single paper. This skill does breadth-first synthesis across many papers.
> Poirot note: The original deer-flow skill uses a bundled > scripts/arxiv_search.py + subagent task tool for parallel extraction. > Poirot has neither, so this version uses bash with curl to the arXiv API > directly + sequential single-agent extraction.
Do not use when:
academic-paper-review)Confirm with the user:
window, optional arXiv category (e.g. cs.CL)
If user says "50+ papers", cap at 50 and explain synthesis quality degrades past that.
Use bash with curl to the arXiv API. Extract 2-3 core keywords before searching — don't pass the full topic description as the query.
bash# Search arXiv (use 2-3 core keywords, not the full topic) curl -s "https://export.arxiv.org/api/query?search_query=all:transformer+attention&max_results=20&sortBy=relevance" | python3 -c " import sys, xml.etree.ElementTree as ET, json ns = {'a': 'http://www.w3.org/2005/Atom'} root = ET.fromstring(sys.stdin.read()) papers = [] for entry in root.findall('a:entry', ns): papers.append({ 'id': entry.find('a:id', ns).text.split('/')[-1], 'title': entry.find('a:title', ns).text.strip().replace('\n', ' '), 'authors': [a.find('a:name', ns).text for a in entry.findall('a:author', ns)], 'published': entry.find('a:published', ns).text[:10], 'abstract': entry.find('a:summary', ns).text.strip(), 'pdf_url': [l.get('href') for l in entry.findall('a:link', ns) if l.get('title') == 'pdf'], 'abs_url': entry.find('a:id', ns).text, }) print(json.dumps(papers, indent=2, ensure_ascii=False)) "
Query tips:
--category (arXiv cat: field) to narrow, not stuffing field names into querysortBy=relevance (not submittedDate) for topical searches> Poirot note: The original skill delegates extraction to parallel > subagents. Poirot has no subagents, so extract sequentially in your own > context. For >20 papers, warn the user that sequential extraction is > token-heavy and suggest splitting.
For each paper, extract from its abstract:
arxiv_idtitleauthorspublished_dateresearch_question (1 sentence — what problem the paper tackles)methodology (1-2 sentences — how they tackle it)key_findings (3-5 bullet points)limitations (1-2 sentences)Cross-paper synthesis — the report must do more than list papers:
Citation formatting (inline, no bundled templates — format manually):
APA (default):
Author, A., & Author, B. (Year). Title. arXiv preprint arXiv:XXXX.XXXXX.IEEE:
[1] A. Author and B. Author, "Title," arXiv preprint arXiv:XXXX.XXXXX, Year.BibTeX (arXiv papers are @misc, not @article):
bibtex@misc{authorYear, title={Title}, author={Author, A. and Author, B.}, year={Year}, eprint={XXXX.XXXXX}, archivePrefix={arXiv} }
Save the full report to .poirot/outputs/slr-<topic-slug>-<YYYYMMDD>.md via write_file. Present via present_files.
In the chat message, show a short preview:
Do NOT dump the full report inline — per-paper annotations and references belong in the file.
markdown# Systematic Literature Review: [Topic] ## Executive Summary [3-5 sentence overview] ## Methodology [Search strategy, paper count, inclusion criteria] ## Themes ### Theme 1: [Name] [Cross-paper analysis with citations] ### Theme 2: [Name] [...] ## Convergences [Findings multiple papers agree on] ## Disagreements [Where papers diverge] ## Gaps [What the literature doesn't address] ## Paper Annotations ### [Paper 1 Title] - **Authors**: ... - **Year**: ... - **Research Question**: ... - **Methodology**: ... - **Key Findings**: ... - **Limitations**: ... ### [Paper 2 Title] [...] ## References [Formatted per chosen citation style]
"diffusion models in computer vision" → 0 results.Use 2-3 core keywords + category filter.
of topic relevance. Use sortBy=relevance.
is a failure mode. If you can't find themes, say so explicitly.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 22,470 | 14,209 | -37% | 1 | 1 | 0% | 3,615 | 2,520 | -30% | 0 | 0 | — |
case-02 | fail→fail | 108,431 | 14,515 | -87% | 1 | 1 | 0% | 1,311 | 2,496 | +90% | 0 | 0 | — |
case-03 | fail→fail | 23,884 | 12,689 | -47% | 1 | 1 | 0% | 4,103 | 2,498 | -39% | 0 | 0 | — |
case-04 | pass→fail | 102,765 | 14,889 | -86% | 1 | 1 | 0% | 6,180 | 2,652 | -57% | 0 | 0 | — |
case-05 | pass→pass | 5,335 | 4,180 | -22% | 1 | 1 | 0% | 832 | 2,302 | +177% | 0 | 0 | — |
case-06 | pass→pass | 14,095 | 12,367 | -12% | 1 | 1 | 0% | 1,536 | 3,319 | +116% | 0 | 0 | — |
case-07 | pass→pass | 13,751 | 9,447 | -31% | 1 | 1 | 0% | 2,386 | 3,392 | +42% | 0 | 0 | — |
case-08 | pass→pass | 14,020 | 5,997 | -57% | 1 | 1 | 0% | 2,105 | 2,547 | +21% | 0 | 0 | — |
case-09 | pass→pass | 12,688 | 7,626 | -40% | 1 | 1 | 0% | 2,223 | 2,741 | +23% | 0 | 0 | — |
case-10 | pass→pass | 6,070 | 4,296 | -29% | 1 | 1 | 0% | 887 | 2,322 | +162% | 0 | 0 | — |
case-11 | fail→pass | 13,514 | 7,940 | -41% | 1 | 1 | 0% | 1,917 | 2,920 | +52% | 0 | 0 | — |
case-12 | fail→pass | 10,789 | 5,927 | -45% | 1 | 1 | 0% | 1,618 | 2,570 | +59% | 0 | 0 | — |
case-13 | fail→pass | 13,022 | 3,617 | -72% | 1 | 1 | 0% | 1,750 | 2,170 | +24% | 0 | 0 | — |
case-14 | pass→pass | 9,326 | 7,040 | -25% | 1 | 1 | 0% | 1,321 | 2,451 | +86% | 0 | 0 | — |
case-15 | fail→pass | 8,733 | 6,198 | -29% | 1 | 1 | 0% | 1,283 | 2,573 | +101% | 0 | 0 | — |
case-16 | pass→pass | 10,379 | 6,787 | -35% | 1 | 1 | 0% | 1,712 | 2,701 | +58% | 0 | 0 | — |
case-17 | pass→pass | 10,297 | 8,102 | -21% | 1 | 1 | 0% | 1,630 | 3,034 | +86% | 0 | 0 | — |
case-18 | pass→pass | 27,412 | 6,952 | -75% | 1 | 1 | 0% | 2,518 | 2,533 | +1% | 0 | 0 | — |
case-19 | fail→fail | 11,274 | 3,546 | -69% | 1 | 1 | 0% | 1,873 | 2,119 | +13% | 0 | 0 | — |
case-20 | fail→pass | 13,545 | 2,654 | -80% | 1 | 1 | 0% | 2,129 | 1,989 | -7% | 0 | 0 | — |
case-21 | fail→fail | 8,950 | 4,191 | -53% | 1 | 1 | 0% | 1,292 | 2,299 | +78% | 0 | 0 | — |
case-22 | fail→fail | 6,066 | 1,881 | -69% | 1 | 1 | 0% | 727 | 1,783 | +145% | 0 | 0 | — |
case-23 | fail→fail | 11,744 | 2,538 | -78% | 1 | 1 | 0% | 1,677 | 1,925 | +15% | 0 | 0 | — |
case-24 | fail→pass | 11,787 | 6,334 | -46% | 1 | 1 | 0% | 1,881 | 1,954 | +4% | 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. 24 cases were attempted, and 20 counted toward the lift figure. The other 4 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 +21 percentage points is the difference between those two pass rates over the 20 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
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.