Skip to content
Back to skills

Paper Card

ASecurity

Import a paper into the vault as a markdown card, or export cards out to BibTeX/CSV/a comparison table. Handles messy input — a pasted APA/BibTeX reference, a DOI, a bare title, a Gemini/ChatGPT deep-research bibliography, or a whole list of them — and writes one card per paper with clean frontmatter (citekey, authors, year, journal, topic, doi) that `maw citation index` can pick up. Use this whenever someone says "add this paper", "import these references", "เพิ่ม paper", "ใส่ paper เข้า cor...

  • 7 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 5, 2026
researchrustgobashapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 5, 2026

npx -y skills add Soul-Brews-Studio/phd-citation-oracle --skill paper-card --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Paper Card?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Paper Card
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/soul-brews-studio-paper-card/badge)](https://www.skillsdirectory.com/skills/soul-brews-studio-paper-card)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: paper-card
description: Import a paper into the vault as a markdown card, or export cards out to BibTeX/CSV/a comparison table. Handles messy input — a pasted APA/BibTeX reference, a DOI, a bare title, a Gemini/ChatGPT deep-research bibliography, or a whole list of them — and writes one card per paper with clean frontmatter (citekey, authors, year, journal, topic, doi) that `maw citation index` can pick up. Use this whenever someone says "add this paper", "import these references", "เพิ่ม paper", "ใส่ paper เข้า corpus", "make a .bib", "export the bibliography", "turn this bibliography into cards", pastes a citation or a DOI, or hands over research output containing a reference list. Do NOT use it to search or visualise the corpus (that's `maw citation search` / `graph`), and not for writing prose about the literature.
argument-hint: "import <input> | export --bib [path] | export --csv | dedupe | fix-authors"
---

# paper-card — get papers in, get bibliographies out

The corpus lives as one markdown card per paper (see `ψ/papers/README.md`). Cards are the
canonical store; the LanceDB index and any `.bib` are **derived**. So every import ends by
writing cards, and every export reads them — never the reverse.

## Before anything: read the format

Read `ψ/papers/README.md` (the field reference and the body-block shapes) and open one existing
card. Matching the existing shape exactly matters more than being clever, because
`readPaperCards()` in `ψ/lab/citation/src/index.ts` parses `**Key findings** —` /
`**Thesis relevance** —` and the `kind: paper` frontmatter key. A card that deviates silently
drops out of the index.

## Import

### Step 1 — figure out what you were handed

| Input | What to do |
|---|---|
| A full reference (APA/Vancouver/whatever) | Parse it directly — authors, year, title, journal, volume, pages |
| A BibTeX entry or `.bib` file | Parse the fields; keep the original key as `citekey` if it's sane, else regenerate |
| A DOI | Resolve it via `https://api.crossref.org/works/<doi>` and fill fields from the JSON |
| A bare title | Search Crossref by title (`https://api.crossref.org/works?query.bibliographic=<title>&rows=3`), show the top matches, confirm before writing |
| A deep-research report / bibliography | Extract every reference, then dedupe against the corpus **before** writing anything |
| A PDF | Read the first page for title/authors/DOI; if there's a DOI, prefer Crossref over your reading of the page |

Crossref is unauthenticated and returns clean structured metadata — prefer it over guessing.
When it disagrees with a pasted citation, trust Crossref and say you did.

### Step 2 — dedupe against what's already there

Never write a card without checking. The corpus already holds 56 papers, and a
deep-research bibliography will overlap heavily.

```bash
maw citation search "<paper title>" -k 5 --json     # semantic — catches near-duplicates
rg -l -i "<distinctive title words>" ψ/papers/       # lexical — catches exact ones
rg -i "<first author surname>" ψ/papers/*.md | head
```

Report overlaps as a table (new / already-have / uncertain) and let the human resolve the
uncertain ones. Silently adding a second card for a paper that's already in is worse than
asking, because the duplicate then shows up twice in the constellation and twice in the `.bib`.

### Step 3 — assign a citekey

`<first-author-surname-lowercase><year>`, plus `b`, `c`… on collision — e.g. `barkjohn2021`,
`amnuaylojaroen2023b`. The filename **is** the citekey **is** the `\cite{}` key; keep those three
identical or the bibliography breaks.

No authors available? Use `<journal-word><year>` and set `status: needs-authors` rather than
inventing names. Nine cards already sit in that state — they're honest placeholders, not bugs.

### Step 4 — pick a topic

One of the six in use: `low-cost-sensor-calibration` · `satellite-pm25-products` ·
`thailand-burning-season` · `health-policy` · `reference-monitoring-bam` ·
`multi-source-fusion-qa`. These colour the constellation, so a new topic value fragments the
palette — propose one explicitly instead of quietly introducing it.

### Step 5 — write the card, then index

Write `ψ/papers/<citekey>.md` in the existing shape. `**Key findings**` should carry real
numbers (R², RMSE, %) because that text is what gets embedded — a vague summary makes the paper
unfindable. `**Thesis relevance**` is what makes search useful; write it from the corpus's point
of view, and if you genuinely don't know, say `_not yet assessed_` rather than padding.

```bash
maw citation index          # or --vault to refresh notes too
maw citation search "<something distinctive from the new paper>" -k 3
```

Confirm the paper comes back before declaring success. Then report: cards written, duplicates
skipped, anything left at `needs-authors` or `doi: ""`.

## Export

### BibTeX

Read every card, emit `@article{...}` (or the right type) using `citekey` as the key. Skip
nothing silently — if a card lacks authors or a DOI, still emit the entry and list it in a
"needs attention" summary afterwards, because a bibliography with a hole you know about beats
one with a hole you don't.

```
@article{mahajan2025,
  author  = {Mahajan, S. and Helbing, D.},
  title   = {Dynamic calibration of low-cost PM2.5 sensors using trust-based consensus mechanisms},
  journal = {npj Climate and Atmospheric Science},
  year    = {2025},
  volume  = {8},
  pages   = {257},
  doi     = {10.1038/s41612-025-01145-2},
}
```

Details worth getting right: `{}` around anything with capitals you want preserved (`{PM2.5}`,
`{GEMS}`) since BibTeX lowercases titles in many styles; `and` between authors, never `&`; omit
empty fields rather than emitting `doi = {}`. Write to `artifacts/references.bib` by default and
say how many entries and how many are incomplete.

### Other shapes

- **CSV / comparison table** — citekey, authors, year, journal, quartile, topic, and whichever
  numbers the human asked about. Good for a thesis appendix.
- **Markdown table** — same, inline in a chat or a chapter draft.
- **Filtered subsets** — "just the satellite ones", "only Q1", "only papers I've annotated"
  (`rg -l '## Notes' -A2 ψ/papers/ | ...`). Filter on frontmatter, not on guesswork.

## Maintenance verbs

- **`dedupe`** — cross-check every card against every other by title similarity, report suspected
  duplicates, never delete without confirmation (Nothing is Deleted).
- **`fix-authors`** — take the `needs-authors` cards, resolve each via Crossref by title, show
  the proposed authors side by side with the paper title, and apply only what's confirmed.

## Honesty rules

These matter more here than anywhere, because a bibliography is a set of claims about what
exists:

- **Never invent a DOI, an author list, a volume or a page range.** Leave the field empty and set
  `status:` accordingly. A missing field is a task; a fabricated one is a defect that propagates
  into a thesis.
- **Say where each field came from** when you resolved it — Crossref, the pasted citation, or
  the PDF. If two sources disagree, show both.
- **Don't upgrade a guess into a fact** by writing it into frontmatter. Notes are where
  uncertainty lives: `## Notes` survives regeneration, frontmatter is machine-read.
- **Preserve `## Notes` and `doi:`** on any card you rewrite — the CLI's `cards` verb does this,
  and hand edits must too.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.