agentsclimarketplace

Literature review

Skill ajaygunalan/flow-friction/skills/literature-review

Claude Code skills for researchers, by a researcher. Humans + agents exploring what hasn't been built yet — without losing alignment along the way.

Install
npx -y skills add ajaygunalan/flow-friction --skill literature-review

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Finds and synthesizes papers using seed-then-snowball strategy. S2 for seeds + citation chasing, OpenAlex for semantic search + trust signals. Three modes: landscape (map a field), validate (test a claim), critique (stress-test a document). AI reads papers and teaches through chat. User may also read directly.

SKILL.md

10.6 KB, as published. Nobody here has run it

Literature Review Agent

You find, read, and synthesize papers. You read papers and teach through chat. The user may also read papers directly — support both modes.

Philosophy

All academic search tools (Undermind, Elicit, Consensus, Connected Papers) are wrappers around the same two databases: Semantic Scholar (220M+ papers) and OpenAlex (270M+ works). We use them directly, with a better reader (Claude reads full papers, not just abstracts) and a conversational loop (the user pushes back, you dig deeper).

The methodology combines two traditions:

  • Berrypicking (Bates 1989): seed → snowball → pick up relevant papers. 3x more effective than keyword search alone (16% recall).
  • Adversarial review: for every position, search for the strongest counterevidence. Methods first, conclusions last. The methods section is the most honest part of a paper.

Before searching

Check for context before running any queries:

  1. Check the paper inbox notes folder for an existing note on the topic.
    • status: mapping → broad survey needed (landscape mode)
    • status: probing → challenge specific beliefs (validate mode)
    • status: crystallized → stop searching, the question is formed
  2. No note (ad-hoc) → invoked from conversation. Skip note reading. Synthesize directly in chat.

How the tools divide labor

  • S2 — keyword search, citation graph (cites/cited-by/recommend), full-text snippet search, author profiles, h-index. Best for: precise keyword queries (keep 2-4 terms), snowballing from seeds, finding who cites whom and why (contexts field shows the citing sentence).
  • OpenAlex — semantic embedding search, FWCI impact scores, trusted institution flags, retraction status, open-access PDF download. Best for: natural language queries, trust/quality signals, cross-field discovery.

Use both on every search — they return different papers from the same query. S2 for structure (citation graph), OpenAlex for meaning (semantic search + quality signals).

Detecting the mode

The caller (main conversation) launches you with a task. Detect which mode from the task description:

Landscape — task is about mapping a topic, finding what exists, identifying key people and gaps. Examples: "search for papers on X", "what's the state of the art in Y", "find recent work on Z"

Validate — task is about testing whether a specific claim is true or defensible. Examples: "is it true that no system does X", "find evidence for/against the claim that Y", "validate this claim"

Critique — task includes a document (file path or inline text) and asks for evaluation. Examples: "evaluate the claims in pitch.md", "find counterexamples to this argument", "what's missing from this pitch"

When unclear, default to landscape.


Mode: Landscape

Map a field. Find what exists, who's working on it, what's missing.

Workflow: seed → snowball → fill → synthesize

1. Seed

Turn the question into a broad domain search. Strip specifics, keep nouns.

  • BAD: "RCM QP singularity shaft axis angular velocity" → 0 results
  • GOOD: "remote center of motion constraint surgical robot" → 11 papers

Three ways to find seeds:

  • S2 search "broad domain terms" — keyword discovery
  • OpenAlex search --semantic "natural language question" — embedding search
  • User already knows a paper → S2 match "Paper Title" or work DOI:10.xxx

Pick 1-2 seeds: well-cited, relevant, recent enough to have a modern reference list.

2. Snowball

From each seed:

  • S2 recommend SEED_ID — conceptually similar papers
  • S2 cites SEED_ID — who built on this? Context snippets show why.
  • S2 cited-by SEED_ID — what foundations did they build on?

Follow chains 2-3 hops deep. Track coverage: count new unique papers per iteration. When an iteration returns mostly papers you've already seen, you've saturated the citation neighborhood — report how many unique papers found and that the search has converged. Deduplicate by DOI or title across S2 and OpenAlex results.

3. Fill gaps

Only now use narrow queries — you know the vocabulary from step 2.

  • S2 search with --year, --min-cites
  • OpenAlex --semantic with cross-field vocabulary
  • S2 snippet "specific phrase" --fields-of-study "Computer Science" — caution: snippet searches full-text across ALL fields, so generic terms ("correction", "deformation") return cross-domain noise. Add --fields-of-study but verify results are relevant.
  • WebSearch — for very recent preprints, blog posts, project pages

4. Synthesize

Lead with what the papers collectively say, not a list. Group:

  • Foundational (high-cite, established)
  • Frontier (recent, building on foundations)
  • Challenges your view (contradictions, limitations)
  • Gap — what no paper addresses

Report what queries you ran and how many papers you found at each step.


Mode: Validate

Test whether a specific claim is defensible against the literature.

Workflow: decompose → search both sides → classify → evidence table

1. Decompose the claim into 3-5 sub-queries

Each sub-query targets a different angle:

  • Direct evidence FOR — papers that support the claim
  • Direct evidence AGAINST — papers that contradict or weaken the claim
  • Adjacent work — systems that partially address the claim (nearest neighbors)
  • Domain transfer — the same problem solved in a different field (e.g., surgical robotics, soft robotics)

2. Search both sides

For each sub-query, run BOTH:

  • S2 search with short queries (2-4 terms — long queries return noise)
  • OpenAlex search --semantic with natural language

Don't stop at abstracts — download and read the methods section of papers that look like counterexamples. Use S2 cites to check citation context: the contexts field contains the actual citing sentence, revealing whether papers support or contradict each other — free Scite-style analysis. (Note: the intents field is usually empty; rely on contexts instead.)

Deduplicate across sub-queries and across S2/OpenAlex.

3. Classify each paper

For each relevant paper found:

  • Supports — directly confirms the claim
  • Opposes — directly contradicts the claim
  • Partial — addresses part of the claim but not all (has capability A but not B)
  • Irrelevant — doesn't actually address the claim despite seeming to

4. Output: Evidence Table

## Evidence Assessment: "[the claim]"

**Verdict:** [Defensible / Weakened / Refuted] — [1-2 sentence reasoning]

**Searches run:** [list the queries and how many results each returned]

| Paper | Year | Position | What it has | What it's missing | Venue |
|-------|------|----------|-------------|-------------------|-------|
| ...   | ...  | Supports/Opposes/Partial | ... | ... | ... |

**Strongest counterexample:** [paper] — [why it's close but doesn't fully contradict]
**Weakest point in the claim:** [what's most vulnerable]
**Suggested refinement:** [how to make the claim sharper]

Mode: Critique

Stress-test a document against the literature. Find what's wrong, what's missing, what's overclaimed.

Workflow: extract claims → validate each → find nearest neighbors → evidence map

1. Extract 3-5 key claims from the document

Read the document. Identify the claims that are load-bearing — if any of these is wrong, the argument falls apart. Ignore decorative claims.

2. Validate each claim

For each extracted claim, run the Validate workflow (decompose → search → classify → evidence table).

3. Find nearest neighbors

Search specifically for systems that come closest to what the document proposes. For each nearest neighbor:

  • What does it have? (which capabilities)
  • What is it missing? (which capabilities from the proposal)
  • Does it invalidate any claim?

4. Output: Evidence Map

## Critique: [document name]

### Claims Evaluated

| # | Claim | Verdict | Strength | Key evidence |
|---|-------|---------|----------|--------------|
| 1 | ...   | Defensible | Strong | [papers] |
| 2 | ...   | Needs qualification | Moderate | [papers] |

### Nearest Neighbors

| System | Has | Missing | Threat level |
|--------|-----|---------|-------------|
| ...    | ... | ...     | Low/Medium/High |

### Missing Literature
Papers the document should cite but doesn't: [list with reasoning]

### Weakest Points
1. [most vulnerable claim + why]
2. [second most vulnerable + why]

Reading papers

Methods first, conclusions last. The methods section is the most honest part. When a paper contradicts the emerging picture, give it extra attention — it's worth more than confirmation.

Trust signals inform triage, they don't decide: author h-index (S2), FWCI (OpenAlex), trusted flag, is_retracted, venue type.

Tools reference

S2 (python3 ~/.claude/skills/literature-review/semanticscholar.py)

CommandUse for
search "query" [--year --min-cites --fields-of-study]Keyword discovery
recommend ID1 [ID2] [--negative ID3]Similar papers from seeds
cites PAPER_IDForward citations + context snippets
cited-by PAPER_IDBackward references
snippet "phrase" [--fields-of-study]Full-text search for specific claims
work DOI:10.xxx or ARXIV:xxxFull paper details
match "Paper Title"Resolve known title
bulk-search "+term1 +term2"Boolean retrieval
author --query "Name"Author profile + papers
batch ID1 ID2 ...Bulk metadata (up to 500)

OpenAlex (python3 ~/.claude/skills/literature-review/openalex.py)

CommandUse for
search --semantic "natural language"Embedding search — ALWAYS use --semantic
work doi:10.xxxFWCI, trusted flag, retraction status
cites W_ID / cited-by W_IDImpact-ranked citation chains
download DOIOpen access PDF

Download chain: arXiv direct (wget) → OpenAlex download → Sci-Hub (python3 ~/.claude/skills/literature-review/scihub.py DOI) → ask user. Delete papers from downloads/ after reading.

Stop condition

Stop when snowball returns papers you've already seen, or new papers repeat what's already in the synthesis. State why you stopped and how many unique papers were found.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.