Paper Capture
Turn a reference into a vault entry: metadata, PDF, structured note. Idempotent -- captures the same paper twice will update the existing note, not duplicate it.
Inputs accepted
- DOI:
10.1038/s41586-021-03819-2 or https://doi.org/10.1038/...
- arXiv id:
2103.04822 or arXiv:2103.04822 or https://arxiv.org/abs/2103.04822
- URL: any publisher URL -- extract DOI from the page if needed
- Title-author-year:
"Kim 2023 ionic transistor" -- looser, requires Semantic Scholar resolution
Workflow
- Resolve to a paper id. Prefer DOI > arXiv id > Semantic Scholar paperId. If only a title is given, search Semantic Scholar; if 0 or >1 high-confidence hits, escalate to user.
- Fetch metadata (Semantic Scholar first, then
paper-mcp fallback). Required fields: title, authors (full), year, venue, DOI, abstract.
- Generate citekey per references/citekey_rules.md. De-dupe against existing
30_Literature/*.md (use obsidian MCP search by frontmatter citekey:).
- Download the PDF per references/source_priority.md: university-paper-access -> arxiv -> scihub. PDF lands at
{vault}/80_Attachments/papers/{citekey}.pdf. If all paths fail, write the note anyway with pdf: null in frontmatter and report the failure.
- Write the vault note at
{vault}/30_Literature/{citekey}.md from 70_Templates/literature.md. Populate frontmatter:
citekey, authors (list), year, venue, doi, arxiv, s2_id
status: unread
tags: [] (user adds)
projects: [] (user adds, or auto-tag if invoked from a known project)
added: {today}
pdf: 80_Attachments/papers/{citekey}.pdf (or null)
- Confirm to user: one line --
Captured: {citekey} ({title trunc 60}) -> 30_Literature/{citekey}.md.
Re-capture / update behavior
If 30_Literature/{citekey}.md already exists:
- Re-fetch metadata; update frontmatter fields except
status, tags, projects, body sections (those are user-edited).
- Don't re-download PDF if file already exists at the expected path.
- Report:
Updated: {citekey} (metadata refreshed; status/tags preserved).
When invoked from deep-research
The deep-research investigator agent calls this skill automatically for every paper it reads at the full level. The projects field is auto-tagged with the active project slug if one is detectable from ~/.claude/projects/.../memory/ or the working directory.
Errors
- Metadata not found -> don't write a note; report and stop.
- PDF download failed across all sources -> write note with
pdf: null, status unread (no pdf). User can manually drop a PDF later.
- Citekey collision with a different paper (same firstauthor/year/keyword for two real papers) -> suffix with
-b, -c, etc., and note the collision in the body.
What this skill does NOT do
- Annotate the paper. The user reads and writes their own takeaways.
- Auto-add to the active project's MOC. The hook can suggest, but the user promotes.
- Write to the bibtex file. (Possible future hook; out of scope here.)
1---2name: paper-capture3description: Resolve a paper from a DOI, arXiv id, URL, or Author-Year-keyword into the Obsidian vault. Fetches metadata, downloads PDF, writes 30_Literature/CITEKEY.md. Use /capture-paper.4---56# Paper Capture78Turn a reference into a vault entry: metadata, PDF, structured note. Idempotent -- captures the same paper twice will update the existing note, not duplicate it.910## Inputs accepted1112- **DOI**: `10.1038/s41586-021-03819-2` or `https://doi.org/10.1038/...`13- **arXiv id**: `2103.04822` or `arXiv:2103.04822` or `https://arxiv.org/abs/2103.04822`14- **URL**: any publisher URL -- extract DOI from the page if needed15- **Title-author-year**: `"Kim 2023 ionic transistor"` -- looser, requires Semantic Scholar resolution1617## Workflow18191. **Resolve to a paper id**. Prefer DOI > arXiv id > Semantic Scholar paperId. If only a title is given, search Semantic Scholar; if 0 or >1 high-confidence hits, escalate to user.202. **Fetch metadata** (Semantic Scholar first, then `paper-mcp` fallback). Required fields: title, authors (full), year, venue, DOI, abstract.213. **Generate citekey** per [references/citekey_rules.md](references/citekey_rules.md). De-dupe against existing `30_Literature/*.md` (use `obsidian` MCP search by frontmatter `citekey:`).224. **Download the PDF** per [references/source_priority.md](references/source_priority.md): university-paper-access -> arxiv -> scihub. PDF lands at `{vault}/80_Attachments/papers/{citekey}.pdf`. If all paths fail, write the note anyway with `pdf: null` in frontmatter and report the failure.235. **Write the vault note** at `{vault}/30_Literature/{citekey}.md` from `70_Templates/literature.md`. Populate frontmatter:24 - `citekey`, `authors` (list), `year`, `venue`, `doi`, `arxiv`, `s2_id`25 - `status: unread`26 - `tags: []` (user adds)27 - `projects: []` (user adds, or auto-tag if invoked from a known project)28 - `added: {today}`29 - `pdf: 80_Attachments/papers/{citekey}.pdf` (or `null`)306. **Confirm to user**: one line -- `Captured: {citekey} ({title trunc 60}) -> 30_Literature/{citekey}.md`.3132## Re-capture / update behavior3334If `30_Literature/{citekey}.md` already exists:3536- Re-fetch metadata; update frontmatter fields **except** `status`, `tags`, `projects`, body sections (those are user-edited).37- Don't re-download PDF if file already exists at the expected path.38- Report: `Updated: {citekey} (metadata refreshed; status/tags preserved)`.3940## When invoked from deep-research4142The deep-research investigator agent calls this skill automatically for every paper it reads at the `full` level. The `projects` field is auto-tagged with the active project slug if one is detectable from `~/.claude/projects/.../memory/` or the working directory.4344## Errors4546- **Metadata not found** -> don't write a note; report and stop.47- **PDF download failed across all sources** -> write note with `pdf: null`, status `unread (no pdf)`. User can manually drop a PDF later.48- **Citekey collision with a different paper** (same firstauthor/year/keyword for two real papers) -> suffix with `-b`, `-c`, etc., and note the collision in the body.4950## What this skill does NOT do5152- Annotate the paper. The user reads and writes their own takeaways.53- Auto-add to the active project's MOC. The hook can suggest, but the user promotes.54- Write to the bibtex file. (Possible future hook; out of scope here.)