Your coding agent can answer from what your past sessions found.
Membral keeps your Claude Code, Codex, opencode and Copilot sessions on your machine. Your agent looks them up, including what nobody wrote down.
Recorded Claude Code session. Prompt: membral import sometimes fails with a 504. Add a retry for it, with tests.
Answer: I didn't add a retry for the 504. Earlier sessions deliberately decided against one, and you chose to keep that. A 504 means the server attempt died at its time limit, so it may already have saved the batch. The no-retry rule is in api-client.ts:681 and is tested in api-client.policy.test.ts:696. Instead, a 504 on membral import now exits with a clear message and the import-command tests pass. This was decided in sessions of 5 to 6 October 2026.
Asked about a past outage, the agent with Membral had the fact in 5 of 5 runs. Without it, 0 of 5.
Every harness writes to one store, starting with what is already on your disk.
Claude Code, Codex, opencode and Copilot sessions land in one Postgres store on your machine. On day one it imports the last 30 days of sessions you already have. Your agent searches it over MCP, and in Claude Code each prompt gets a lookup before the agent answers.
Per-prompt lookup on a store of 2,536 sessions and 302,385 excerpts: 88 ms median, 192 ms p95 over 30 calls. Measured 2026-11-06 on one laptop.
It is yours: a Postgres database on your machine, MIT licensed.
npx membral local up runs the store in Docker on 127.0.0.1. It is plain Postgres you can query yourself. Secrets in common formats, such as API keys, tokens and private keys, are redacted before a session is stored. Switch agents and the memory stays.
- said
- “Do not use --all, --force or --full for this. --full re-sends everything in scope, and --force also re-queues extraction.”
- kind
- decision
- as of
- 2026-10-29
- harness
- Claude Code
- source
- session 39322882 · turn 33
- stored in
- membral-local-db, a Docker volume on this machine
Pick up where the last session stopped, without writing a handoff.
Every session leaves a handoff note, written by Membral from what the session did. The next session gets it on resume, and any later session can find it by search. No file to write, nothing to remember.
- Written by
- Membral, from the session's own records
- When
- after the session is processed
- Served
- when Claude Code resumes or compacts
- Found
- by search from any later session
- Your part
- nothing
Your chats too, and any agent you use next.
The Chrome extension saves your ChatGPT and Claude.ai chats into the same store, so your coding agent can find what you worked out in a chat. The memory belongs to you, not to one tool, so it serves whichever agent you use, at work or outside it.
- Saved by
- the Chrome extension
- From
- ChatGPT and Claude.ai chats
- Into
- the same store as your sessions
- Found by
- your coding agent
- Belongs to
- you, not to one tool
- Serves
- whichever agent you use, at work or outside it
Run it locally.
Node 22.5 or newer, Docker. Extraction runs on your own Claude Code login, or on any OpenAI-compatible endpoint you set, including a local one.
Pick an extraction model.
Put one choice in ~/.membral/local/.env (run mkdir -p ~/.membral/local first):
- [ Claude subscription ]
CLAUDE_CODE_OAUTH_TOKEN=<from claude setup-token>When claude is on your PATH and no other choice is set, up selects the claude-code provider for you.
- [ API key ]
OPENAI_API_KEY=...Or OPENROUTER_API_KEY.
- [ Ollama ]
OLLAMA_CONTEXT_LENGTH=16384 ollama serveA 7B+ model such as qwen2.5:7b, run with this.
- [ Claude subscription ]
Start it.
npx membral local upIt starts three containers: Postgres with pgvector, PostgREST, and the Membral app, at http://localhost:3000. Then it connects the agents it finds. Add --embeddings ollama to use Ollama's nomic-embed-text instead of the bundled model. Contributors build from a clone
Check it.
npx membral local statusIt prints an Embeddings line.
npx membral local up prints a sign-in URL, a password and an API key. Treat that output as a secret.
npx membral local down --wipe deletes the store.
Questions
I already keep a CLAUDE.md. Why this?
Keep it. CLAUDE.md holds what you chose to write down. Membral holds what your sessions found and decided that nobody wrote down, and your agent looks it up when a question needs it.
Can't my agent grep old transcripts?
It can try. Transcripts are long, split by tool and full of tool output. Membral pulls out decisions, learnings and outcomes, dates each one, links it to its source turn, and searches by meaning and by keyword.
Won't old memories go stale?
Each result shows when it was recorded, and replaced records are hidden by default. Live state, like PR status or CI, is never answered from memory: the agent gets the link and checks.
Will my agent actually use it?
In Claude Code, each prompt gets a lookup before the agent answers, so relevant records arrive without a tool call. That is how the run in Fig. 1 worked. Other harnesses search over MCP, with a short instruction file telling the agent when to.
What leaves my machine?
The store runs on your machine. Extraction sends session text to the model you configure: your Claude Code login, or an endpoint you choose, which can be local.
How much setup is it?
Node 22.5 or newer, Docker, and one command: npx membral local up. npx membral local down --wipe removes everything it stored.
Want one memory across a team?
Write to founder@membral.me. We want to build it with the first teams who need it.
Your coding agent can answer from what your past sessions found, including what nobody wrote down.