git:20260801.92066a8 to git:20260816.42573eb

76 added, 27 removed. Audit A to A.

---
name: literature-review
- description: Find, verify, and synthesize scientific literature — from "what's the seminal paper for X" through full multi-source reviews. Covers grounding claims in real retrieved sources, avoiding fabricated citations, handling retractions, and calibrating confidence to evidence strength.
+ description: Retrieve, verify, and synthesize scientific literature. Use for seminal-paper lookups, evidence summaries, method comparisons, and gap analyses. Every citation must come from a live lookup, never from memory; retractions are checked; the deliverable is argued prose with resolvable DOI links.
license: Apache-2.0
metadata:
# Non-biomodel: sends user's query (and contact email when configured) to
# Crossref and OpenAlex for literature lookup.
third_party:
# The leaf /rest-api-metadata-license-information/ page now 404s though
# still in search indexes. Parent docs landing carries the license
# statement ("Almost all of the metadata we hold is reusable without
# restriction") and is less likely to rot. Docs page, not a ToU —
# info_url. verified 2026-06-30
- kind: service
name: Crossref
info_url: https://www.crossref.org/documentation/retrieve-metadata/
privacy_url: https://www.crossref.org/operations-and-sustainability/privacy/
- kind: service
name: OpenAlex
terms_url: https://openalex.org/OpenAlex_termsofservice.pdf
privacy_url: https://openalex.org/OpenAlex_privacy_policy.pdf
wisp:
schema_version: 1
domains: [scientific-literature]
research_stages: [retrieval, validation, synthesis]
roles: [retrieval, critic, synthesizer]
evidence_types: [literature]
outputs: [literature-review, evidence-matrix]
side_effects: network
---
# Literature review
- A literature question has two halves: finding the papers a domain expert would point to, and turning them into something more useful than a reading list — a synthesis that says what's established, what's contested, what's new, and where the holes are. Both halves can fail quietly and look like competent output until someone checks.
-
- ## Read the request for what it's actually asking
-
- "What's the paper for X" wants one or two specific citations; "what's the evidence on X" wants a synthesis; "compare A and B" wants a comparison, not two adjacent summaries; "where are the gaps" wants the gaps, with the survey as supporting material. A two-word lay query wants you to choose the scope a domain expert would default to and say so up front — "I'll take this as asking about human RCT evidence; the animal literature is separate." Ask a clarifier only when the answer would genuinely change what you do.
-
- ## Grounding: retrieve first, then write
+ Work through six steps: scope, sweep, expand, verify, write, lint. The failure
+ modes this skill exists to prevent are all silent — a fabricated DOI, a
+ retracted headline result, a reading list dressed up as a synthesis — so each
+ step below names the check that catches it.
- For broad-survey, where-are-the-gaps, and compare-methods requests, the first move is a literature sweep — `search_openalex` / `crossref_lookup` from `kernel.py`, a PubMed query, or a literature/data connector explicitly advertised in the current session. Use `search_skills` with `{"query":"literature PubMed Semantic Scholar bioRxiv ClinicalTrials"}` to discover installed guidance, then load the exact relevant name with `use_skill`. Build the answer from retrieved evidence. Your recall picks the framing; retrieval picks the citations. A real survey usually carries on the order of fifteen or more distinct primary-paper DOIs, because each claim is anchored to the paper that established it; a handful of review citations is a reading list, not a synthesis. When the question is after a *specific* paper — "the original," "the seminal," a named trial or method — find the highly-cited primary publication that the follow-ups all cite, not a review or news piece about it.
+ ## 1. Scope the request
- That applies even when you know the answer cold. Resolving the DOI for a paper you're certain of — the Transformer paper, a textbook constant, a landmark trial — is a one-second tool call, and it's the difference between a citation and a claim about a citation. Verification is something that happens in your tool trace, not a sentence in your reply. **A DOI you emit either resolves to a real paper that says what you claim, or it's a fabrication, and the difference is checkable in five seconds.** When you have author/year/journal but not the DOI, look it up via CrossRef or OpenAlex rather than pattern-completing one; when even those details are hazy, that's a search query, not a citation. For recent developments, contested findings, or anything you "remember" from near or after your knowledge cutoff, retrieval isn't optional.
+ Different phrasings want different deliverables:
- After the first sweep, take the two or three most relevant hits and walk one step in each direction on the citation graph: pull their reference lists (backward) and their cited-by lists (forward), then fold anything new and on-topic into the set before you start writing. The seminal paper a field builds on surfaces in the backward step; the recent work that extends or contests your top hits surfaces in the forward step, and neither reliably appears in a keyword sweep alone. `expand_citations(doi)` in `kernel.py` returns both directions from OpenAlex.
+ | Request shape | Deliverable |
+ |---|---|
+ | "the paper for X" / "the original/seminal…" | one or two primary citations |
+ | "what's the evidence on X" | thematic synthesis |
+ | "compare A and B" | trade-off analysis ending in a recommendation |
+ | "where are the gaps" | named gaps, each anchored to what establishes it |
- ## Retractions and the null result
+ A vague lay query gets the scope a domain expert would default to, stated
+ explicitly ("taking this as human RCT evidence; animal work is separate").
+ Clarify with the user only when the answer would change what you retrieve.
- Sensational papers are findable because they were sensational, and some were later retracted or failed to replicate. CrossRef's `update-to` field flags retractions; for any high-profile or surprising finding, a check takes seconds. The related trap is the question whose honest answer is "no such paper exists": when someone asks for "the paper showing X" and X fell apart or was never established, the right answer names the claim, says what happened to it, and points to what the actual evidence shows — not the closest-matching citation.
+ ## 2. Sweep
- ## Synthesis is comparison, not summary
+ Never write from recall. Recall chooses the framing and the search terms;
+ retrieval supplies every citation. Start with `search_openalex` /
+ `crossref_lookup` from this skill's `kernel.py`, a PubMed query, or any
+ literature connector advertised in the session (`search_skills` with
+ `{"query":"literature PubMed Semantic Scholar bioRxiv ClinicalTrials"}` finds
+ installed guidance; load matches with `use_skill`).
- A list of papers with one-sentence summaries is a bibliography. The useful layer is on top: this finding replicated, that one didn't; these three agree on the effect but disagree on mechanism; this approach wins in setting A and that one in B; this 2015 result was superseded by this 2022 one. Organize by theme or question, not by paper. For compare-methods requests the deliverable is the trade-off and a recommendation, not two summaries.
+ For a named-paper lookup, the target is the highly cited primary publication
+ that later work cites — not a review of it, not a news piece. Even when you
+ know the paper cold, resolving its DOI is one tool call; skipping it turns a
+ citation into a claim about a citation.
- ## Making the prose carry its weight
+ ## 3. Expand along the citation graph
- A review paragraph earns its place by opening on *your* synthetic claim and then spending citations to back it, not by opening on a citation and reporting what it found. "Chen 2019 reported a 40% reduction; Park 2020 reported 35%" is two index cards. "The effect is real but modest, with pooled estimates clustering at 35-40% (Chen 2019; Park 2020)" is a review. The diagnostic: read only the first sentence of each paragraph in sequence; if they form your argument, you've written a synthesis; if they form a list of author names, you've written an annotated bibliography in paragraph costume.
+ Keyword sweeps miss two things systematically: the foundational paper a field
+ builds on, and the newest work that extends or contests your top hits. Take
+ the two or three most relevant results and run `expand_citations(doi)` — it
+ returns references (backward) and cited-by (forward) from OpenAlex. Fold the
+ on-topic finds back into the working set before drafting. A survey-grade
+ answer typically rests on fifteen or more distinct primary-paper DOIs; a
+ handful of reviews is a reading list.
- ## Write prose, not a bulleted bibliography
+ ## 4. Verify
- The artifact should read like a section of a referee-grade review: paragraphs of connected argument, each making one claim and anchoring it with an inline citation, transitioning to the next. A page that is 80% bullet points is a reading list dressed up as a review — it tells the reader *that* papers exist, not what they collectively show. Reserve bullets for places a list is genuinely the right structure (a reference appendix, a head-to-head comparison table, an enumerated set of named methods); the synthesis itself is prose. If you find yourself starting consecutive lines with `- Author Year showed…`, that's a paragraph that hasn't been written yet.
+ Run `verify_dois` on everything you intend to cite. A DOI either resolves to
+ a paper that says what you claim, or it is a fabrication — there is no third
+ state. When you have author/year/journal but no DOI, look it up; never
+ pattern-complete one. For surprising or high-profile findings, check
+ Crossref's `update-to` field: sensational papers are findable *because* they
+ were sensational, and some were retracted. When the requested paper does not
+ exist — the claim collapsed or was never established — say exactly that and
+ point at what the evidence actually shows, instead of substituting the
+ nearest-matching citation.
- ## Calibrating to evidence
+ ## 5. Write the synthesis
- Say which findings are landmark and which are recent; flag preprints as preprints; note when older results were refined or overturned. Match confidence to evidence: a single-cohort finding is "one group reported X," a phase-3 RCT is stated plainly, a contested area gets both sides and an honest "unresolved." When the question contains a contested premise, engage the premise rather than building on it. When the request is about gaps, name specific ones and anchor each to what establishes it as a gap — "more research is needed" means you haven't found the actual hole.
+ Organize by question or theme, never paper-by-paper. The value is the layer
+ on top of the papers: what replicated, what didn't, where the field agrees on
+ effect but splits on mechanism, which older result a newer one superseded.
+ Two tests for the draft:
- ## Put the answer in the answer — and open on the substance
+ - **First-sentence test.** Read only each paragraph's opening sentence. In
+ sequence they should form your argument; if they form a list of author
+ names, you have an annotated bibliography.
+ - **Bullet test.** Consecutive lines starting `- Author Year showed…` are a
+ paragraph you haven't written. Bullets are for genuinely enumerable things
+ (a reference appendix, a comparison table); the argument itself is prose.
- The review — prose, citations, bottom line — belongs in your response text, where the reader sees it. For anything beyond a one-paper lookup, also write the full review to a concrete project-relative Markdown path with `write` or `edit`; the chat reply *is* the answer, and the file link goes at the end of it, never as a "Report saved:" opener. A reply that is *only* "I've saved a 14-paper review, all DOIs verified" is not an answer — write the substance in the chat, then link the file.
+ Calibrate stated confidence to the evidence: a phase-3 RCT is stated plainly,
+ a single-cohort finding is "one group reported", preprints are flagged as
+ preprints, contested areas get both sides plus an honest "unresolved". Engage
+ a contested premise rather than building on it.
- The first sentence should be content the reader came for: the finding, the paper, the comparison. "Here's the synthesis," "All DOIs verified against CrossRef; no retraction flags," "I've verified every citation," "the report is current as of today" — these are process narration, and they don't belong in the chat reply *or* the saved artifact. Verification happens in your tool trace; the reader infers it from citations that resolve and claims that hold up. Do not write a "DOIs verified / no retractions" line anywhere in the output — not as an opener, not as a footer, not as an italic subtitle under the artifact title. The artifact body follows exactly the same rule as the chat reply: open on substance, close on substance. The register to aim for is a tight methods paragraph or a referee-grade mini-review: lead with the key result, lay out the supporting evidence with inline DOIs, address the obvious counterpoint or limitation, and close on what's still open. A reader who only gets your first paragraph should already have the answer.
+ Cite inline as `[Author Year](https://doi.org/10.xxxx/...)` so prose renders
+ as `(Author Year)` with the DOI in the href. URL-encode parentheses inside a
+ DOI as `%28`/`%29`. No numbered `[1]` references — they desync on reorder.
+ Headings are short noun phrases; with five or more topics, group under two or
+ three `##` and demote the rest to `###`.
- Cite inline as a markdown link — `[Author Year](https://doi.org/10.xxxx/xxxxxx)` — so the rendered prose reads `(Author Year)` and the DOI rides in the href where a reader can click it and a regex can still extract it. If the DOI itself contains parentheses (some publishers use PII-style suffixes, e.g. `Sxxxx-xxxx(NN)nnnnn-n`), URL-encode them as `%28` and `%29` in the href so the markdown link does not break in simpler renderers. Do not use numbered `[1][2][3]` references (they desync the moment a paragraph is reordered), and reserve the raw `(DOI: 10.xxxx/...)` form for plain-text-only output; a sentence whose visible text is half identifier is not referee-grade prose. `kernel.py` provides `verify_dois`, `crossref_lookup`, `search_openalex`, `expand_citations`, and `style_pass`. Section headings are short noun phrases (six words or fewer); when you have five or more topics, group them under two or three parent `##` headings and demote the rest to `###`. The goal is that a domain expert reading your review nods along, finds the papers they'd have named themselves, and doesn't catch you in a single claim you can't back.
+ ## 6. Deliver and lint
- ## Style pass before saving
+ The answer lives in the chat reply: open on the finding itself, lay out the
+ evidence with inline DOIs, close on what remains open. For anything beyond a
+ one-paper lookup, also save the full review to a project-relative Markdown
+ file and link it at the *end* of the reply. Process narration — "all DOIs
+ verified", "no retraction flags", "report saved" — belongs nowhere: not as
+ opener, footer, or subtitle. Verification lives in the tool trace.
- Before saving the artifact, run `style_pass(draft)` once on the full markdown. Fix the issues it lists in a single editing pass, then save; do not call it a second time and do not loop until it returns ok. It is a lint, not a gate, and a clean draft on the first pass is normal. It is shipped in this skill's `kernel.py` and auto-loaded; if `style_pass` is not in `dir()`, read `kernel.py` from this skill's directory and exec it.
+ Before saving, run `style_pass(draft)` from `kernel.py` once on the full
+ markdown, fix what it lists in one editing pass, and save. It is a lint, not
+ a gate — do not loop on it. If `style_pass` is not defined in the kernel,
+ read this skill's `kernel.py` and exec it first.