Skip to content

What lives where

Inside the vault

~/Documents/Obsidian/esbi/        (the vault; its own git repo when git is installed)
├── Home.md              your start page; the worker only edits the block between its two marker comments
├── index.md             catalog of every wiki page (rebuilt by the worker on every run: do not keep your own here)
├── log.md               append-only history: "## [date] ingest | Title"
├── SCHEMA.md            the conventions given to the model
├── inbox/               DROP ZONE: Web Clipper notes, PDFs and images waiting to be picked up (mail attachments land here too)
├── raw/                 originals, never edited
│   ├── inbox/           what arrived through inbox/ or by mail (kept as it came)
│   └── DATE-title-hash.md/.pdf/.png   the text snapshot of each source, with the PDF or image next to it
├── attachments/         figures copied out of PDFs and pictures, one folder per source
├── wiki/
│   ├── sources/         one note per source
│   ├── concepts/  entities/  syntheses/
│   ├── daily/           one index note per day
│   └── review/          things for you: contradiction notes, summaries to review, merge suggestions, Lint.md
├── site/                only if you run `sb export` without --out: the exported website
└── .esbi/               worker state (git-ignored, except golden.jsonl)

The state folder, .esbi/

Git-ignored (but for golden.jsonl, which is versioned with the vault), and none of it is in the notes. Delete it to start the worker's memory afresh; the notes are untouched.

File What it is Disposable?
queue.sqlite3 The queue: every source, its state, attempts and last error No: it is what remembers what was done
index.sqlite3 The page index: names, URLs, hashes, full text, and embeddings when [llm.embed] is set Yes: rebuilt from the vault
runs.jsonl One line per sb run: counts, tokens, why it stopped. Feeds the daily note and the nightly due check Yes
run.lock The lock that lets only one run work at a time (an flock: a crash cannot leave it stuck) Yes
logs/nightly.log Output of the scheduled job; trimmed by itself Yes
asks.jsonl One line per sb ask: question, pages retrieved and cited, tokens, seconds Yes
golden.jsonl Yours. The questions for sb eval No: it is committed with the vault; without git, back it up
bench/ Reports saved by sb bench Yes
mail-failed.txt, mail-pdfs.txt Mail the worker could not read (reported once), and fingerprints (hashes) of the PDFs and images that came by mail, so the privacy rules still know a file is email once it sits in inbox/ as a plain file. The file keeps its old name Mostly
mail-state.json The mailbox generation and the highest mail UID taken, so mail added to the label later is taken even if you already read it (see Which mail is taken) Mostly: without it a read mail you labelled more than 14 days after it arrived is missed

Page frontmatter

Source note: type: source, title, url, kind (article / paper / email / video), status (processed then read), captured, processed, read (the date you ticked it), tags, summary (one line, used in indexes), raw (path of the original's snapshot), content_hash, format (2 = the rich note; sb reingest rebuilds notes without it), and, for a clip from a site whose page chrome was removed, stripped_lines (how many lines were taken out before reading; absent when none were). The raw snapshot of such a note holds the stripped text, and the clip as it arrived stays in raw/inbox/.

Concept / entity pages: type, title, aliases, tags, sources (links), updated, summary, and, once the page has a consolidated summary, summary_sources (how many sources the page had when that summary was written; the worker compares it with sources to decide when a new summary is due). The body grows one ## From [[source]] section (## Desde in Spanish) per source that mentions it. When a consolidated summary exists, a ## Summary section (## Resumen in Spanish) sits above all the From sections, right under the title: it says what the concept is and what the sources add up to, and the From sections below it are its evidence. It is written by sb consolidate or by the nightly run (see Consolidated summaries); a page without one is as before. Edit it if you like: it is replaced only when a new summary is written.

Synthesis pages (from sb ask --save): type: synthesis, title, question, sources, updated, summary.

Review notes (type: review, in wiki/review/): contradiction notes, Lint.md, and two kinds the consolidated summaries add. They are named after the page and the language of the vault: <page> - summary to review (<page> - resumen por revisar) holds a summary that failed its checks, with the reasons and the proposal (frontmatter kind: summary, and page linking the page); the page itself was not changed. <page> - possible merge (<page> - posible fusión) lists pages that look like the same idea as <page> (kind: merge). Nothing is merged for you: if they are the same, keep one page, add the other's name as an alias, delete the other, then delete the note. Review notes show under To review in the daily index.

Obsidian resolves [[links]] by file name across folders, so the worker never gives a concept the same name as a source or another page.

Outside the vault

What Where
The settings ~/.config/esbi-cli/config.toml (or wherever --config or ESBI_CONFIG points; sb info prints it)
The mailbox password The macOS Keychain, service esbi-cli-imap, account = your Gmail address
The nightly job (macOS) ~/Library/LaunchAgents/com.esbi-cli.nightly.plist, label com.esbi-cli.nightly
The program Homebrew's Cellar, or uv's tool folder (uv tool dir)
The models Ollama's own store (ollama list); LM Studio's library

An uninstall touches none of the first two rows: see Update and uninstall.