Your notes, organized into
a map of what you know.

Engram turns your handwritten notes — a OneNote export, or any PDF — into an Obsidian-native vault. Not a tutor: an organizer for what you've already learned. Each page becomes a searchable summary of its key ideas and formulas (original below), notes link into a concept graph, and you can chat with it — grounded and cited — to see what you know and what's still missing.

From an opaque PDF to a navigable brain

You already write notes by hand — on an iPad, a tablet, or paper you scan. Export them to PDF (from OneNote one section group at a time, e.g. one course, or bring any PDF of notes) and Engram groups several such PDFs into a single domain — treated as one combined knowledge base — and turns it into something you can actually think with. You can also drop in a single page as one note.

Before
CSE 234.pdf · DSC 120.pdf · …
one PDF per course · hundreds of pages · not searchable · no structure
After
📁 Data Science (domain)
📁 CSE 234 (section group)
📁 MLSys
📄 Auto Differentiation.md+ .pdf
📁 CSE 150B
📁 MDP
📄 Value Iteration.md+ .pdf
↳ ## Related → [[Auto Differentiation]]

A hierarchy that is also a graph

The folder tree, plus a multi-layer concept map — Concepts → Themes → Areas. Drill from an Area into its themes; click any node for the notes it covers.

Theme / Concept (by cluster) note shared note related (knowledge)
Conceptual mockup of the app's concept-graph view · nodes colored by cluster · same physics as the real GraphEngine (repulsion · springs · gravity · clustering). Click a node.

How a page becomes a note

A searchable summary above, the original page one scroll below. Read → Connect → Use.

Gradient Descent
handwritten · ruled paper preserved
domain: Data Science section_group: CSE 234 section: Optimization kind: handwritten

Gradient Descent

## Update rule

Step downhill along the negative gradient; the learning rate η sets the step size.

  • η too large → diverges; too small → slow.
  • Converges to the global min for a convex loss.
$$\theta_{t+1} = \theta_t - \eta\,\nabla_\theta J(\theta_t)$$
![[Gradient Descent.pdf]]   # the raw leaf, embedded
  1. 1 Read Every page becomes a concise, searchable summary of its key ideas and all formulas — Claude or a local model. Noise filtered, nothing invented, the original kept right below.
  2. 2 Connect A domain-wide pass cross-links related notes and distils a multi-layer concept graph — Concepts → Themes → Areas.
  3. 3 Use Browse it in Obsidian or the macOS app — and chat with it, grounded in your notes and cited.
New in v0.2

Talk to your knowledge base

Chat with your notes — grounded and cited, with anything beyond your notes clearly marked. Query a course or concept, or Synthesise a whole field.

💬 Query ✦ Synthesis Concept: Markov Decision Processes

How does value iteration converge, and why?

Thinking…

Value iteration converges because the Bellman operator is a γ-contraction in the sup-norm:

‖ℬV − ℬV′‖ ≤ γ‖V − V′‖,  γ < 1

so the value estimates form a Cauchy sequence with a unique fixed point V* — geometric convergence from any start.

Sources 📄 Walking in Value Space 📄 “Singularity”

▸ Beyond your notes — next: asynchronous / prioritized sweeping, sample-based VI.

  • Grounded & citedAnswers prefer what your notes say and link them as clickable [[sources]].
  • Marked extensionsAnything the model adds beyond your notes goes under a clear “Beyond your notes” line — never disguised.
  • Query vs SynthesisLocal questions about a concept/course, or big-picture questions across a whole field.
  • Your choice of modelDefaults to Claude (via your Claude Code login); switch models in Settings.
  • No internet yetUses the model's own knowledge — it can't browse the web or use external (MCP) tools yet.

What makes it different

An organizer for what you've already learned — local, faithful, and reproducible. It shows you the shape of your knowledge, not a feed of new material.

🧠

An organizer, not a tutor

Engram doesn't try to teach you the material. It takes what you've already written and makes it legible to you again — a clear map of what you know, where ideas connect, and where the gaps are. You learn from your own notes; Engram just organizes them.

🎯

An index, not an archive

Each note becomes a searchable digest of its key ideas and all formulas — find and reconnect, then jump to the original page (the source of truth, embedded in every note). It filters out noise — papers, homeworks, long code — and never invents; illegible parts are flagged.

🎛️

Your choice of model

Pick the reader in Settings: Claude Code (vision, via your login — default) or a local Qwen2.5-VL 7B/32B, fully on-device. Concept-map & cross-link reasoning runs through Claude Code too — all from a dropdown.

🕸️

Multi-layer concept graph

A holistic pass builds a hierarchy of concept graphs — Concepts → Themes → Areas — that span section groups. Click an Area to drill into its themes; nodes cluster by parent, edges are shared notes (solid) + knowledge (dashed).

💬

Chat — query & synthesis

Ask your knowledge base. Query a course or concept, or synthesise a field. Context is pulled from the graph + your notes; answers are grounded and cited, with anything beyond your notes clearly marked.

Run it locally

Python 3.11+ and uv on macOS 14+ (Apple Silicon). The first run downloads the local model (~5 GB).

terminal
# 1 · set up the environment (add --extra local for the on-device model)
uv sync --extra dev --extra local

# 2 · create a domain, then add a section-group PDF (one per course)
uv run python -m engram domain create "Data Science"
uv run python -m engram add "Data Science" "CSE 234.pdf"

# 3 · cross-link the whole domain (links span section groups)
uv run python -m engram link "Data Science"

# 4 · build the multi-layer concept map → the graph
uv run python -m engram concepts "Data Science" --layers 3

uv run python -m engram status

Output lands in ~/Engram/<Domain>/<SectionGroup>/<Section>/<Title>.{md,pdf} — open ~/Engram in Obsidian.

Prefer a GUI? Build the native app:

macapp
cd macapp && ./build_app.sh && open Engram.app
Full README & source on GitHub ↗

Prototype status — the honest part

Engram's whole ethos is honesty over polish. This is a working v0.2, run end-to-end on real multi-course domains (and v0.1 validated on a known notebook of 18 notes, 73 links) — but it's early, and several things are heuristic or not yet field-validated.

✓ Works today

  • Domains: many section-group PDFs as one knowledge base
  • Searchable index entries — key ideas + all formulas (LaTeX)
  • Filters out papers, homeworks & long code notebooks
  • Add any single PDF as one note — independent of course exports
  • Note ops: delete, move/rename, duplicate (durable across re-imports)
  • Model picker: Claude Code (vision) or local Qwen2.5-VL 7B/32B
  • Domain-wide cross-links + a multi-layer concept graph (shared across notebooks)
  • Chat (v0.2): grounded, cited query & synthesis
  • Incremental rebuilds + a native macOS app

⚠ Prototype caveats

  • Bulk auto-split is OneNote-tuned — single-page add accepts any PDF
  • macOS 14+ on Apple Silicon (~16 GB RAM for the 7B model)
  • Structure parsing is heuristic & locale-dependent (needs an English fallback)
  • Concept / cross-link / chat reasoning runs through your Claude Code login
  • The concept graph & cross-links rebuild from scratch (incremental refresh is next)
  • Chat has no internet / MCP tools yet — model's own knowledge only
  • One-way only (notes → vault); never written back