A Claude Code-native, local-first project memory layer.
NotNessie captures the decisions, constraints, preferences, verified commands, bug notes, and task summaries that come out of your Claude Code sessions, then serves them back to Claude Code as compact context β so the assistant gets better over time inside a repository instead of starting every task from zero.
Local-first. No account, no cloud. Your memory lives in your own Postgres, on your own machine. There is no sign-up, no sync service, and no telemetry.
Get started β Β· How it works
Every new Claude Code task tends to need the same context re-explained:
Use Fastify, not Express.
Use PostgreSQL.
Do not edit generated files.
Run tests with pnpm test.
The project uses pnpm, not npm.
Do not change the public API response format.
That knowledge is real and durable, but it evaporates between sessions. The assistant re-learns your project on every conversation, and you re-type the same corrections. NotNessie turns those corrections into structured project memory and replays it at the right moment.
NotNessie wires into Claude Code three ways, all set up for you by
notnessie init:
.mcp.json) exposing nine memory tools β for retrieving
context and saving decisions, constraints, preferences, verified commands,
and task summaries. See MCP tools..claude/settings.json) β SessionStart injects a
context pack, Stop and PreCompact summarize the session into memory, and
UserPromptSubmit / PostToolUse capture context along the way. See
Lifecycle hooks.Underneath, memory is stored in PostgreSQL with the pgvector extension. Retrieval is hybrid β Postgres full-text keyword search plus local semantic embeddings β re-ranked by recency, confidence, type, pinned status, and mentioned files. Embeddings run locally via Transformers.js; when they are disabled or unavailable, search degrades cleanly to keyword-only.
SessionStart hook βββΊ context pack injected into Claude Code
β
βΌ
You work with Claude Code βββΊ it saves decisions / constraints / commands
β
βΌ
Stop & PreCompact hooks βββΊ session summarized into memory
β
βΌ
Next session βββΊ richer context pack, automatically
NotNessie stores ten kinds of memory: project facts, decisions, preferences, constraints, verified commands, task summaries, bug notes, failed attempts, TODOs, and open questions. Read about each on the Concepts page.
A core principle: current code wins over memory. Memory is background, not gospel. When a stored note conflicts with the codebase, Claude is told to follow the code and flag the stale note.
Automatically captured memory is never perfect, so NotNessie ships a local
dashboard (notnessie dev) for reviewing, editing, pinning, and deleting
memories β a ledger you scan and correct. Provenance and confidence are
first-class, because you are curating machine-written notes.
NotNessie refuses to store private keys, credential-bearing connection
strings, and .env dumps, and redacts JWTs, API keys, and bearer tokens
inline before anything is written. It never stores full transcripts or raw
terminal output. See Configuration and the
Architecture page.