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.

Install
$ npx membral local up

Needs Node 22.5 or newer and Docker. Read what it runs

[ · a recorded Claude Code session ]
[ decided in sessions of 5–6 Oct 2026 ]

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 to add a retry for a 504, the agent finds that earlier sessions decided against one and keeps that decision. It improves the error message and its test instead. Recorded 2026-10-08 in Claude Code; condensed and replayed here in about 9 s. Watch both recordings
[ · recounted by hand ]

Asked about a past outage, the agent with Membral had the fact in 5 of 5 runs. Without it, 0 of 5.

with Membral5/5
without0/5
Same model, same prompt, five runs each. Answers recounted by hand on 2026-10-10. Method and recordings
[ · how the pieces connect ]

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.

Claude CodeCodexopencodeCopilotone storePostgres, on your machineyour agentMCP search, per-prompt lookupClaude CodeCodexopencodeCopilotone storePostgres, on your machineyour agentMCP search, per-prompt lookupClaude Code, Codex, opencode, Copilot write to one store (Postgres, on your machine); your agent reads it by MCP search, per-prompt lookup.

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.

[ · one record from a real store ]

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
[ · the handoff note ]

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
[ · chats in the same store ]

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.

  1. 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 serve

      A 7B+ model such as qwen2.5:7b, run with this.

  2. Start it.

    npx membral local up

    It 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

  3. Check it.

    npx membral local status

    It 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.

Email founder@membral.me

Your coding agent can answer from what your past sessions found, including what nobody wrote down.

Membral — your coding agent remembers what past sessions found