m membook
CIpassing npmmembook licenseMIT node≥20

Memory that stays true.

A verifiable memory engine for coding agents. Every memory is anchored to a commit, a file, a symbol — so when the code changes, the memory knows.

.membook/memories/m-4f2a.mem.md verified
type: gotcha
status: verified
anchors:
  - kind: git
    path: src/auth.ts
    commit: 8c14b02
---
Auth tokens refresh on the request
boundary, not on a timer — a timer
drifts and expires sessions mid-flight.
01The verification loopwhat no other memory tool does
01Anchor

Stored with one or more {path, symbol?, commit}. No anchor, no memory.

02Diff

commit..HEAD against the anchor paths, in one pass.

03Re-check

Untouched paths re-verify for free. Touched paths get one targeted re-check.

04Verdict
verified stale invalidated

A memory that can no longer be trusted is withheld from the book rather than asserted.

02Contract-watchthe verification loop, across repositories
01Declare

A workspace manifest maps member names to the checkouts your machine already has. No server — git pull is the propagation medium.

02Anchor across

A memory in your repo pins into a neighbour: kind: xgit, repo: gateway, path: config/limits.yaml.

03Catch drift

The producer merges a contract change; you pull; verify --workspace flips your memory stale — before an agent writes code against the old shape.

04Stay honest

A member this machine cannot see is unresolvable — not stale, not verified, never folded into either.

03Installone command, no daemon, no account
npx membook init
04Commitmentseach one checkable, none aspirational
Files are the truth

One markdown file per memory. SQLite is derived, disposable, rebuilt bit-identically.

enforced
No daemon

The MCP server spawns per session on stdio and exits with it. No ports, nothing resident.

enforced
Local-first

No network telemetry, ever.

enforced
Honest status

A memory is unverified until something actually verifies it. Drifted memories are withheld rather than asserted.

enforced