Skip to main content

mnemo

Claude Code forgets your corrections. mnemo doesn't — and the sessions it fans out for you start out knowing them.

The five-minute loop: correct Claude, run mnemo learn, the next prompt already knows

Monday, in your app repo, you tell Claude: "never use npm in this repo, always yarn." You run mnemo learn — or you just end the session and let it happen. Thursday, a new session, you ask Claude to add a dependency: that rule is injected before Claude answers. One or two short lines, about 150 tokens, and only when it clearly applies.

What gets injected is a 300-character preview plus a pointer, under a reflex context: header: • [[use-yarn-not-npm]]: Use yarn, never npm …. Claude can call read_mnemo_rule over MCP for the full text; /mnemo:doctor tells you if that server is not connected. A rule that recurs in two different repos is promoted to universal and follows you everywhere.

The whole loop

Friday there are three issues that could be built at once:

mnemo dispatch 197 198 199    # or /mnemo:dispatch 197 198 199, from inside a session

Each gets a background Claude Code session in its own worktree and branch, handed the issue body and scope limits — never a preferred solution, so a child can refuse a wrong one. The children run under the same hooks you do, and a worktree resolves to the repo it was cut from, so every rule the vault holds for that repo — use yarn, never npm included — is injected into them exactly as it is into you.

mnemo sessions is the queue. Blocked on a human comes first, because nothing happens there until you act:

TE ESPERANDO (1)
  a41c8e2f  #196 queue liveness                   4m  Which of the two should own the hint?

TRABALHANDO (2)
  13b6f4f3  #207 sessions docs                 Read docs/getting-started.md (+31)    9k
  3a14bdd9  #206 label column                  Bash pytest -q (+12) ↻                7k

PRONTAS (1)
  7c1e9a04  #205 unblock consumer              #199                                 22k

  attach: claude attach a41c8e2f

Attach, answer the question, detach. That answer is a correction, and mnemo treats it as one: the SessionEnd hook runs mnemo sessions --consume-unblocks, which learns from what you told the blocked child the way mnemo learn does, so the next child to hit the same fork already has your answer. A finished child is delivered by name — mnemo deliver 7c1e pushes its branch and opens the pull request, Closes #205 included — and naming it is the approval; no flag approves them all.

When the unit of work is a feature rather than issues, ask any session to "decompose this for dispatch": the decomposing-for-dispatch skill writes a contract — the pieces, the files each may touch, the signatures each exposes and consumes — and mnemo dispatch --contract <path> spawns one child per piece. mnemo land <contract> is the last metre: every piece in landing order, owners before consumers, and whether each promised signature actually exists on its branch:

contrato dispatch-last-metre (3 peças, em ordem de pouso)
  1. delivery            feat/dispatch-last-metre/delivery  [origin/feat/dispatch-last-metre/delivery]
       PR: https://github.com/xyrlan/mnemo/pull/219 (MERGED)
       expõe   ✓ `ready(worktree, *, repo_root) -> Readiness`
       expõe   ✓ `pr_for(branch, *, repo_root) -> str | None`
  2. contract-discovery  feat/dispatch-last-metre/contract-discovery  [origin/feat/dispatch-last-metre/contract-discovery]
       PR: https://github.com/xyrlan/mnemo/pull/220 (MERGED)
  3. watch-modes         feat/dispatch-last-metre/watch-modes  [origin/feat/dispatch-last-metre/watch-modes]
       PR: https://github.com/xyrlan/mnemo/pull/221 (MERGED)

  tudo pousado — nada a fazer

--merge rehearses the sequence in a throwaway worktree — merge, check the signatures, run the suite, next piece — and only then runs gh pr merge in the same order. Neither the queue nor dispatch ever reaches Claude on its own: no hook and no MCP tool exposes them, because a parent's context is the thing they exist to save. Both forms, every flag: docs/getting-started.md.

What is measured

On the maintainer's vault, 2026-09-09:

reflex: injected on 88 of 1131 prompts (7.8%)

reflex is the per-prompt recall. When Claude asks for rules by topic instead, query-aware ranking lifted the share of cases with the needed rule in the top five from 16% to 31% on topics with more than 20 rules (530 evaluations).

Your own numbers, with a baseline: mnemo replay runs every prompt you typed through the hook's own decision and sorts every rule that would have fired by when the vault learned it. The maintainer's vault, 2026-09-14:

prompts replayed          2107   (219 sessions, 2026-08-03 → 2026-09-14)
rules in the vault        1830   (78 cite a correction you typed: 18 verified by the evidence gate today, 60 label only)

  reflex would have fired               230   prompts   10.9%
  ├─ rule from an EARLIER session      116   prompts   5.5%  (95% CI 4.6–6.6%)   ← the vault's contribution
  │    citing your own words              0   prompts   0.0%  (95% CI 0.0–0.2%)   verified by the evidence gate today
  │    label only, gate can't check       3   prompts   a `verified` from mnemo reclassify; its briefing has no Corrections to check against
  ├─ rule from this SAME session         24   prompts   hindsight — the vault could not have helped
  └─ rule not learned yet                90   prompts   today's vault fires, but the rule postdates the prompt

not measured: whether an injected rule changed the answer; tokens, session length, or time saved; what CLAUDE.md or auto-memory would have covered instead.

The earlier-session line is the only one the vault can take credit for; a naive replay would claim all three. A rate only once there are enough prompts. "Your own words" is the strongest claim on the page, so it is held to the evidence gate as it stands today: the quote must sit in the ## Corrections of a briefing the rule was built from. A confidence: verified the gate cannot re-check — the 2026-09 mnemo reclassify labels cite briefings written before that section existed — is printed on its own line and never quoted as the number.

How it compares

CLAUDE.md — you write it and prune it by hand, and it is loaded whole, every session, whether or not any of it is relevant to what you're doing.

Claude Code auto memory — Claude writes it for you, but only the head of the index loads every session (200 lines as of 2026-09) and the rest is silently dropped. Nothing is ranked against the prompt in front of you.

claude --bg by hand — Claude Code runs a session in the background for you, and then you have six of them: in whatever directory each was started, with no view of which one is waiting for a human, and nothing that pushes a finished one or merges them in the order their dependencies require.

mnemo — learns from your corrections and keeps a verifiable quote of what you actually said. Rules it can't verify stay staged for your review instead of entering the vault. Then it injects at most two rules per prompt — usually one — chosen by BM25F against the prompt text. No database, no daemon, no per-prompt LLM call. Dispatch gives every child a worktree and a branch, the queue puts the blocked ones first, each child inherits the vault, deliver and land finish the job, and what you answer at a blocked child goes back in.

Install

Inside Claude Code, type:

/plugin marketplace add xyrlan/mnemo
/plugin install mnemo@mnemo-marketplace

That's the whole thing. No terminal, no Python, no Node — mnemo ships as a self-contained binary that the plugin fetches for your platform on first use. Restart Claude Code, and it's running.

Other ways to install

Via npm — if you'd rather have mnemo on your $PATH:

npx @xyrlan/mnemo install              # prompts for global or project scope
npx @xyrlan/mnemo install --yes        # global, no prompts
npx @xyrlan/mnemo install --project --yes

Via pipx / uv — for dotfile-managed setups and CI:

pipx install mnemo-claude    # or: uv tool install mnemo-claude
mnemo init                   # global, or `mnemo init --project`

Both need Python 3.8+ (uv brings its own). Details, including what mnemo init writes, how to undo it, and what to do if the plugin lands on top of an older install, in docs/getting-started.md.

Check it worked

Correct Claude in your own words, run mnemo learn, read the output, type your next prompt on that subject (the five minutes). Step 3 is the whole feature:

read: ~/.claude/projects/-Users-you-github-app/3f2a….jsonl
briefing: bots/app/briefings/sessions/3f2a….md (1 correction(s))
learned: use-yarn-not-npm — Use yarn, never npm (evidence: "never use npm in this repo, always yarn")
next prompt about this will surface it — check with `mnemo why`

The evidence: quote is your own sentence, carried back to you. A rule with a quote is a rule mnemo can prove you asked for.

Per-prompt recall is silent by design — it injects a rule only when one clearly beats the rest — and /mnemo:why shows each decision with its arithmetic. Silence with a reason is the difference between "my vault has nothing useful" and "my thresholds are a little too tight".

Day one

A fresh vault has nothing to inject, and mnemo does not go rummaging through your history uninvited. Your first session in a repo with harvestable transcripts prints one line — how many, and roughly what reading them costs — and nothing runs until you say so:

mnemo backfill --dry-run    # exactly what it would read, and what that costs
mnemo backfill              # this repo
mnemo backfill --all        # every project

Backfilled pages are reconstructed rather than observed, so every rule from them lands in shared/_inbox/ for you to read — never auto-promoted into shared/. /mnemo:doctor lists what's waiting (details).

Commands

/mnemo:status   vault state + hook health
/mnemo:why      why per-prompt recall fired, or didn't, on your last prompts
/mnemo:doctor   full diagnostic with actionable fixes
/mnemo:learn    learn from this session now
/mnemo:dispatch spawn a background child per issue, or per piece of a contract
/mnemo:help     list commands

mnemo sessions  the queue: blocked first, then what each running child is doing
mnemo deliver   push a finished child's branch and open its PR
mnemo land      a dispatched contract's pieces in landing order; --merge lands them
mnemo replay    your transcripts against your vault: what would have come back, and from when
mnemo stale     live rules citing a file this repo no longer has, and where it moved to

Your rules are yours. mnemo export writes the ones for the repo you're in to .claude/rules/mnemo.md — a plain file Claude Code loads by itself, one lead sentence and your own quote per rule (--full for whole bodies) — so a teammate without mnemo gets them too, and leaving mnemo costs you nothing. mnemo init --host cursor (or codex) registers the MCP server there and mnemo export --host cursor writes the rules where that tool looks.

Rules can also travel between vaults, through the repo. mnemo publish writes the rules for the repo you're in to .mnemo-shared/<type>/<slug>.md — your quote kept, your vault paths dropped, an opaque vault id as provenance and never a name or an email — for you to commit like any other file. A teammate runs mnemo import: every rule is staged in their shared/_inbox/ for review, never promoted, marked as another contributor's words rather than their own, and a rerun brings only what changed. mnemo status says when the published tree is behind your vault.

Everything else is a CLI subcommand (mnemo help --all): mnemo open, mnemo fix, mnemo backfill, mnemo reclassify, mnemo autopilot, and the rest. The status line (mnemo · 9 topics · 7↓ today, plus N esperando while children wait on you) is opt-in, since plugins can't set one: mnemo statusline --install.

Uninstall with /plugin uninstall mnemo. The vault is always preserved.

Docs

Privacy

100% local. No network calls unless you turn autopilot.network.enabled on. No third-party Python dependencies. Every piece of telemetry (.mnemo/*.jsonl) stays on disk. LLM calls go through the claude CLI you already have — one per session for the briefing, one per ten new files at extraction time — never on the prompt path. Logs are capped at 1 MB; briefings accumulate, one file per session. The one other outbound call is the plugin downloading its binary from GitHub Releases on first use (checksum-verified). Read the source.

License

MIT — see LICENSE.

Metadata

Release files for mnemo-claude 1.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mnemo-claude 1.6.0
File Size Uploaded
mnemo_claude-1.6.0.tar.gz 559.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mnemo-claude 1.6.0
File Interpreter ABI Platform
mnemo_claude-1.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.2 MB

Release files / mnemo_claude-1.6.0.tar.gz

Download URL mnemo_claude-1.6.0.tar.gz
Size 559.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c9938d9f1e8fa75320b333ab519785862ce69c208f69791c20c75e0092a2ee7b
BLAKE2b-256 checksum
How to use checksums
ea2f7925e26e7e889d0a1796de81de259519aac55245a08461d57c888fa1cdf8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / mnemo_claude-1.6.0-py3-none-any.whl

Download URL mnemo_claude-1.6.0-py3-none-any.whl
Size 688.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ecb580f6de5b059f4d9eaa8e2f7e90837bed4316cb79fa4c414c88169385f877
BLAKE2b-256 checksum
How to use checksums
c0148f8291a3d204acbf29a9848864b50ca4774193b25b76a77abe428f088f03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

1.8.0

2 release files

1.7.0

2 release files

This release

1.6.0 This release

2 release files

1.5.0

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.13.4

2 release files

0.13.3

2 release files

0.13.2

2 release files

0.13.1

2 release files

0.13.0

2 release files

0.12.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page