Problem

Ebook readers tend to keep highlights, locations, and reading state inside the reader while research notes live somewhere else. That separation makes links between a passage and an argument harder to keep portable and inspectable.

Origin

Amnesia grew out of years of reading, note-taking, digital-library management, and working in Obsidian. Books, highlights, and reading state were separate from the notes and links used for research, so the project brings those materials into the same workspace.

Position

The project favors local ownership of reading data, portable relationships, and self-hostable storage. Links and annotations are stored as relationships to the reader’s own material, so they remain useful outside a hosted reader account.

System

AmnesiaBooks · highlights · reading state · source locators
Doc DoctorStubs · document state · AI · grounding · citations · MCP
Implemented federation boundary: each system keeps its own domain while exchanging scoped state and operations.

Implemented · reading context Amnesia supplies books, highlights, source locations, and reading state while keeping the underlying reading material inside its own domain.

Implemented · editorial loop Eligible knowledge gaps can synchronize to Doc Doctor stubs; resolution and health state can return to the reading workflow.

Planned: Let Doc Doctor search Amnesia’s source-addressed library when a document needs supporting evidence or a citation.

Demonstration

Wikilink creation and the resulting backlink stay inside the Obsidian knowledge surface.

Amnesia — source link1/3 · Select passage

Obsidian workspace with an EPUB and Markdown note open side by side. A selected ebook passage is linked to the note; the resulting hyperlink remains on the EPUB and the note records the incoming relationship.

Decisions

  1. Host the reader inside Obsidian. Books, passages, Markdown notes, backlinks, graph relationships, and canvases can share one knowledge environment.
  2. Keep the reading record locally controlled. Library state, annotations, links, and source addresses are designed to remain useful without depending on a hosted reader account.
  3. Keep reading material addressable outside the reader. Books, passages, highlights, and reading state carry stable identities and source locators so adjacent systems can consume research context and reconstruct relationships from either side.
  4. Separate the Obsidian client from the self-hosted service. The TypeScript/Svelte reader owns the workspace experience; the Rust/Axum service owns library, persistence, storage, rendering, and OCR concerns.
  5. Consolidate PDF display modes behind one rendering authority. Paginated, vertical, horizontal, grid, and canvas modes share one renderer and state topology, with each display mode operating as a view over that shared state.
  6. Decouple immediate interaction from asynchronous refinement. Camera feedback stays synchronous while rendering works from snapshots; stale refinement output can be discarded while navigation continues.
  7. Protect visible work before speculative work. Memory budgets and scheduling prioritize the current visible set, then prefetch and background refinement.
  8. Use runtime capability to select fast paths. Shared renderer code stays platform-neutral; worker bootstrap, memory envelopes, and optional acceleration paths are chosen through explicit capability adapters so mobile constraints are part of the architecture.

Further inspection