Skip to content
Research
Skill

/lit-review

Retrieves papers from local folder or ArXiv and Semantic Scholar using domain-aware keyword expansion, builds synthesis matrix, identifies gaps. Calls tools/arxiv_fetch.py and tools/semantic_scholar_fetch.py. Writes to output/paper-cache/ and output/LIT_REVIEW_REPORT.md.

BOOST
From plugin
night-owl-research-agent
10722 skills9 agents1 command6 MCP
Install
$ npx -y skills add grind-lab-core/night_owl_research_agent --skill lit-review --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/lit-review

Context preview

The summary Claude sees to decide when to auto-load this skill.

Retrieves papers from local folder or ArXiv and Semantic Scholar using domain-aware keyword expansion, builds synthesis matrix, identifies gaps. Calls tools/arxiv_fetch.py and tools/semantic_scholar_fetch.py. Writes to output/paper-cache/ and output/LIT_REVIEW_REPORT.md.

SKILL.md

lit-review.SKILL.md
name: lit-review
description: Retrieves papers from local folder or ArXiv and Semantic Scholar using domain-aware keyword expansion, builds synthesis matrix, identifies gaps. Calls tools/arxiv_fetch.py and tools/semantic_scholar_fetch.py. Writes to output/paper-cache/ and output/LIT_REVIEW_REPORT.md.
argument-hint: [paper-topic-or-url]
tools: Bash, Read, Write, WebFetch, WebSearch, Agent, Glob, Grep,

Skill: lit-review

You perform a targeted literature review for $ARGUMENTS. Your outputs feed idea discovery and paper writing. This skill checks multiple sources **in priority order**. All are optional — if a source is not configured or not requested, skip it silently.

Research topic: $ARGUMENTS

---

Constants

  • **PAPER_LIBRARY** — Local directory containing user's paper collection (PDFs). Check these paths in order:

1. `papers/` in the current project directory 2. Custom path specified by user in `CLAUDE.md` under `## Constants`

  • **MAX_LOCAL_PAPERS = 30** — Maximum number of local PDFs to scan (read first 3 pages each). If more are found, prioritize by filename relevance to the topic.
  • **ARXIV_DOWNLOAD = false** — When `true`, download top 3-5 most relevant arXiv PDFs to PAPER_LIBRARY after search. When `false` (default), only fetch metadata (title, abstract, authors) via arXiv API — no files are downloaded.
  • **ARXIV_MAX_DOWNLOAD = 5** — Maximum number of PDFs to download when `ARXIV_DOWNLOAD = true`.

> 💡 Overrides: > - `/lit-review "topic" — paper library: ~/my_papers/` — custom local PDF path

Source Selection

Parse `$ARGUMENTS` for a `— sources:` directive:

  • **If `— sources:` is specified**: Only search the listed sources (comma-separated). Valid values: `zotero`, `obsidian`, `local`, `web`, `semantic-scholar`, `all`.
  • **If not specified**: Default to `all` — search every available source in priority order (`semantic-scholar` is **excluded** from `all`; it must be explicitly listed).

Examples:

/lit-review "diffusion models"                                    → all (default, no S2)
/lit-review "diffusion models" — sources: all                     → all (default, no S2)
/lit-review "diffusion models" — sources: zotero                  → Zotero only
/lit-review "diffusion models" — sources: zotero, web             → Zotero + web
/lit-review "diffusion models" — sources: local                   → local PDFs only
/lit-review "topic" — sources: obsidian, local, web               → skip Zotero
/lit-review "topic" — sources: web, semantic-scholar              → web + S2 API (IEEE/ACM venue papers)
/lit-review "topic" — sources: all, semantic-scholar              → all + S2 API

Source Table

| Priority | Source | ID | How to detect | What it provides | |----------|--------|----|---------------|-----------------| | 1 | **Zotero** (via MCP) | `zotero` | Try calling any `mcp__zotero__*` tool — if unavailable, skip | Collections, tags, annotations, PDF highlights, BibTeX, semantic search | | 2 | **Obsidian** (via MCP) | `obsidian` | Try calling any `mcp__obsidian-vault__*` tool — if unavailable, skip | Research notes, paper summaries, tagged references, wikilinks | | 3 | **Local PDFs** | `local` | `Glob: papers/**/*.pdf` | Raw PDF content (first 3 pages) | | 4 | **Web search** | `web` | Always available (WebSearch) | arXiv, Semantic Scholar, Google Scholar | | 5 | **Semantic Scholar API** | `semantic-scholar` | `tools/semantic_scholar_fetch.py` exists | Published venue papers (IEEE, ACM, Springer) with structured metadata: citation counts, venue info, TLDR. **Only runs when explicitly requested** via `— sources: semantic-scholar` or `— sources: web, semantic-scholar` |

> **Graceful degradation**: If no MCP servers are configured, the skill works exactly as before (local PDFs + web search). Zotero and Obsidian are pure additions.

Workflow

Step 0a: Search Zotero Library (if available)

**Skip this step entirely if Zotero MCP is not configured.**

Try calling a Zotero MCP tool (e.g., search). If it succeeds:

1. **Search by topic**: Use the Zotero search tool to find papers matching the research topic 2. **Read collections**: Check if the user has a relevant collection/folder for this topic 3. **Extract annotations**: For highly relevant papers, pull PDF highlights and notes — these represent what the user found important 4. **Export BibTeX**: Get citation data for relevant papers (useful for `/paper-draft` later) 5. **Compile results**: For each relevant Zotero entry, extract:

  • Title, authors, year, venue
  • User's annotations/highlights (if any)
  • Tags the user assigned
  • Which collection it belongs to

> 📚 Zotero annotations are gold — they show what the user personally highlighted as important, which is far more valuable than generic summaries.

Step 0b: Search Obsidian Vault (if available)

**Skip this step entirely if Obsidian MCP is not configured.**

Try calling an Obsidian MCP tool (e.g., search). If it succeeds:

1. **Search vault**: Search for notes related to the research topic 2. **Check tags**: Look for notes tagged with relevant topics (e.g., `#diffusion-models`, `#paper-review`) 3. **Read research notes**: For relevant notes, extract the user's own summaries and insights 4. **Follow links**: If notes link to other relevant notes (wikilinks), follow them for additional context 5. **Compile results**: For each relevant note:

  • Note title and path
  • User's summary/insights
  • Links to other notes (research graph)
  • Any frontmatter metadata (paper URL, status, rating)

> 📝 Obsidian notes represent the user's **processed understanding** — more valuable than raw paper content for understanding their perspective.

Step 0c: Scan Local Paper Library

Before searching online, check if the user already has relevant papers locally:

1. **Locate library**: Check **PAPER_LIBRARY** paths for PDF files

   Glob: papers/**/*.pdf

2. **De-duplicate against Zotero**: If Step 0a found papers, skip any l

Read more
Ships withnight-owl-research-agent

A fully automatic, domain-aware AI research agent for Geoscientists, Remote Sensing researchers, and GIScientists — powered entirely by Claude Code skills.

Get the whole plugin

Other skills on night-owl-research-agent.