Lab

Memory vault

In progress

A memory for my agents, built on my notes. It is early: the core works and the rest is still being shaped.

$ vault search "retry" --limit 3
projects/queue-retry-budget.md Queue retry budget [queue, design]
journal/2026-03-02.md Retries that hid a bug [journal]
reference/backoff.md Backoff notes [reference]
$ vault context list
context/about-me.md About me
context/working-rules.md Working rules
$ vault retrieve "what to read next"
lists/reading-list.md Reading list [lists]
--- Auto-Context ---
context/about-me.md
context/working-rules.md
The CLI: a full-text search, the notes pinned to auto-context, and a retrieval that returns matches plus the pinned notes every time. Mockup with sample data.
{
"query": "retry",
"results": [
{
"path": "projects/queue-retry-budget.md",
"title": "Queue retry budget",
"tags": ["queue", "design"],
"score": 0.91
},
{
"path": "journal/2026-03-02.md",
"title": "Retries that hid a bug",
"tags": ["journal"],
"score": 0.64
}
]
}
The same search as a REST response, which a Claude Code skill or any other agent can call with a token. Mockup with sample data.

How it works

Obsidianmarkdown notes Watcherchokidar Index + APIFlexSearch, token vault CLIsearch, retrieve, tags Claude Codecommands and skills
  1. My notes stay in Obsidian. The vault is plain markdown with frontmatter, and I keep writing in it the way I always did.
  2. A watcher keeps the index fresh. chokidar sees a note change, gray-matter reads its tags and title, and FlexSearch updates the index.
  3. An API serves the memory. The routes are context, search, retrieve, notes and tags, all behind token auth, running in Docker at home.
  4. Agents ask through the CLI. The vault command and the Claude Code slash commands and skills call the same routes, so an agent can search or create a note.
  5. Pinned notes always come along. Anything in the auto-context folder is added to every retrieval, so the basics are there without being asked for.

Built with

Decisions