Ingests annotated research sources (Zotero PDFs, Notion notes, Obsidian notes, arXiv papers, web pages), extracts structured knowledge, and builds an interlinked knowledge base of paper pages and concept pages β queryable in natural language. Also supports building full learning courses with
/goalβ/curriculumβ/tutor.
sources (Zotero PDFs, Notion, Obsidian, arXiv, web)
β
βΌ ingest β /zotero, /notion, /obsidian, /alphaxiv, /web
ββββΆ sources/ objective text
ββββΆ notes/ personal notes + pdf annotations
β
βΌ /collate <topic|paper> β synthesise sources + notes into a page
papers/<slug>.md or concepts/<slug>.md
(objective summary + personal notes/annotations woven in)
β
/edit ββββββ€ co-edit any papers/ or concepts/ page in place
β
βΌ /ask β synthesise a cited answer from the knowledge base (+ flag gaps)
course/<slug>/ β a learning course, three-stage pipeline:
/goal <topic> β goal.md (scope + knowledge audit)
/curriculum <slug> β plan, schedule, modules, per-course library
/tutor <slug> β session-by-session teaching, flashcards, mastery tracking
New here? See the
demobranch for example outputs β sources/notes ingested and collated into papers/concepts.
python -m venv .venv && .venv/bin/pip install -r .claude/requirements.txtSkills call Python via sh .claude/src/pyrun β¦, which always uses .venv/bin/python β no activation needed.
cp .env.example .envThen edit .env β at minimum set your contact email for polite API access:
PRIOR_LLM_BACKEND=claude-code # uses your local Claude Code login, no API key needed
PRIOR_CONTACT_EMAIL=you@uni.com
PRIOR_DATA_DIR=.cacheSee .env.example for all options. .env is gitignored β never commit it.
The project ships an .mcp.json that registers three MCP servers. Zotero and pdf-tools are
picked up automatically β approve them when Claude Code prompts on first session.
Notion uses HTTP + OAuth and must be added manually once:
claude mcp add --transport http notion https://mcp.notion.com/mcpThen run /mcp in Claude Code to authenticate. After that it's persisted and you don't need to run it again.
zoteroβ local Zotero library access for/zotero(needs the Zotero desktop app running;zotero-mcp-serveris installed byrequirements.txt).pdf-toolsβ local PDF body-text + ink-annotation extraction for/zotero(pdf_tools.py, also installed viarequirements.txt).notionβ live Notion workspace fetch for/notion(HTTP MCP, registered above).
All work is done through Claude Code skills:
# Ingest a source
/notion "My reading note title" live fetch from Notion workspace
/obsidian /path/to/your/note.md any local .md file
/zotero pick a PDF from Zotero
/alphaxiv 2507.05024 arXiv paper via AlphaXiv API
/web https://en.wikipedia.org/wiki/... vetted web page with credibility score
# Build knowledge pages
/collate "attention is all you need" synthesise sources + notes β papers/ or concepts/
/edit papers/attention.md co-edit a page in place
# Query the base
/ask "how does ReAct reduce hallucination?"
/retrieve RLHF list relevant notes (no synthesis)
# Build a learning course
/goal "understand diffusion models" by 2026-08-01 5 h/week
/tutor diffusion-models
| Path | What |
|---|---|
sources/ |
Ingested objective text (zotero_*, alphaxiv_*, web_*) |
notes/ |
Ingested personal notes + annotations (zotero_*, notion_*, obsidian_*) |
papers/ |
Paper pages β objective summary + personal notes |
concepts/ |
Concept pages synthesised across the base |
course/<slug>/ |
Learning course: goal.md, plan.md, schedule.md, modules/, progress.md, library/ |
explore_library/ |
Standalone /autoexplore corpus (separately indexed, not the personal base) |
.claude/src/ |
All Python tooling β BM25 retrieval, ingestion helpers, course utilities, web resources (pure Python, no LLM) |
.claude/skills/ |
Claude Code skills (/collate, /edit, /ask, /retrieve, /goal, /curriculum, /tutor, ingestion helpers) |
.claude/AGENTS.md |
Full architecture and conventions |
- BLOG.md β overview of the problem, what we built, and design decisions
- ROADMAP.md β current state, next steps, and how to contribute
Built during Agents4Academia, 15β26 June 2026.