Ingest anything
Drop in an arXiv ID, a DOI, a raw PDF URL, or a local file. Vellum fetches it, converts it to clean markdown, and extracts sections and metadata with an agent — no fragile regex heuristics.
Vellum is a desktop workspace for research papers — ingest, read, and ask questions grounded in the actual document. It runs on the Claude or Codex plan you already pay for, through the Agent Client Protocol. No hidden API bill, no OAuth bridge, nothing to sign up for.
Built on the tools you already trust
No embeddings, no vector DB, no black box — the agent reads the file, the same way you would.
Drop in an arXiv ID, a DOI, a raw PDF URL, or a local file. Vellum fetches it, converts it to clean markdown, and extracts sections and metadata with an agent — no fragile regex heuristics.
Paginated rendering, zoom, table of contents, and in-document search — with a selectable text layer, so highlighting and "ask about this" are one selection away.
Ask a question and the agent reads paper.md directly — no retrieval step, no chunking loss. Replies cite the sections and quotes they came from. History persists per paper.
One dropdown flips the whole session between Claude and Codex, each spawned as a first-party ACP adapter. Ask the same question to both, on the same grounded context.
Auth comes straight from your signed-in Claude or Codex CLI. No ANTHROPIC_API_KEY, no OAuth bridging, no separate subscription to manage.
Papers live as plain files under data/papers/<slug>; state lives in a local SQLite database. Nothing leaves your machine except the model call itself.
The same vertical loop, proven on a real arXiv paper against a live Claude plan.
Paste an arXiv ID, DOI, PDF URL, or local path. Vellum classifies it, fetches the PDF, converts it to markdown, and runs an on-plan agent turn to pull out title, authors, year, abstract, and section structure.
The library card grid opens the paper in a new tab: paginated PDF, zoom, outline, and in-document search, side by side with the right panel.
The Ask panel sends your question through ACP with paper.md as context. The agent reads the file itself and streams back an answer that cites the paper — no vector index in sight.
One AI seam. One storage layer. No Python, no custom RAG.
electron/
main.ts main process — window, IPC, spawns ACP subprocesses
preload.ts typed window.vellum bridge
src/ React renderer — tabs, library, reader, right panel
core/
acp/ unified ACP client + claude/codex adapters
ingest/ arxiv/DOI/PDF → markdown + metadata
store/ SQLite (better-sqlite3) schema + migrations
library/ paper CRUD, collections, tags
data/ papers/<slug>/{paper.pdf,paper.md}, app.db
Vellum is an ACP client. Each backend — claude-code-acp or codex-acp — runs as a subprocess over stdio. Swapping models means spawning a different adapter; the client code never changes.
Chat passes the paper's markdown file path as context. The agent reads and greps it with its own tools — grep-and-read beats a vector index at personal-library scale, and there's nothing to embed or re-index.
Relational state (library, tags, chat history) lives in SQLite. Paper content lives as plain files on disk. Simple to inspect, simple to back up.
No OAuth bridging. Subscription tokens are never smuggled into a third-party harness — that path is actively blocked and prohibited by Anthropic.
No raw API keys. Auth always comes from your already-signed-in Claude or Codex CLI, never an ANTHROPIC_API_KEY or OPENAI_API_KEY env var.
No Python. Pure Node/TypeScript end to end — one runtime, one packaging story.
No custom RAG. Agent-native file tools replace embeddings — unless a real large-corpus wall shows up.
Vellum is local-first and open. Clone it, ingest a paper, and start asking questions.