Scholiast is a desktop research agent. You ask a question; it plans sub-questions, searches, picks sources with explicit ranking signals, ingests each one (web page or PDF) into a per-workspace index, and writes a templated summary in which every claim is tied to a specific source chunk and checked before it is rendered. The graph canvas shows the question, its sub-questions, and the sources that answered them.

Why claim-level verification
Most research assistants cite at the paragraph level, which means a wrong sentence can sit next to a right citation. Scholiast attaches a chunk reference to each claim, batches the claims, and runs a verification pass that drops any claim the source does not actually support. The summary header reports what happened: coverage, confidence, how many sources were read, how many failed, and how many claims the verifier removed. Claims that two sources agree on are marked corroborated; claims sources disagree on are marked contested and listed under a separate heading rather than averaged away.
Systems work underneath
- Bundled local runtime. The app ships and manages a llama.cpp server with Qwen3-VL-8B, downloaded on first use from the model panel. Any OpenAI-compatible cloud endpoint can be swapped in. API keys live in the OS credential store, not in a config file.
- Text-first ingestion. PDFs are read as text; the vision model is used only for scanned pages, three pages at a time within a per-question budget.
- Persisted, idempotent jobs that run concurrently across workspaces and survive an app restart.
- Sibling-model failover and quota-aware clients so a rate limit on one provider degrades to the next instead of failing the question.
- Citation authority. Sources that your read sources cite are ranked with PageRank, so a survey paper's references surface as candidates without a second search.
- A persistent "brain": a concept map with cited glosses, hierarchy, and typed relations that grows across questions in a workspace.

Scope
| Property | Value |
|---|---|
| Codebase | ~22k lines of first-party TypeScript and Python, ~120 source files |
| Orchestration | LangGraph workflow: plan, search, read within budget, organize, narrate |
| Local model | Qwen3-VL-8B via bundled llama.cpp; cloud providers optional |
| Verification | batched claim-to-chunk checks; dropped claims counted in the summary header |