Your tools can read the diff. They cannot read why.
elepha is a local memory layer over the session transcripts Claude Code and Codex already write to disk. It keeps the reasoning and gives it back inside the chat you are already in.
elepha-demo.mp4
The elepha demo video shows Codex stopping mid-task, then Claude Code resuming that same session and explaining why an earlier approach was rejected, from a conversation it never had.
- The part git does not keep — Commits and diffs record what changed. The transcript holds why: the approach you rejected, the constraint that forced it, the thing you left unfinished.
- Nothing to write — No notes, no vault, no file to keep current. The transcripts already exist; elepha reads them.
- Not a wrapper — Keep using your tool directly; elepha never sits in front of it.
- Repository-clean — Adds nothing to your repositories, and never modifies the original transcripts.
npm install -g elepha
elepha install
elepha initCodex needs a one-time approval of elepha's hooks through /hooks. Then open a
supported tool and type elepha:last.
Full walkthrough: getting-started guide.
elepha supports Claude Code and Codex, each in both the desktop app and the CLI, with memory shared across all of them. Support for more transcript-writing AI coding tools is planned.
It runs on macOS, Linux, and Windows through WSL, with Node.js 22 or newer. Native Windows is not supported.
The original transcripts are never modified, so memory can always be rebuilt. That matters while elepha is still pre-1.0: its storage schema and command surface can change between releases.
- Getting started
- In-AI-chat command index
- CLI command index
- Choosing what elepha may remember
- Controlling capture
- Configuration
- Protecting and moving memory
- Deleting memory
- Updating and maintenance
- Troubleshooting
- Reads local transcripts in the background. It watches the session files that supported tools already write, limited to projects and folders you approve.
- Builds one searchable local memory. It organizes eligible sessions in one local database.
- Recalls inside your current chat. Find a session with
elepha:query, open it withelepha:select:<n>, or go straight to the latest withelepha:last. Search looks at session titles and how you opened each session, and, for sessions that have a rollup, at what they concluded; opening one brings the whole conversation back, reasoning included.
Full list: docs/commands-in-ai-chat.md.
| Command | What it does |
|---|---|
elepha:last |
Inject the most recent session and continue where you stopped. |
elepha:list |
List the five most recent sessions, numbered. |
elepha:list:<n> |
List the last n, up to 100. |
elepha:query <search terms> |
Search every approved project. |
elepha:query:here <search terms> |
Search the current project only. |
elepha:select:<n> |
Inject session n from the last list or query. |
Someone asks why it is built this way. Six months on, the commit says what changed and the diff says how. Neither says that the obvious approach was tried first and abandoned for a reason that still applies. That conversation happened, and it is still on your disk.
You have solved this before, in another project. You remember deciding it. You do not remember where, or when, or under which repository. It is one session among hundreds, and the tool you are sitting in has never seen a single one of them.
elepha runs entirely on your machine: capture, storage, search, and recall are local, with no hosted memory service. The one exception is explicit; if you configure an external synthesis provider, the turns sent for synthesis are handled under that provider's data policy.
- Consent-gated — you choose which projects or workspace folders elepha may capture.
- Transcript-safe — the original session files are never modified.
- It can forget — purge a transcript and it stays purged, revoke a folder, or work with capture off.
- One local database — memory lives at
~/.elepha/elepha.dband can be rebuilt from retained transcripts; back it up to keep consent and deletion history.
elepha is open-source software licensed under the Mozilla Public License 2.0 (MPL-2.0).