How eno works.

eno reads a folder of markdown once, indexes its structure — frontmatter, wikilinks, tags, headings — into a small SQLite database, and answers questions from that index instead of re-reading files. Below: the pipeline, then what it surfaces, shown over a real demo vault you can run yourself.

One index, many surfaces

Everything downstream reads the index, never the whole vault. Queries return paths and ~1 KB excerpts; the only time a full note is read is when you explicitly ask for one. That's what keeps it cheap enough to put behind an agent.

your vault/ eno never loads whole notes into a prompt — ├─ 2 Projects/… it indexes structure and returns excerpts. ├─ 2 Research Areas/… └─ z Daily Notes/… │ │ eno index parse frontmatter · wikilinks · tags · headings ▼ ┌───────────────────┐ │ .eno/index.dbSQLite — the queryable surface └───────────────────┘ │ ┌────┴────────────┬─────────────────┬────────────────────┐ ▼ ▼ ▼ ▼ RETRIEVE GARDEN LLM extra WRITE search · note orphans · stubs fold distill create-note neighbors stale · drift tiling dedup append-to-note frontier · hot hygiene·health enowiki[llm] → back to vault │ │ │ │ └────┬────────────┴─────────────────┴────────────────────┘ ▼ SURFACES eno (CLI) · eno-mcp (agents) · eno-service (HTTP) · eno-plugin (Obsidian)

Gardening output is written back into the vault as notes under 9 Vault Health/ — wikilinkable and graph-visible, so the vault stays its own dashboard. eno suggests; it never auto-merges or deletes.

What it surfaces

These four views come straight from running eno over the shipped demo vault — no LLM required. The chart forms and colours were chosen with vizier: horizontal bars for ranked magnitudes, divided bars for part-to-whole, a colourblind-safe blue/orange split, and label ink validated to WCAG AA contrast.

Orphans by size — buried research
The Forgetting Curve
852w
Information Foraging Theory
582w
Attention Residue
445w

Substantial notes that nothing links to — the biggest ones are usually the most-buried important work, not junk. eno ranks them by size so you resurface the gold first. vizier form: bar chart · Magnitude / Ranking

Unresolved wikilinks — groundwork vs. bugs
23 incipient
3 drift
incipient — deliberate groundwork for not-yet-written notes (not bugs) drift — links that almost resolve ([[Systems  Thinking]]) — the real bugs

A raw "broken links" count would flag all 26 as errors. eno separates the 23 intentional concept-seeds from the 3 genuine near-misses — so you fix what's actually broken and leave the groundwork alone. vizier form: divided bar · Part-to-whole · blue/orange is colourblind-safe

Frontmatter hygiene — coverage
20 complete
6 missing
complete — has origin + stage missing a required field — incomplete, not an error

77% of the vault has complete frontmatter. eno tells you exactly which notes and which fields are missing, so the contract is enforced by suggestion, never by rewriting your notes. vizier form: divided bar · Part-to-whole (honest where a pie would mislead)

Frontier — threads reaching outward
Map of Content — Learning
11.76
Building a Research Workflow
7.88
Learning in Public
3.27

Pages with high out-degree, low in-degree, and a recent touch — where the vault is actively reaching for new ground. Score is (out − in) · e−age/halflife; the well-linked hubs correctly score negative and drop out. vizier form: bar chart · Magnitude / Ranking

Try it in two minutes

The repo ships a small synthetic vault at examples/demo-vault so you can reproduce everything above without pointing eno at your own notes yet.

$ pip install enowiki
$ git clone https://github.com/lavallee/eno
$ eno --vault eno/examples/demo-vault index
$ eno --vault eno/examples/demo-vault hygiene
$ eno --vault eno/examples/demo-vault orphans

Then point it at your own vault: export ENO_VAULT_DIR=~/vault and drop the --vault flag. See the README for the full tour and the MCP setup for wiring eno into a coding agent.