// the find
obra/episodic-memory
A CLI and MCP server that indexes your Claude Code, Codex, Cursor, opencode, and Oh My Pi conversation transcripts into a local SQLite + sqlite-vec store and exposes semantic search over them as agent tools. It's for developers who use multiple AI coding assistants and want "remember what we discussed last week" recall built into the agent's workflow.
The cross-harness parsing is real engineering, not a thin wrapper — it handles four different storage shapes (Claude/Codex JSONL, Cursor's state.vscdb SQLite export, OMP's parent-ID tree with active-path resolution) and normalizes them into one index. Embeddings and search run entirely locally via Transformers.js and sqlite-vec, so day-to-day search has no API dependency or per-query cost. There are practical guardrails too: an oversized-message cutoff (default 256KB) drops exchanges that are actually a foreign transcript pasted into one message rather than letting them dominate the index, and there's an explicit marker to exclude a conversation from indexing entirely.
The README leads with a testimonial "from Claude Sonnet 4.5" praising the tool — that's AI-written marketing copy sitting at the top of a project whose whole pitch is honest context, and it reads as slop regardless of what generated it. Summarization shells out to the `claude` or `codex` CLI as a subprocess (up to 10 calls per sync) and by default rides your interactive Claude Code auth, meaning it can silently start billing the metered API the moment `ANTHROPIC_API_KEY` is set — you find out via a warning, not a prompt. It depends on undocumented internal formats of three third-party tools (Cursor's SQLite store, Codex's rollout format, OMP's session tree); any of those can change on an unrelated update and break sync with no upstream contract to rely on. There's no visible redaction or per-project scoping for the index — anything discussed in any past conversation, including credentials or client specifics, is searchable from any other project unless you remember to tag it with the exclusion marker up front.