Obsidian vault & memory

Watari has six layers of memory. Your Obsidian vault is the big one — its long-term, read (and optionally write) knowledge base. Here's how to connect it and switch on every memory capability.

The six layers

LayerWhat it isEnable
L1 learned factsdurable one-line facts it saves about youon by default (JARVIS_MEMORY_ENABLED=true)
L2 journala daily journal written at session endon by default
L3 Obsidian vaultyour notes — searched & read every sessionJARVIS_VAULT_PATH (below)
L4 hot cacheRedis cache so lookups survive restartsJARVIS_REDIS_URL (optional)
L5 semantic recallrecall by meaning, not just keywordspip install sentence-transformers
Workingthis conversation; restart-durable, idle-resetalways on

1 · Connect your Obsidian vault (L3)

Point Watari at the folder of Markdown notes you want it to read. In .env:

JARVIS_VAULT_PATH=C:\Users\you\Documents\Obsidian Vault   # Windows
# JARVIS_VAULT_PATH=/home/you/obsidian-vault                  # Linux/Mac

It's validated at startup (Watari warns loudly if the path isn't readable). Any folder of .md files works — it doesn't have to be Obsidian. Tuning knobs: JARVIS_VAULT_SEARCH_MAX_RESULTS (default 6) and JARVIS_VAULT_READ_MAX_CHARS (default 4000).

Reading is on as soon as the path is set. Try it by voice: “search my vault for the rabbit-farm note and read me the summary.” Tools: search_vault(query), read_vault_note(path).

2 · Enable WRITING to the vault

Writing is off by default on purpose: if your vault is a one-way sync target (e.g. a local mirror of a server-authoritative vault), local edits get clobbered. Turn it on only on the host that owns the vault:

JARVIS_VAULT_WRITABLE=true

Then write_vault(path, text) can save notes (path-scoped, no traversal). On the host that owns the vault this is safe; on a mirror, leave it false and let the authoritative host write.

3 · Learned facts & journal (L1 / L2)

These are Watari's own memory, stored as Markdown under memory/learned/ and memory/journal/ (gitignored). They're on by default. Tools you can use by voice:

  • remember(text, tags) — “remember that I keep rabbits at the farm.” It also saves durable facts on its own.
  • recall(query) — “what do you know about my farm?”
  • forget(query) — drop a stored fact.
  • read_journal() — “what did we do yesterday?”

The most recent learned facts are injected into the system prompt at startup (capped by JARVIS_MEMORY_DIGEST_MAX, default 12); recall reaches older ones. A background self-improvement pass quietly extracts durable facts after every few turns (JARVIS_SELF_IMPROVE_ENABLED).

4 · Recall by meaning (L5, optional)

uv pip install sentence-transformers   # ~90 MB model downloads on first use

With it installed, recall matches on meaning (“my bunnies” → your rabbit-farm note), not just keywords. It's a graceful no-op until installed (JARVIS_MEMORY_SEMANTIC_ENABLED=true by default).

5 · Cache across restarts (L4, optional)

JARVIS_REDIS_URL=redis://localhost:6379/0

Backs the hot cache with Redis so cached lookups survive a restart. Leave it blank and the cache falls back to in-process (no failure).

Sync direction matters. If your vault is mirrored from a server (the common 24/7 setup), treat the server as authoritative: write there, keep the local mirror read-only (JARVIS_VAULT_WRITABLE=false) so a sync never clobbers an edit.

See also Architecture → Memory for how the layers compose, and Integrations for every other tool.