Nature Paper Card
Yuan1z0825/nature-skills
Builds a structured deep-reading card for one scientific paper, covering methods, how experiments support claims, limitations and research ideas, with a script to prepare the source.
You must use this when synthesizing existing knowledge, identifying research gaps, or tracing the evolution of scientific ideas.
$ npx skills add poemswe/co-researcher --skill literature-review -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install poemswe/co-researcher literature-review --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/poemswe/co-researcher.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/literature-review .claude/skills/literature-review && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "literature-review" agent skill from https://github.com/poemswe/co-researcher/tree/main/skills/literature-review into .claude/skills/literature-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "literature-review", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/poemswe/co-researcher/tree/main/skills/literature-reviewType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add poemswe/co-researcher --skill literature-review -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install poemswe/co-researcher literature-review --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/poemswe/co-researcher.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/literature-review .agents/skills/literature-review && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "literature-review" agent skill from https://github.com/poemswe/co-researcher/tree/main/skills/literature-review into .agents/skills/literature-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "literature-review", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add poemswe/co-researcher --skill literature-review -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install poemswe/co-researcher literature-review --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/poemswe/co-researcher.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/literature-review .cursor/skills/literature-review && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "literature-review" agent skill from https://github.com/poemswe/co-researcher/tree/main/skills/literature-review into .cursor/skills/literature-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "literature-review", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/poemswe/co-researcher.git --path skills/literature-review--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add poemswe/co-researcher --skill literature-review -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install poemswe/co-researcher literature-review --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/poemswe/co-researcher.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/literature-review .gemini/skills/literature-review && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "literature-review" agent skill from https://github.com/poemswe/co-researcher/tree/main/skills/literature-review into .gemini/skills/literature-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "literature-review", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install poemswe/co-researcher literature-reviewInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add poemswe/co-researcher --skill literature-review -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/poemswe/co-researcher.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/literature-review .github/skills/literature-review && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "literature-review" agent skill from https://github.com/poemswe/co-researcher/tree/main/skills/literature-review into .github/skills/literature-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "literature-review", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add poemswe/co-researcher --skill literature-review -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install poemswe/co-researcher literature-review --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/poemswe/co-researcher.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/literature-review .opencode/skills/literature-review && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "literature-review" agent skill from https://github.com/poemswe/co-researcher/tree/main/skills/literature-review into .opencode/skills/literature-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "literature-review", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
literature-reviewYou must use this when synthesizing existing knowledge, identifying research gaps, or tracing the evolution of scientific ideas.
Literature Review is an agent skill from poemswe/co-researcher. You must use this when synthesizing existing knowledge, identifying research gaps, or tracing the evolution of scientific ideas.
Its SKILL.md is about 6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 33 other files, including scripts and reference files (for example `references/arxiv/query_syntax.md`, `references/openalex/authors.md` and `references/openalex/geo_and_language.md`).
It sits in Research & Science, covering Literature review. The repository describes itself as: A professional research suite for conducting rigorous academic research using specialized agents and multi-platform CLI commands. Compatible with Claude Code, Gemini CLI, OpenAI… The licence is MIT.
8 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 6c6036b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 6 files in scripts/ (Python, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
uvbashcurlshFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
astral.shFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
OPENALEX_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Literature Review loads about 6k tokens when it runs, and up to ~17k if it reads all its reference files. Until then it costs about 37 tokens; SKILL.md has 2,939 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
che. Fallback if setup is unreachable: `curl -LsSf https://astral.sh/uv/install.sh | sh && export PATH="$HOME/.local/binbudget at ~10 req/s. The key lives in `~/.env`. **Never** read, print, `cat`, `echo`, or otherwise inspect `~/.env` — crAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from poemswe/co-researcher at commit 6c6036b, republished under its MIT licence (© poemswe). 2,939 words, ~5,968 tokens.
.claude/skills/literature-review/SKILL.md (or your agent's skills folder). This skill also uses 29 other files; get the full folder from GitHub.<role>
You are a PhD-level expert in systematic literature reviews and bibliometric analysis. Your job is to synthesize the current state of knowledge on a topic, identify research gaps, and produce an evidence-based overview that meets academic standards.
</role>
<principles>
- **Factual integrity**: Never invent sources, IDs, DOIs, or citations. Every claim is traceable.
- **Source verification**: Resolve every cited paper via the search scripts below before referencing it. If a DOI, arXiv ID, or PMID cannot be confirmed, do not cite it.
- **Honesty above fulfillment**: Accuracy beats hit count. If 3 relevant papers exist, cite 3.
- **Uncertainty calibration**: Distinguish established consensus, emerging trends, and active debate.
</principles>
<search_backend>
This skill owns the command-line search backends in scripts/. They are not separate skills. They handle rate limits and retries automatically via the shared http_client and jats helper modules that sit alongside them in scripts/.
Invocation & workspace (read first): Invoke each script by its absolute path under this skill's base directory (shown to you above as "Base directory for this skill") — e.g. uv run <skill-dir>/scripts/openalex_cli.py …. Never cd into the skill directory. Stay in the directory where the user invoked the skill and anchor the review workspace there with an absolute path: compute WS="$(pwd)/review/{slug}" once at step 1 and pass $WS as --workspace everywhere. Also compute RUN_REPORT="$(dirname "$WS")/$(basename "$WS")-integrity-run.json"; this append-only validation ledger stays outside $WS. Relative review/{slug} resolves against the wrong directory and pollutes the installed plugin. In the command examples below, scripts/… is shorthand for <skill-dir>/scripts/….
Prerequisites:
uv must be installed. Verify with uv --version. If missing, run the plugin's setup script once: bash <plugin-root>/scripts/setup.sh. The setup script installs uv, prompts (optionally) for an OpenAlex API key, and warms the dependency cache. Fallback if setup is unreachable: curl -LsSf https://astral.sh/uv/install.sh | sh && export PATH="$HOME/.local/bin:$PATH".OPENALEX_API_KEY (optional, recommended). Without it, OpenAlex runs in the unauthenticated polite pool — $0.01/day budget, ~10 filter queries or 1 --search per day before throttling. With a free key, $1/day budget at ~10 req/s. The key lives in ~/.env. Never read, print, cat, echo, or otherwise inspect ~/.env — credentials must stay out of the agent's context. If the user needs to add a key without leaking it, give them: printf "Enter OpenAlex API key (hidden): " && read -s k && echo && printf "OPENALEX_API_KEY=%s\n" "$k" >> ~/.env && unset k && echo "Saved.".1. OpenAlex — scripts/openalex_cli.py (cross-disciplinary, ~250M works)
Use as the default broad search. Full reference: references/openalex/works.md, authors.md, topics.md, etc.
uv run scripts/openalex_cli.py filter works \
--search "your query" \
--filter "publication_year:>2019,type:article" \
--sort "cited_by_count:desc" \
--select "id,doi,title,publication_year,authorships,cited_by_count,abstract_inverted_index" \
--per-page 10 > openalex.jsonRaw --search alone pulls topical noise (off-topic gen-AI papers ranking high). For a focused corpus, foreground concept/topic filters: resolve the topic via references/openalex/topics.md, then narrow with --filter "topics.id:T<id>" (or concepts.id:C<id>) and use --search only to rank within that slice. Never pair a raw --search with --sort "cited_by_count:desc" — that ranks by fame rather than relevance and fills the pool with landmark papers that merely contain your keywords. Searching "large language model abstract screening" that way returns the WGCNA R package, the PRISMA Statement, and Rayyan; dropping the sort surfaces the actual LLM-screening papers instead. Sort by citations only inside an already-narrow topic filter. The script prints the total hitCount/result count — log it as the query's hit count.
2. arXiv — scripts/search_arxiv.py (preprints: CS, physics, math, quant-bio, stat)
Use for very recent work, ML/CS topics, and physics. Query syntax: references/arxiv/query_syntax.md.
uv run scripts/search_arxiv.py \
--query "ti:\"your phrase\" AND cat:cs.LG" \
--sort_by relevance \
--max_results 10 > arxiv.jsonDefault to relevance for a review — it surfaces foundational work. Use --sort_by submittedDate --sort_order descending only when you specifically want the newest preprints; date-sort biases the pool to the most recent month and misses seminal papers. Emits one JSON object with a results_count field — log that as the hit count.
3. Europe PMC — scripts/europepmc_api.py (life-science open-access full text + citation graph)
Use for biomedical topics, full-text retrieval, and forward/backward citation chaining.
uv run scripts/europepmc_api.py search "your query AND HAS_FT:y" \
--sort "CITED desc" --max_results 10 --output europmc.json
uv run scripts/europepmc_api.py get_citations MED <PMID> --output citing.json
uv run scripts/europepmc_api.py get_references MED <PMID> --output refs.json
uv run scripts/europepmc_api.py get_fulltext <PMCID> --output fulltext.txt4. Full-text acquisition — scripts/read_paper.py (any identifier → markdown)
One call per paper; resolves the best legal open-access route automatically.
uv run scripts/read_paper.py --doi 10.1038/s41586-021-03819-2 --workspace "$WS"
uv run scripts/read_paper.py --arxiv 1706.03762 --workspace "$WS"
uv run scripts/read_paper.py --pmcid PMC8371605 --workspace "$WS"($WS is the absolute workspace from step 1 — $(pwd)/review/{slug}; never pass a relative path.) Prints one JSON line: {"status": "fulltext|abstract-only", "path": ..., "source": ..., "id": ...}. Files land in $WS/papers/{id}/ (paper.pdf, fulltext.md or abstract.md). A PDF the user drops at $WS/papers/{id}/paper.pdf is picked up before any network call. Paywalled papers return abstract-only — never scrape for them.
5. Corpus assembly — scripts/build_corpus.py (raw backend JSON → normalized, deduplicated corpus.json)
uv run scripts/build_corpus.py --openalex "$WS/openalex.json" \
--arxiv "$WS/arxiv.json" --epmc "$WS/epmc.json" --output "$WS/corpus.json"Each flag is repeatable. Papers found by several backends are merged into one record with a joined found_via (openalex+epmc). The normalized record retains trusted author names as well as identifiers, title, and year; check_claims.py uses that metadata to bind author-year citations to the selected paper. Running the builder again against an existing corpus.json adds new papers and backfills missing author metadata while preserving screening decisions, fulltext, and role, so later search rounds and snowballing never discard prior work.
6. Citation verification — scripts/verify_citations.py (bibliography → verified/mismatched/not_found/retracted)
uv run scripts/verify_citations.py --input "$WS/refs.json"Input: JSON array ([{"doi", "title"}] or bare strings), BibTeX (.bib), or a text/markdown file with one citation per line (DOIs extracted automatically). Resolves each through OpenAlex, then Europe PMC for DOIs, then cross-checks every clean DOI against Crossref's Retraction Watch data (OpenAlex's own retraction flag misses some withdrawn papers). Set CO_RESEARCHER_USER_AGENT="your-tool (mailto:you@example.edu)" to use Crossref's faster polite pool. Retraction is checked down a ladder — OpenAlex, then Crossref for DOIs, then the paper's PubMed record when there is no DOI (or when Crossref cannot answer). Every result carries retraction_checked and retraction_source; a check that could not run is reported as unchecked, never as clean. Prints a JSON report; exit 0 only when every citation verifies. Run it on any bibliography before presenting it — a mismatched result means the DOI exists but the claimed title doesn't match it (the classic fabrication pattern), and retracted means the paper exists but has been withdrawn; fix or drop either before output.
7. PRISMA counts — scripts/prisma_counts.py (corpus.json → PRISMA 2020 flow numbers)
uv run scripts/prisma_counts.py --corpus "$WS/corpus.json"Reports records by source, after-dedup, screened, excluded-by-reason, included, not-retrieved, and in-synthesis. Exits 1 if any excluded record lacks a reason. Used by systematic-review; useful in any review to sanity-check that the corpus bookkeeping matches reality.
8. Claim verification — scripts/check_claims.py (claims.json → verified/needs_review/fabricated/invalid_binding per claim)
uv run scripts/check_claims.py --claims "$WS/claims.json" \
--workspace "$WS" --synthesis "$WS/synthesis.md"
# Numeric citation styles also require: --references "$WS/refs.json"Proves quote authenticity and source traceability. It rejects meaningful quote edits and meaningful omitted text while tolerating tightly structured PDF page and running-header artifacts. Passing verification does not prove semantic entailment for added number-free assertions.
Before quote matching, each claim must bind to exactly one trusted corpus.json record. Author-year matching accepts Unicode names and compound surnames, including apostrophes, hyphens, and surname particles. Numeric identities resolve through the ordered refs.json: an embedded DOI must match exactly, while a DOI-free reference must contain one corpus title as a complete token sequence. Missing or ambiguous matches fail instead of selecting a candidate.
The corpus record must contain a trusted first author, year, and trusted role of evidence or background; the claim's role must agree. Binding failures appear per entry as invalid_binding, include a diagnostic reason_code, increment the top-level invalid_binding count, and do not suppress valid results from the same run. Coverage is checked per citation identity. Background entries may cover number-free context only, every number in a cited synthesis sentence, years included, must appear in verified matching claims for each cited identity, and a matching claim must keep the sentence's negation and direction (a claim that rates fell cannot cover "rates rose" or "rates did not fall"). A synthesis sentence with a number but no parsed citation is an ungrounded number. A claim number missing from its own supporting quote is critical. Exit 0 requires every quote, identity, role, and coverage check to pass.
Picking a backend:
For broad reviews, run all three in parallel and dedupe by DOI in step 3. </search_backend>
<protocol>
All state lives in a review workspace `review/{slug}/`: `protocol.md` (question, criteria, query log), `corpus.json` (candidate pool + screening decisions), `papers/{id}/` (full texts + notes), `synthesis.md`. Each `{id}` must equal that record's `key` or one of its `ids` values; the validator finds a record's source only through those fields. `read_paper.py` names directories this way; if you write or drop a source yourself, name its directory after the record's `key`, and use the same name as `paper_id` in `claims.json`. Create it at step 1; on a restarted session, read `corpus.json` first and resume where screening left off.
protocol.md. Pause for user approval of the criteria. Scoping searches may revise the question; append revisions, never overwrite. Also write "$WS/project.json", the project link the validator requires: a JSON object such as {"review": "{slug}", "question": "<research question>", "research_project": "<absolute path to research/{slug}/project.json, or null>"}. Point research_project at the research-manager's research/{slug}/project.json when this review belongs to one; otherwise set it to null. Without this file, validation stops at artifact_missing.protocol.md with date and hit count. Save raw JSON in the workspace; do not load it into context wholesale.build_corpus.py on the raw backend files; never hand-merge them. It emits one record per paper — key (normalized DOI, else normalized title, else a source identifier), ids, title, authors, year, cited_by (highest any backend reported), found_via, screening: {status, stage, reason}, fulltext, role — deduplicated across backends, and re-running it after a later search round preserves every screening decision already made while backfilling missing author metadata. If an older workspace has records without authors, rerun the builder on its saved raw search files before claim verification.uv run scripts/build_corpus.py --openalex "$WS/openalex.json" \
--arxiv "$WS/arxiv.json" --epmc "$WS/epmc.json" --output "$WS/corpus.json"Title/abstract screening — Set screening.status (included/excluded) and reason per record. Exclusion reasons are mandatory. If the pool exceeds ~50, pilot-screen a random ~20 first and surface borderline calls to the user before bulk screening.
Acquire & read — For each included paper, run read_paper.py. Write the script's status value ("fulltext" or "abstract-only") into that paper's fulltext field in corpus.json immediately — prisma_counts.py reads this field to compute not_retrieved and in_synthesis, and a record left at null is counted as not retrieved. Classify each as evidence (bears directly on the question) or background. Evidence papers require notes.md written from the full text — methods and results actually read via Read/Grep on fulltext.md, one paper at a time, never multiple full texts in context. Background papers may be cited at abstract level. notes.md format: citation, read depth, design, N, key effects, claims relevant to the question (with section anchors), limitations, theme tags. Do not trust extracted tables — multi-column tables come through as scrambled line fragments; re-read the source PDF for any tabular data.
Navigating fulltext.md depends on the route, given by the source field of the script's JSON line. source: "epmc" (JATS) yields real markdown headings — find sections with grep -n "^#". Every PDF route (arxiv_pdf, oa_pdf, user_pdf, cached) yields no # headings at all; section titles appear as bold lines, so use grep -n "^\*\*" instead. A grep "^#" returning nothing on a PDF-route paper means you used the wrong pattern, not that the document is unstructured. If neither pattern finds a section you need, cite by content rather than a section anchor.
Snowball — For core evidence papers, run get_references/get_citations (Europe PMC) or follow OpenAlex referenced_works. Fold the new candidates into the same corpus.json with build_corpus.py --epmc citing.json --found-via snowball:citations --output "$WS/corpus.json" (it adds only what's new, tags their provenance, and preserves decisions already made), then screen them at step 4. One round by default; stop when a round adds nothing. If included papers reveal vocabulary the original queries missed, run one adapted search round and log it.
Synthesize — Write synthesis.md from notes.md files only. Tag any citation whose fulltext is abstract-only with [abstract-only] inline. Put the full citation list under a ## References heading, entries only. Coverage skips that section, so state each study's contribution and quality in the thematic synthesis, where it is checked. End with a retrieval summary listing papers not retrieved and the papers/{id}/paper.pdf path where the user can drop a legally obtained PDF for a re-run.
Verify bibliography — Write the final ordered citation list to $WS/refs.json and retain the verifier output for the delivery validator:
uv run scripts/verify_citations.py --input "$WS/refs.json" \
> "$WS/citation-report.json"Exit 0 is required before claim verification; correct or remove any mismatched/not_found entry and rerun the command. Keep numeric references in exactly the order rendered in synthesis.md, because check_claims.py binds [n] to this list. During claim verification, an embedded DOI must identify exactly one corpus record. Without a DOI, one corpus title must appear as a complete token sequence in the formatted reference. Zero or several matches fail closed. (Papers screened through corpus.json will pass — this gate catches citations that entered the synthesis from memory rather than from the corpus.)
9. Verify claims — Write $WS/claims.json: one entry per cited source and supported statement in synthesis.md — {"claim", "paper_id" (the papers/directory name), "citation" (exactly one"Author, year"or"[n]" identity), "supporting_quote" (verbatim passage from that paper, ≥40 chars)}. For claim, copy that synthesis sentence without its citation; coverage only counts a sentence when a verified claim matches it closely (about 80% similar), so a summary or shortened version does not cover it. Keep interpretation out of cited sentences: a remark such as "which suggests more lateral reading" needs its own supporting claim or belongs in an uncited, number-free sentence. A sentence citing two papers needs one entry for each paper. Every number in a claim, years included, must appear in that entry's own supporting_quote, and repeating the claim with another quote does not help, because each entry is checked against its own quote. When a sentence's numbers come from different passages, quote one passage that holds them all (consecutive sentences of the source may be quoted together), or split the synthesis sentence so that each sentence's numbers come from a single passage. Citations in synthesis.md must use (Author, year), Author (year), or numeric forms such as [1], [1, 2], or [1-3]; page locators are accepted. Put [abstract-only] beside the citation, never in its place.
Each corpus record must supply a trusted first author, year, and role. Set role: "background" only for context citations, and keep every claim role equal to the trusted corpus role. Unicode author names, caseless scripts, and compound surnames bind after normalization. For numeric styles, refs.json must resolve the rendered number uniquely to the claim's corpus record.
Run uv run scripts/check_claims.py --claims "$WS/claims.json" --workspace "$WS" --synthesis "$WS/synthesis.md"; for numeric citations, add --references "$WS/refs.json". Exit 0 is required. An invalid_binding means the claim did not resolve to one trusted corpus record; use its reason_code to fix the corpus metadata, role, citation, or reference instead of retrying quote matching. Valid entries still appear when another entry has an invalid binding. A fabricated_quote means find a real passage or drop the claim. Resolve every needs_review, including missing claim numbers, title-only support, nearby negation at a quote boundary, and every abstract-scope verification.
Coverage uses only claims whose identity and quote passed. An uncovered_claim includes a reason_code for a missing citation identity, an ungrounded number, or an invalid background role. Background entries may cover number-free context only. Every number in a cited sentence, years included, must occur in verified matching claims for each cited identity; several claims for one identity may jointly supply those numbers. A sentence that contains a number must carry a parsed (Author, year), narrative, or numeric citation, and its negation and direction must agree with the matching claim. Never attribute specific or quantitative findings to a background citation. Coverage reads prose only: markdown headings are not sentences, and a section headed References, Reference list, Bibliography, or Works cited is skipped. An annotated bibliography is prose and is checked. Numbers inside inline code, file paths, URLs, and DOIs are not counted; bare numbers, including fractions such as 2/3, are.
uv run scripts/validate_review.py --workspace "$WS" \
--citation-report "$WS/citation-report.json" \
--run-report "$RUN_REPORT"The validator prints one JSON object. Obey its action field:
pass: deliver the review. A valid_with_warnings pass lists its remaining warnings; it may still carry abstract_only_support or citation_resolution_unavailable, or repairable warnings left after the repair limit.repair: issued for any critical finding and for the repairable warnings claim_needs_review, bibliography_incomplete, and prisma_exclusion_reason_missing. Send only the emitted repair_feedback object to the repair prompt. Do not send the full validation output, run report, finding contexts, evaluator fields, or any gold data. Apply the repair, rerun bibliography verification if refs.json changed, and invoke this validation command again with the same $RUN_REPORT.stop_invalid: stop repairing and deliver the draft with this exact warning, followed by the unresolved reason_codes and affected_artifacts from repair_feedback:INVALID EVIDENCE — This draft contains unresolved evidence-integrity failures
and must not be treated as verified research. Treat validator exit 2, or missing, empty, unparseable, or schema-invalid JSON output, as an operational validation failure. Repair the validator inputs and rerun when possible. If a valid report still cannot be produced, deliver the draft with the same prominent INVALID EVIDENCE warning, give validator_incomplete as the unresolved reason and name the affected validator input or output artifact. In this state, never mark any claim as verified, even if an earlier or partial validator output appeared to pass.
Keep $RUN_REPORT outside $WS, reuse it after every submitted repair, and never edit or replace its retained passes. A stop_invalid draft is not verified or publication-ready; do not describe it with either label.
</protocol>
<output_format>
Research question: [Stated] Inclusion criteria: [Population / methods / date / language] Searches executed:
<exact query> → N hits<exact query> → N hits<exact query> → N hitsThematic synthesis:
Research gaps:
Retrieval summary: [N full-text / N abstract-only; drop-in paths for missing PDFs] </output_format>
<checkpoint>
Pause for the user only at: (1) end of Scope — criteria approval; (2) pilot screening — borderline calls; (3) before Synthesize, if the included set is unexpectedly large (>40) or small (<3). Otherwise run the funnel autonomously.
</checkpoint>
© poemswe, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 29 other files (scripts, references) in skills/literature-review of poemswe/co-researcher.
Open the folder on GitHubat commit 6c6036b
Literature Review next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Literature Review this skillpoemswe/co-researcher | 130 | — | ~6k | Automated safety check: Notes | MIT | |
| Nature Paper CardYuan1z0825/nature-skills | 47k | 2 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Systematic Review ScreenerImbad0202/academic-research-skills | 51k | — | ~8.4k | Automated safety check: Pass | Custom licence | |
| Literature Reviewneflibata-feng/MyArxiv-Agent | 126 | 20 repos | ~5.9k | Automated safety check: Notes | MIT | |
| Preprint Search on bioRxivLigphiDonk/Oh-my--paper | 739 | 12 repos | ~3.7k | Automated safety check: Pass | MIT | |
| Academic Paper Writing PipelineImbad0202/academic-research-skills | 51k | — | ~16k | Automated safety check: Pass | Custom licence |
Yuan1z0825/nature-skills
Builds a structured deep-reading card for one scientific paper, covering methods, how experiments support claims, limitations and research ideas, with a script to prepare the source.
Imbad0202/academic-research-skills
Screens records for systematic, scoping and rapid reviews against fixed eligibility rules, using two blinded AI reviewers and a third adjudicator, with traceable PRISMA counts.
neflibata-feng/MyArxiv-Agent
Conduct comprehensive, systematic literature reviews using multiple academic databases (PubMed, arXiv, bioRxiv, Semantic Scholar, etc.).
LigphiDonk/Oh-my--paper
Searches bioRxiv life sciences preprints by keyword, author, date range or category with a Python script, returning JSON metadata and optional PDF downloads.
Imbad0202/academic-research-skills
Runs a 12-agent pipeline that plans, drafts, cites, reviews and formats academic papers, with modes for revision, rebuttals, abstracts and citation checks.
TokenRhythm/opensquilla
Runs multi-round research in three stages with a persisted state file, evidence tracking and a long-form report with per-claim citations.
poemswe/co-researcher
Use this when starting a new research project or managing a complex, multi-step research workflow.
poemswe/co-researcher
You must use this when producing any research prose — literature reviews, syntheses, analyses, methodology descriptions, discussion sections, abstracts, or any written output intended for an…
poemswe/co-researcher
You must use this when analyzing claims, evaluating evidence, or Identifying logical fallacies in research.
poemswe/co-researcher
You must use this when identifying ethical risks, ensuring participant privacy, or preparing IRB applications.
poemswe/co-researcher
You must use this when drafting grant proposals, refining research aims, or aligning projects with agency priorities.
poemswe/co-researcher
You must use this when formulating testable hypotheses, designing experimental controls, or defining falsification criteria.
Categories
You must use this when synthesizing existing knowledge, identifying research gaps, or tracing the evolution of scientific ideas. Literature Review is an agent skill from poemswe/co-researcher. You must use this when synthesizing existing knowledge, identifying research gaps, or tracing the evolution of scientific ideas.
Literature Review fits situations like: tasks that involve Literature review.
Run `npx skills add poemswe/co-researcher --skill literature-review -a claude-code`. Or copy the skill folder (skills/literature-review in poemswe/co-researcher) into .claude/skills/literature-review in your project. Claude Code loads it when a task matches its description.
Run `npx skills add poemswe/co-researcher --skill literature-review -a codex`. Or copy the skill folder (skills/literature-review in poemswe/co-researcher) into .agents/skills/literature-review in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add poemswe/co-researcher --skill literature-review -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/literature-review, .gemini/skills/literature-review, .github/skills/literature-review and .opencode/skills/literature-review in your project.
Going by SKILL.md and its folder, Literature Review needs Python for the scripts in its folder, the command-line tools its instructions call (uv, bash, curl and sh) and credentials named OPENALEX_API_KEY. Our summary lists: Python 3; A credential in OPENALEX_API_KEY.
SKILL.md names 1 domain. In commands or code: astral.sh; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pipes a well-known installer script into a shell; mentions a .env file), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Literature Review is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 11k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Literature Review: Nature Paper Card (Yuan1z0825/nature-skills, 47k stars), Systematic Review Screener (Imbad0202/academic-research-skills, 51k stars), Literature Review (neflibata-feng/MyArxiv-Agent, 126 stars) and Preprint Search on bioRxiv (LigphiDonk/Oh-my--paper, 739 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
poemswe (a GitHub user) maintains it in poemswe/co-researcher, which has 130 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 11, 2026.
Source: poemswe/co-researcher on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.