mimo-mem — read-only browser for markdown memory stores¶
The assisting models accumulate durable memory as markdown files. This is a small, dependency-free viewer to read and audit those stores — the
.mdfiles are the source of truth, so it walks them directly and never writes.
It supports the reliable-production method: honest durable memory is part of reliable LLM-assisted work, and a memory store is only trustworthy if you can review it. The browser exists to surface drift — for example a name that was promoted into a notes file next to the real identifier in the codebase it was conflated with.
What it browses¶
Two kinds of store, side by side:
- mimo — a MiMo Code store, laid out as
<DATA>/memory/<scope>/<scope_id>/<key>.md(scope =global|projects|sessions|cc), where<DATA>is$MIMOCODE_HOME/data. - cc — a Claude Code per-project memory: a flat tree at
~/.claude/projects/<slug>/memory/<key>.md, auto-detected from the current working directory.
Each memory is addressed as <source>/<path>, and file access is confined
to that source's root (traversal returns 404).
Run¶
With no flags it auto-resolves the mimo root (--root, else
$MIMOCODE_HOME/data/memory) and the cc root (--cc-root, else
auto-detected from the cwd). To browse several stores at once, pass
repeatable --source NAME=PATH[:layout] (layout mimo default, or
flat); each NAME becomes a tree group and a search scope. Zero
dependencies — stdlib http.server, any Python 3.10+.
What it shows¶

- Left pane: memories grouped
source → scope → scope_id → key; each source group is collapsible. - Right pane: rendered markdown (frontmatter shown separately), with
path, size, and mtime;
##headings fold;[[wikilink]]s that match a memory key become click-to-jump links. - Search box: substring search across all bodies, with:
term— case-insensitive substring across all sources;cc:term/mimo:term— restrict to one source (alternation[cc|mimo]:term);/pattern/— case-insensitive regex (combinable with a scope, e.g.cc:/victory.?GateRank/).- Find-in-page highlights every hit with a match counter and a minimap.
Read-only by design¶
Only GET /, /api/list, /api/file, /api/search. It never writes to
the stores, so it cannot corrupt the memory it is auditing, and path access
is confined to each source's root.
Why it earns its keep¶
The motivating workflow: searching an identifier surfaces, side by side, a
wrong durable entry (a misnomer promoted into a MEMORY.md) and the
real identifier in a session note it was conflated from. Reviewing
durable memory this way catches names and claims that have drifted from the
codebase before they propagate into an artefact — the memory-side analogue
of the golden rules.