memem GitHub Details, Stars and Alternatives | OpenRepoFinder
TT-Wang / repository
memem
A Claude Code plugin that gives Claude persistent memory across sessions — stores lessons and decisions as markdown in your Obsidian vault, searches them with SQLite FTS5, and mines past transcripts automatically.
A transparent discovery signal based on current public GitHub metadata.
Recent activity35% weight
100
Community adoption25% weight
23
Maintenance state20% weight
100
License clarity10% weight
100
Project information10% weight
75
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
README preview
memem
Persistent, self-evolving memory for Claude Code. Stop re-explaining your project every session.
memem is a Claude Code plugin that gives Claude persistent memory across sessions. An event-triggered miner (Stop-hook → detached mine_delta subprocess) extracts durable lessons (decisions, conventions, bug fixes, preferences) from each new conversation turn, stores them as markdown in an Obsidian vault, and automatically surfaces relevant ones as an Active Memory Slice working state. An explicit narrative assembly path still exists, but the default runtime context is slice-first.
It's local-first: no cloud services, no API keys required, no vendor lock-in. Everything lives in ~/obsidian-brain/memem/memories/ as human-readable markdown.
What's new in v2.9.1 (Path-Scope Activation)
v2.9.1 activates the path-scoped retrieval that shipped dormant in v2.9.0: recall now auto-derives paths_context from the current session so the paths: bonus actually fires without any caller action. The new recent_session_paths() in memem/transcripts.py resolves session_id → JSONL via a direct CWD-slug stat first (O(1)), falling back to next(base_dir.rglob(...), None) (short-circuit on first match); it then tail-reads the last 512 KB of the file (~5 ms even on a 64 MB session, vs ~390 ms for a full read), walks assistant turns most-recent-first, and extracts the top-N deduplicated file paths from /// inputs and Bash command first-line path tokens via . The auto-derivation is wired into (MCP tool), the UserPromptSubmit hook, and the slice path; caller-supplied still wins; derivation failures are logged at / and never propagate — any exception returns silently. No API or schema changes; 12 new tests in cover extraction, recency/dedup/limit, missing/malformed sessions, and end-to-end integration. See for full details.
ALGORITHMICALLY RELATED
Similar Open-Source Projects
Selected from shared topics, language and repository description—not editorial ratings.
Open-source, self-hosted Claude Code - a terminal AI assistant and the Python framework behind it. Tool-calling, sandboxed execution, multi-agent teams, skills, checkpoints, unlimited context - on Pydantic AI, any model.
🤖 24/7 AI agent that maximizes Claude Code Pro usage via Slack. Auto-processes tasks, manages isolated workspaces, creates Git commits/PRs, and optimizes day/night usage thresholds.
What's new in v2.9.0 (Tool Diet + Transcript FTS5 + Path Scope)
v2.9.0 trims the MCP surface from 14 tools to 6 — removing memory_recall, memory_graph, memory_graph_audit, memory_graph_rebuild, memory_list, memory_import, context_assemble, and memory_remind from the MCP layer (CLI and library equivalents remain for all eight) — and cuts total tool-description schema size 57% (12,827 → 5,474 chars). transcript_search is backed by a persistent FTS5 index at ~/.memem/transcript_fts.db (one row per Q/A turn-pair, index_session() called incrementally from mine_delta; old single-row-per-session indexes auto-migrate; the grep fallback is bounded by size/count/time caps and never silently truncates). Path-scoped memories arrive via a new paths: frontmatter field and a 1.05× w_path bonus in retrieve() for memories whose path globs match paths_context; memory_save gains an optional paths param; active_memory_slice accepts paths_context; and the miner annotates candidates with paths: when ≥2 paths each appear ≥3 times. Telemetry isolation is hardened via MEMEM_TELEMETRY_SOURCE. Closed-loop evaluation tooling is wired: a canary --doctor check, --dual-engine replay, and deferred-gate comments in lessons.py / feedback.py. Benchmark 79.3% (119/150), all acceptance gates pass. See CHANGELOG for full details.
What's new in v2.8.0 (Vault Structure)
v2.8.0 retires the L0–L3 layer system and replaces it with a context model that reflects how memory actually works. The starting point was honest data: 462 memories had been auto-classified L0 ("always relevant"), which was not a layer, it was a full briefing that no session could absorb. The new model has three tiers: (1) profiles — schema-shaped always-injected documents per user (profile_user.md: Preferences / Conventions / Environment) and per project (profile_<project>.md: Identity / Stack & Structure / Conventions), stored at <vault>/memem/profiles/, populated by the miner's new PROFILE reconcile op and bootstrappable from your existing vault via --migrate-layers; (2) working rules — type:procedural memories (failure→fix patterns, corrections) ranked by citation count and injected as a ## Working rules block at session start (≤1200 chars); (3) episode index — the existing 25-entry episodic title index, unchanged. Consolidation logic moves from the deleted consolidation.py into the dreamer's cluster_merge category with a bug fix: only the members listed in supporting_ids are bi-temporally invalidated after a successful merge, not all cluster members unconditionally. The dreamer gains reflection_with_citations (synthesizes type:insight memories from episodic clusters) and tense_rewrite (corrects expired future-tense memories) as additive-safe categories that fire automatically every 25 substantive mining deltas via --dream --safe-auto. The 18-query benchmark improved to 80.0% (120/150) after L0 MMR pre-seeding was removed — the anchor mechanism was penalizing relevance, not helping it (measured during release validation; up from 79.3%/119/150 in v2.7.0). See CHANGELOG for full details.
What's new in v2.7.0 (Write Path + Instrumentation)
v2.7.0 makes the miner smarter about what it writes: instead of adding every extracted candidate blindly, it compares each one against its nearest vault neighbors in a single batched Haiku call and picks ADD, UPDATE, SUPERSEDE, or NOOP with safety rails (protected-target guard, truncation guard, ≤5 destructive ops per delta, global fallback to ADD-all on any exception). The previously unreachable bi-temporal invalidation path (invalid_at / replaced_by) is now exercised by SUPERSEDE ops. Every retrieval is now linked to a session id, and the miner scans assistant text for cited memory ids and writes {"type":"citation"} rows to .recall_log.jsonl — closing the feedback loop so --analyze-recalls shows citation rate per tool and the dreamer demotion guard is live again after sitting inert since v2.5. Additional improvements: key expansion (miner emits up to 8 synonyms/aliases per memory, FTS+BM25 indexed), tool-trace digest (Bash/Edit decisions are now minable), memory_save three-band dedup (merge instead of reject for 0.70–0.92 near-duplicates), --purge-contaminated --exclude, and flock-safe feedback EMA writes. Benchmark unchanged at 79.3%. See CHANGELOG for full details.
What's new in v2.6.0 (One Engine)
v2.6.0 unifies retrieval: a single three-way RRF engine (cosine + BM25 + FTS5) now serves every call path — hook, MCP tools, and CLI. The unbenchmarked heuristic engine that served memory_search/memory_recall since v2.4.0 is deleted (−218 LOC: 5-signal re-ranker, ngram union, file-scan fallback, and a 15% feedback weight reading a file nothing ever wrote). Deprecated and invalidated memories are now excluded from the retrieval index at vault-load time, fixing a leak via the hook path. The scope_id parameter changes from a hard filter to a soft ranking bonus — cross-project results that score well now appear. The 18-query benchmark is maintained at ≥74% precision (79.3%, measured during release validation). See the A/B comparison report for transparency on result-set divergence vs the prior engine, and CHANGELOG for full details.
What's new in v2.5.0 (Repair & Prune)
v2.5.0 is a maintenance release: 24 audited defects fixed and ~2,256 LOC of dead code removed. No new memory capabilities. Key fixes: self-mining contamination guard (stale-sweep now skips headless mining transcripts), RRF/MMR scoring bugs fixed (18-query benchmark measured during release validation: 74.7% → 78.7%), embedding index staleness fixed (incremental upsert + mtime invalidation + cross-process flock), double access-count stores eliminated (telemetry sidecar is now the single store), episode deduplication (one stable-id episode per session). Removed: compaction.py, reaper.py, attribution pipeline, storage.py, 8 dead settings knobs, and hybrid injection mode (was documented but never implemented). New CLI: python3 -m memem.server --purge-contaminated [--apply]. See CHANGELOG for full details.
What's new in v2.4.0 (passive mode + episode catalog + telemetry)
v2.4.0 flips the default injection mode from auto to tool: Claude no longer receives memory context on every prompt automatically. Instead, it pulls memory on demand via memory_search, memory_get, and active_memory_slice. This eliminates ~85% per-turn noise that was masking v2.3.0's ranking improvements. At session start, Claude now receives a ## Episode index section listing up to 25 episodic memories by title — a clean menu without a full content dump. Every retrieval is logged to ~/.memem/.recall_log.jsonl; run python3 -m memem.server --analyze-recalls to inspect recall patterns. All 5 MCP tool descriptions have been rewritten to be trigger-explicit so Claude knows when to call each tool. Existing users with MEMEM_INJECTION_MODE=auto in their shell profile are unaffected; see the CHANGELOG breaking change banner to restore old behavior.
What's new in v2.3.0 (hybrid retrieval)
active_memory_slice now uses a two-stage hybrid retrieval pipeline: BM25 + cosine Reciprocal Rank Fusion (RRF) builds a top-20 candidate pool, then Maximal Marginal Relevance (MMR, λ=0.7) selects the final 8 results to suppress near-duplicate memories. Access writeback is on by default (MEMEM_WRITEBACK_ENABLED=1); each recall fires a daemon thread that increments access_count in a JSON sidecar at ~/.memem/telemetry.json (NOT in memory frontmatter — deliberate, to keep load_vault_index's mtime cache stable). Net benchmark result: 75.3% precision (+1.3 pp vs v2.0.0 baseline), 133ms warm latency. Recency decay scoring was prototyped but reverted due to a negative-cosine ranking regression — see CHANGELOG for details.
What's new in v2.2.0 (episodic seeds)
Two architectural additions targeting the episodic-query gap vs everme. (a) retrieve.py parses temporal phrases in queries ("yesterday" / "last week" / "N days ago") and re-ranks candidates by created: proximity (+0.2 boost). Zero behavior change for non-temporal queries. (b) mine_delta.py emits one per-session "episode" memory after substantive Stop events (tagged type:episodic, Haiku-generated 100-wo
Open-source control plane for AI coding agents — run, monitor & orchestrate dozens of parallel Claude Code, Codex & Gemini sessions from one web dashboard or your phone. Self-healing, single-file, tmux-native.
A stack-agnostic Claude Code skill: strict code reviewer, pair programmer, debugger, and mentor (Python/Bash/Apps Script/JS). Security-first, phase-aware engineering discipline with a spec→plan→TDD→verify workflow.
🎵 将音乐搬进AI终端 · 打造Coding专属智能DJ · 听歌新范式 · 交互式音乐 |A retro pixel DJ for Claude Code / Codex CLI / Terminal with Apple Music / QQ Music / Local Music — plays music, shows synced lyrics, and 😱 panics when your tests fail.