npx skills add ...
npx skills add aniketkrs/research-paper --skill read-research-paper
Renders ANY research paper (URL / arXiv ID / DOI / PDF / pasted text) into a visually engaging multi-format reading experience — with mind maps, method flowcharts, key-finding infographics, comparison tables, related-work timelines, and a plain-English layer alongside the technical content. Activates on slash commands (`/read-research-paper`, `/read-paper`, `/explain-paper`, `/visualize-paper`) and natural-language requests like "read this research paper [URL]", "explain this paper [URL]", "make this paper visual [URL]". Caches every fetched paper locally so re-asks are instant. Ships with a bundled corpus of canonical papers for offline fallback. Hands off to `research-paper` for citation reuse and to `get-research-paper` for related-work expansion. Runtime-neutral.
npx skills add aniketkrs/research-paper --skill read-research-paper
Where the other two skills do this:
| Skill | What it does |
|---|---|
get-research-paper | FINDS real papers on a topic |
research-paper | WRITES new papers |
read-research-paper (this) | READS ONE paper and makes it engaging |
Give it a URL, arXiv ID, DOI, or pasted text. It produces a visual, multi-layer rendering: technical depth + plain English + mind maps + method flowcharts + key-finding infographics + comparison tables + related-work timelines.
This file is the entry point. Heavier guidance lives in topic folders and is loaded on demand.
| Command | What it does |
|---|---|
/read-research-paper <input> | Full visual rendering (default) |
/read-paper <input> | Alias |
/explain-paper <input> | Same, with extra plain-English layer |
/visualize-paper <input> | Same, emphasizing visuals over prose |
/tldr-paper <input> | One-page infographic summary only |
<input> can be:
https://arxiv.org/abs/2403.01234, https://doi.org/...,
https://example.com/paper.pdf, journal landing page, etc.2403.01234 or cs.LG/070100210.1145/3589334The skill reads any of these as input:
| Format | Extensions | Library used | Always available? |
|---|---|---|---|
| Markdown | .md, .markdown | stdlib | yes |
| Plain text | .txt | stdlib | yes |
| LaTeX | .tex, .latex | stdlib + regex de-LaTeX | yes |
| JSON | .json | stdlib | yes |
| HTML | .html, .htm | beautifulsoup4 (or regex) | yes (regex fallback) |
| CSV / TSV | .csv, .tsv | pandas (or stdlib) | yes (basic via stdlib) |
| RTF | .rtf | striprtf (or regex) | yes (regex fallback) |
.pdf | pdfplumber / pypdf | install one | |
| DOCX | .docx | python-docx | install |
| PPTX | .pptx | python-pptx | install |
| XLSX | .xlsx, .xls | pandas + openpyxl | install |
| EPUB | .epub | ebooklib | install |
| Images | .png, .jpg, .tiff, .bmp | pytesseract + PIL | install (OCR) |
One-line install for everything:
(Plus install Tesseract OCR system-wide for images.)
The reader is toolchains/read_any_file.py. Self-test:
Full reference: sources/file-formats.md.
| Option | Default | Effect |
|---|---|---|
--depth | standard | quick / standard / deep |
--audience | mixed | academic / technical / general / mixed |
--visuals | auto | auto / max / minimal / none |
--include-figures | true | Try to extract / re-create paper's own figures |
--cache | true | Use local cache (auto-fill on re-asks) |
--language | en | Plain-English language |
--out | ./<paper-slug>/ | Working directory |
--with-related | false | Trigger get-research-paper for related work |
--with-handoff | false | Emit bibliography.yaml for research-paper |
Do NOT activate for:
get-research-paper).research-paper).Every run produces:
paper-visual.md — the headline deliverable. Multi-layer:
paper-data.json — structured extracted metadata: title,
authors, year, abstract, sections, figures, tables, key numbers,
references. Schema in schemas/visual-paper.json.figures/ — generated charts / diagrams / mind maps as
PNG + SVG + Mermaid sources.cache/<paper-id>.json — cached for re-use.Known-gaps.md — anything that couldn't be fetched / parsed.If --with-handoff is set, also produces bibliography.yaml
ready for the research-paper skill.
If --with-related is set, the orchestrator dispatches
get-research-paper on the paper's key topics to seed a related-work
section.
date -u +%Y-%m-%d, runtime context, or asking
the user). For a specific paper input, the freshness check
compares the paper's publication date to today and flags
stale findings. Full protocol: instructions/freshness.md.[FETCH FAILED — fallback to cache | model knowledge | corpus] and surface in Known-gaps.md.~/.agents/skills/read-research-paper/cache/. Re-asks are
instant.corpus/anchor-papers.yaml) is searched first when the input is
a topic-style query rather than a specific paper.Each phase has a dedicated playbook. Master pipeline:
workflows/ingestion.md.
The skill auto-detects input type:
| Input pattern | Path |
|---|---|
arxiv.org/abs/... | arXiv API |
\d{4}\.\d{4,5} (bare arXiv ID) | arXiv API |
doi.org/... or 10\..../... | Crossref → URL → fetch |
*.pdf (URL or local path) | PDF extraction |
| Journal landing page URL | URL scrape + Crossref enrichment |
| Pasted text (no URL) | Treat as paper body; build structure heuristically |
See workflows/ingestion.md §1.
Every tier transition is logged in Known-gaps.md so the user knows
where the rendered paper came from.
For every paper, the skill produces:
| Visual | Source | Renderer |
|---|---|---|
| Mind map | Paper structure (sections + key ideas) | Mermaid mindmap |
| Method flowchart | Method section | Mermaid flowchart |
| Key-findings infographic | Headline numbers from results | matplotlib if available, else Markdown table |
| Comparison table | Paper's own benchmark table | Markdown table |
| Related-work timeline | References + their years | Mermaid gantt-style timeline |
| Author network | Authors + affiliations | Mermaid flowchart (small) |
| Concept map | Paper's terminology | Mermaid mindmap |
| Figure re-captions | Original figures (when extractable) | Pass-through with new captions |
Decision logic: workflows/visualization.md.
The cache lives at:
When the user asks about a topic (not a specific paper), the cache's
topics/ index is searched first, before any live fetch.
Cache schema: workflows/caching.md.
Ships in corpus/:
anchor-papers.yaml — ~30 canonical, high-impact papers across
major topics (transformers, RAG, RLHF, contrastive learning, RCT
methodology, PRISMA, etc.).topics-index.yaml — maps topic keywords to the anchor papers.When the user asks for a paper that's in the corpus, the skill uses
the corpus version (always available, even offline). Users can extend
the corpus by adding files to corpus/user/.
Known-gaps.md.Full matrix: workflows/ingestion.md §10.
workflows/ingestion.mdworkflows/visualization.mdworkflows/caching.mdprompts/plain-english.mdprompts/generate-mindmap.mdtemplates/visual-paper.mdcorpus/toolchains/fetch_paper.py,
toolchains/extract_pdf.pyThis skill complements but does not require the other two:
get-research-paper → find papersresearch-paper → write papersread-research-paper → read papers (this one)intake → fetch → parse → extract-figures-and-data →
plan-visuals → render → assemble → cache → output1. Local cache (~/.agents/skills/read-research-paper/cache/)
├── Hit → return immediately (instant)
└── Miss → next tier
2. Live fetch (arXiv API / Crossref / WebFetch / PDF parser)
├── Success → render + cache
└── Fail → next tier
3. Bundled corpus (corpus/anchor-papers.yaml)
├── Hit → return + flag as "from bundled corpus"
└── Miss → next tier
4. Model knowledge
├── Confident → render + flag every fact [UNVERIFIED — offline]
└── Not confident → fail honestly with a Known-gaps entry~/.agents/skills/read-research-paper/cache/
├── manifest.json # index of all cached papers
├── arxiv/
│ ├── 2403.01234.json
│ └── 2005.11401.json
├── doi/
│ ├── 10.1145_3589334.json
│ └── ...
├── url/
│ └── <sha256-hash>.json
└── topics/
└── <topic-slug>.json # topic → list of cached paper IDs