Demo plan · ainb-plugin-learnings · PR #214

Memory search — the demo, journey by journey

TL;DR — The learnings plugin turns your ~/.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.

FeatureKeysWhat the clip showsRecording
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.

m → ╭ 🧠 Learnings ─ Browse │ Search │ Graph ─╮ … 96 shown

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.

lrn-audit-after-rebase-147209 0.9

Must show: selection visibly moving down the real list.

3 · Filter memories f

f cycles the scope chip (*universalproject); the chip bar also carries confidence / category / source / project facets.

filters: scope[universal] conf[*] category[*] source[*] project[*]

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.

╭ 📖 <title> ─╮ key_insight: … ## Problem … ## Solution … provenance: claude · … · conf 0.85

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.

search: rebase▏ → ranked results (id · score · title)

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.

/plugin update command → /plugin update command --solves--> stale plugin cache

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.

Settings ▸ Plugins ▸ learnings learnings_dir = ~/.learnings/documents/learnings

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
Why the real KB and not the 4-note test fixture? Because 96 real memories make a far more convincing demo — the search returns real hits and the graph shows real edges like --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) and demo/*.gif / demo/00-walkthrough.mp4 (the renders).
Is search shown live?
Yes — against your real qmd index. (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.