Memory search — the demo, journey by journey
~/.learnings knowledge base
(96 memories on this machine) into a searchable TUI inside ainb. Open it with
m, /recall or /memory;
it has Browse · Search · Graph tabs plus a Detail pane and a Settings config screen. This page
is the recording plan: 7 user journeys → 7 GIFs, plus one stitched
hero walkthrough MP4. Each clip is captured with VHS driving the real binary against the
real KB. Next step → run the captures.
The 7 journeys — one recording each
Each row is a thing a user actually does. Each gets its own short GIF so it can stand alone in docs, the README, or social.
| Feature | Keys | What the clip shows | Recording | |
|---|---|---|---|---|
| 1 | Open the browserget into the KB | m · /recall | Home → key → 🧠 Learnings opens, 96 memories paint | 01-open.gif |
| 2 | Browse memoriesscan the list | ↑↓ · jk | ▶ marker moves; id + confidence per row; "96 shown" | 02-browse.gif |
| 3 | Filternarrow by facet | f | chip cycles → scope[universal], list narrows |
03-filter.gif |
| 4 | Read a memoryDetail pane | ⏎ · ⌫ | full body + entities + relationships + provenance; ⌫ back | 04-detail.gif |
| 5 | Semantic searchqmd-ranked | / type ⏎ | query box → ranked hits → ⏎ opens a hit's Detail | 05-search.gif |
| 6 | Explore the graphtyped neighbourhood | g · c | entity → typed edge --solves-->; c = clusters |
06-graph.gif |
| 7 | Configure in Settingsper-plugin config | Settings ▸ Plugins | edit a path → persists to config.toml |
07-config.gif |
Journey detail
Expand each for the exact keystrokes and the one thing the clip must prove.
1 · Open the memory browser m · /recall · /memory
From the ainb home screen, one key drops you into the knowledge base. Three doors, same screen: the m shortcut, or /recall / /memory in the : command palette.
Must show: the title 🧠 Learnings and a list of real memory ids paints within a beat.
2 · Browse your memories ↑ ↓ / j k
Arrow (or vim) keys move the ▶ selection through all 96 rows; each row is a learning
id and its confidence score, with a live "96 shown" status line.
Must show: selection visibly moving down the real list.
3 · Filter memories f
f cycles the scope chip (* → universal →
project); the chip bar also carries confidence / category / source / project facets.
Must show: press f, the chip flips to scope[universal] and the list shrinks.
4 · Read a memory — the Detail pane ⏎ open · ⌫ back
⏎ opens the full record: title, key-insight, the whole markdown body, its entities, its typed relationships, and a provenance line (source tool · path · confidence). ⌫ returns to the list with selection preserved.
Must show: a real note's body + provenance, then the trip back.
5 · Search memories semantically / → qmd
/ opens a query box; type a term (e.g. rebase),
⏎ runs a qmd semantic query and renders ranked hits;
⏎ on a hit opens its Detail.
Must show: typing a query and ranked results coming back.
6 · Explore the knowledge graph g neighbourhood · c clusters
g opens the Graph tab: select an entity to see its typed neighbourhood,
the edge types pulled from the .entities.yaml sidecars. c toggles
to community clusters.
Must show: a real entity and a real typed edge; then c → clusters.
7 · Configure it in Settings Settings ▸ Plugins ▸ learnings
Open Settings → the Plugins category → learnings; edit a field
(learnings_dir / qmd_index / graph_cache) and it persists to
config.toml [plugins.learnings]. This is the generic per-plugin config framework — every
future plugin gets the same screen for free, straight from its manifest.
Must show: editing a value and it sticking after a re-open.
The hero walkthrough
00-walkthrough.mp4 — one continuous take stitching journeys 1 → 6
(open → browse → filter → detail → search → graph) into a ~45 s narrated-by-motion hero clip.
MP4 (not GIF) so it stays crisp and small for the README header / a tweet.How each clip is captured
All captures use VHS .tape scripts driving the real ainb binary
against the real ~/.learnings KB — same harness the tmux tripwires use, so what you
record is exactly what ships. Each journey is one .tape; the hero is one longer take.
# demo/tapes/05-search.tape Output demo/05-search.gif Set FontSize 18 Set Width 1200 Set Height 700 Set Theme "Catppuccin Mocha" Type "m" # open 🧠 Learnings Sleep 1500ms Type "/" Sleep 400ms # query box Type "rebase" Sleep 600ms Enter Sleep 1800ms # ranked results Enter Sleep 1500ms # open a hit's Detail Backspace Sleep 800ms
# seeded isolated HOME (skip wizard + dismiss notify modal), # config points at the REAL KB [plugins.learnings] learnings_dir = "~/.learnings/documents/learnings" graph_cache = "~/.learnings/nano_graphrag_cache" qmd_index = "~/.cache/qmd/index.sqlite" # onboarding.toml: completed=true + notifyd dismiss_prompt()
# stage + sign the plugin so macOS AMFI doesn't SIGKILL it cd ainb-tui ./scripts/build-plugins.sh # → dist/plugins/learnings (signed) AINB_PLUGIN_ROOT=dist/plugins vhs demo/tapes/05-search.tape
--solves-->. The seeded HOME only skips the first-run wizard; the data is yours.FAQ
- GIF or MP4?
- Per-journey clips are GIF (loop-friendly, drop straight into a README/PR). The hero walkthrough is MP4 (crisper + smaller for a long take). FFmpeg can derive a GIF from the MP4 if a looping hero is wanted too.
- Where do the files land?
- A
demo/folder:demo/tapes/*.tape(the scripts) anddemo/*.gif/demo/00-walkthrough.mp4(the renders). - Is search shown live?
- Yes — against your real
qmdindex. (In the headless tripwire HOME qmd can't resolve, so the recording runs with the real HOME's qmd config so hits come back.) - What proves these aren't staged?
- Same binary + same KB the CI tripwires drive. The real-KB smoke already showed all 96 memories,
real Detail bodies, and the real
--solves-->edge.