This is a cross-agent skill pack for reading papers. You can talk to your AI coding agent in plain language and it will filter new papers, read a paper, write notes, and save everything into Obsidian.
- Fetches a batch of new papers every day, does a first-pass screening, and generates a ranked recommendation list.
- Produces a full analysis, quick summary, or critical review for a single paper.
- Turns technical terms into concept notes so they stay linked and reusable later.
- Writes results into Obsidian and maintains MOC / navigation pages.
- Integrates with Zotero, so you do not need to copy links one by one.
The final output in Obsidian looks roughly like this:
ObsidianVault/
├── DailyPapers/YYYY-MM-DD-paper-recommendations.md
├── PaperNotes/.../*.md
└── PaperNotes/_Concepts/.../*.md
Template preview:
In practice it is usually just two prompts:
today's paper recommendations
read this paper https://arxiv.org/abs/2509.24527
Other common phrasings:
paper recommendations from the last 3 days
paper recommendations from the last week
read this paper ~/Downloads/paper.pdf
give me a quick summary of this paper https://arxiv.org/abs/2509.24527
critically analyze this paper ~/Downloads/paper.pdf
read Diffusion Policy from my Zotero
batch read papers under the VLA collection in Zotero
today's paper recommendations runs the full pipeline. read this paper ... reads a single paper.
MOC pages are usually refreshed automatically. If you changed the structure manually, or suspect the index is out of sync, run:
refresh indexes
Prerequisites:
- Claude Code or Codex
- Obsidian
- Python 3.8+
poppler-utils(apt install poppler-utils/brew install poppler)- Zotero (optional)
It is a good idea to put your Obsidian vault under git. Once your note library grows, version history is useful for both recovery and syncing.
If this runs on your own machine, you can choose a more permissive local agent configuration if your tool supports it. Only do that on a trusted personal machine.
Run this from the repo root:
# Claude Code
mkdir -p ~/.claude/skills
cp -r ./skills/* ~/.claude/skills/
# Codex
mkdir -p ~/.codex/skills
cp -r ./skills/* ~/.codex/skills/
# Update this to your own Obsidian vault path.
# It should match paths.obsidian_vault in the config file.
VAULT=~/ObsidianVault
mkdir -p "$VAULT/DailyPapers" \
"$VAULT/PaperNotes/_Concepts/0-Uncategorized" \
"$VAULT/PaperNotes/_Unsorted"After installation, edit the shared config in your skill home:
- Claude Code:
~/.claude/skills/_shared/user-config.json - Codex:
~/.codex/skills/_shared/user-config.json
You can edit it manually or ask your agent to update it for you.
The main fields are:
| Key | Description |
|---|---|
paths.obsidian_vault |
Path to your Obsidian vault |
paths.zotero_db |
Path to your Zotero database (optional if you do not use Zotero) |
paths.zotero_storage |
Path to Zotero attachment storage |
agent.platform |
Runtime target, typically claude or codex |
agent.command |
CLI command used by helper scripts, for example claude or codex |
agent.skill_home |
Skill install root, for example ~/.claude/skills or ~/.codex/skills |
daily_papers.keywords |
Research directions you care about; used for paper scoring |
daily_papers.negative_keywords |
Directions you do not want; a match excludes the paper |
daily_papers.domain_boost_keywords |
Extra domain terms that increase relevance score |
batch read papers under XXX in Zotero does not need any extra mapping file. As long as paths.zotero_db and paths.zotero_storage point to the same Zotero library, the scripts can read your collection tree directly.
By default, Obsidian vault automation does not commit or push:
auto_refresh_indexes = truegit_commit = falsegit_push = false
So the default behavior is to refresh index pages automatically without touching your git repo. If your vault is already version-controlled and you want automatic commits after a run, enable git_commit.
The daily recommendation flow is split into three stages so a single agent session does not get overloaded:
- Fetch: a Python script concurrently requests HuggingFace Daily / Trending plus the arXiv API, scores papers with your keywords, deduplicates them, and writes the top 30 candidates to
/tmp. It then asynchronously enriches metadata from arXiv pages, including authors, affiliations, and figures. - Review: the agent reads the candidate list, sorts papers into must-read / worth-reading / skip, writes sharp comments, saves the result into
DailyPapers/, and updates.history.jsonfor cross-day deduplication. - Notes: for must-read papers, the pipeline calls
paper-readerto generate full notes with formulas, figures, and key methods, extends the concept library, backfills note links, and refreshes the index pages.
Single-paper reading goes through paper-reader. It supports arXiv links, local PDFs, and Zotero search. It can collect figures from arXiv HTML, project pages, or PDFs, then writes a structured note using the template and files it into the right Obsidian folder.
generate-mocs maintains the navigation pages by recursively scanning the paper-note tree and concept library and generating wikilink-based index pages.
More implementation detail is in ARCHITECTURE.md.
The first two skills are the ones you will use most often; the third is mainly for maintenance:
daily-papers: end-to-end daily recommendation flowpaper-reader: single-paper readinggenerate-mocs: manual index refresh
There are also three internal skills for debugging or rerunning specific stages:
daily-papers-fetchdaily-papers-reviewdaily-papers-notes
If you want to run only one stage of the pipeline, you can say:
run paper fetch
run paper review
run paper notes
If you want local scheduling, for example every morning at 6:00 AM, you can ask your agent to set it up for your OS environment.
Can it run the full pipeline in one shot?
Yes. Just say today's paper recommendations. Internally it is split into three stages mainly to control context length and make debugging / reruns easier.
Do index pages refresh automatically?
Usually yes. A single-paper run and the full daily pipeline will normally refresh indexes at the end. refresh indexes is the manual fallback entrypoint.
Can I use it without Zotero?
Yes. Daily recommendations do not depend on Zotero, and single-paper reading also works with direct arXiv links or local PDFs. Zotero is mainly for searching, categorizing, and batch processing an existing library.
Can I use it without Obsidian?
Yes. The output is just Markdown. Obsidian is convenient if you want [[wikilinks]], graph view, and MOC-style navigation, but it is not required.
Can it help with paper writing?
Yes. It is useful for organizing related work, maintaining a note library, and generating reading outlines. You should still verify AI-generated content before using it.
Will it touch my git repo by default?
No. commit and push are off by default and only run if you enable them in config.
This is an open-sourced version of my personal research workflow. AI-generated recommendations, commentary, and notes can contain factual mistakes or omissions, so this is best used as a research assistant rather than a substitute for your own judgment.
There will also be bugs and environment-specific issues. If something small breaks, the quickest path is often to ask the AI to help fix it.
Apache-2.0. See LICENSE.