Skip to content

techempower-org/mempalace

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,744 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

MemPalace (techempower-org fork)

TechEmpower's production fork of MemPalace/mempalace (transferred from jphein/mempalace in May 2026)

Caution

🚨 CRITICAL SECURITY WARNING: BEWARE OF SCAMS (upstream notice)

MemPalace has NO other official websites.

The ONLY official sources are:

  1. The upstream GitHub repository and this fork's GitHub repository
  2. The PyPI package
  3. The docs at mempalaceofficial.com

ANY other domain (including .tech, .net, or other .com variants) is an impostor and may distribute malware. Do not download executables from untrusted sites. Details and timeline: docs/HISTORY.md.

Important

🚨 Claude Code sessions expire in 30 days w/out auto-save hooks wired! Read this →

Need the shortest recovery/setup path? Use the Claude Code retention setup checklist.

version-shield upstream-shield python-shield license-shield


What this is

A verbatim-first local AI memory system. This fork tracks upstream/develop through the v3.3.6 sync (2026-05-24, commit 6957c7e) and runs in production on a 335K+ drawer Postgres + pgvector + Apache AGE palace behind palace-daemon. It carries ~574 fork-ahead commits that compose with — not replace — bensig's release direction; the v3.3.5 release (2026-05-10) includes our co-authored _get_collection retry-once via upstream #1377. 3908 tests pass on main.

The fork's architectural thinking — the four-layer memory model, the verbatim-vs-derivative thesis, design principles, and the two-memory-layer pairing with Auto Dream — lives in docs/ARCHITECTURE.md. The new things here are what we've learned, not just what we've fixed.

Why this fork exists

We surveyed the memory-system landscape in April 2026 and found no verbatim-first local system with MCP. The landscape has since fragmented — MCP memory servers proliferated in May 2026 — but the verbatim-vs-derivative axis remains the clearest architectural dividing line. Updated survey as of 2026-05-24:

Verbatim-first systems

System Local? MCP? First public Notes
MemPalace (upstream) / techempower-org fork Yes Yes 2026-04-06 (v3.0.0) What we have. 335K+ drawers in production. Postgres + pgvector + AGE knowledge graph + BM25/vector/graph hybrid search. ~53K stars (upstream, 2026-05-28).
Longhand Yes Yes, 17 tools 2026-04-14 (v0.9.1) Closest cousin. Claude Code-specific — indexes ~/.claude/projects/*.jsonl verbatim. SQLite + ChromaDB. Deterministic file-state replay via stored diffs.
Celiums Yes (SQLite, Docker, or DO) Yes, 6 tools 2026-04-08 Full module text with PAD emotional vectors, importance scores, circadian metadata. 500K+ expert-module knowledge base alongside personal memory.
mcp-memory-service Yes (SQLite) or Cloudflare Workers Yes 2024-12-26 The long-standing verbatim option (v10.36.6). Turn-level storage; MiniLM local embeddings. REST API + MCP + OAuth + CLI + dashboard.
iai-mcp Yes (LanceDB) Yes ~2026 Three-layer: episodic (verbatim, write-once), semantic (consolidated summaries), procedural (stable preferences). Background sleep-cycle consolidation.
ai-memory Yes (SQLite FTS5) Yes, 43 tools ~2026 Rust binary. Three tiers with configurable TTL. Autonomous curator daemon (auto-tag, contradiction detection, dedup). Ed25519 attestation.
Open Brain (OB1) Yes (Postgres + pgvector, Docker) Yes, 10 tools ~2026 Separates raw data from embedding indexes — rebuild indexes without touching source. HNSW sub-ms vector search.

Extraction-based / derivative systems

System Local? MCP? First public Notes
claude-mem Yes (SQLite + ChromaDB) Yes ~2025-10 89K+ stars — largest community by far. AI-compressed summaries, not verbatim. "Endless Mode" for extended sessions.
Mem0 / OpenMemory Partial Yes 2023-06 ~48K stars. New 2026 algorithm: single-pass hierarchical extraction + multi-signal retrieval (91.6% accuracy). Opt-in infer=False for verbatim hard constraints. Graph Memory locked behind Pro.
Zep / Graphiti Partial (Neo4j/FalkorDB) Yes (Graphiti MCP v1.0) 2023 / 2024 ~22.8K stars. Temporal knowledge graph with dual timelines. 63.8% LongMemEval. Cloud Pro $99/mo+.
Letta (formerly MemGPT) Yes Partial (transitioning) 2023-10 ~22.8K stars. V1 architecture rework (Mar 2026) — heartbeats deprecated. New Letta Code (memory-first coding agent). Three-tier: core/recall/archival. MCP shifting from server-side to client-side skills.
Supermemory Cloud-first (Cloudflare Workers) Yes ~2024 22.7K stars. Fact extraction + graph. Dual-layer timestamps. Plugins for Claude Code, OpenCode, Hermes.
Cognee Yes Yes 2023-08 ~14.8K stars. "Memory control plane" via ECL pipeline. MCP with graph/RAG/code/cypher search modes. v1.1.0.dev1.
Hindsight Yes (Docker) Yes 2026-01-05 ~14K stars. v0.6.2. Three ops: retain/recall/reflect. Bank Template Hub, Constellation graph view. Fortune 500 production use.
CaviraOSS OpenMemory Yes Yes 2025-10-26 4.1K stars. TypeScript. Time-based filtering, connectors for GitHub/Notion/GDrive. Migration tools from Mem0/Zep/Supermemory.

Structured / hybrid approaches

System Local? MCP? First public Notes
agentmemory Yes (SQLite) Yes, 53 tools ~2026-04 9.4K stars. BM25 + vectors + KG via RRF. Confidence decay, auto-archival. 95.2% R@5 on LongMemEval-S.
EngramX Yes (SQLite) Yes 2026-04-11 v4.0 "Skill Pack" (May 2026). Context spine intercepts file reads — ~89% token reduction. 8 IDEs. Bi-temporal mistake prevention. 3-layer cache (23us/op).
EverOS / EverMind Yes (Docker) Yes ~2025 SOTA on LoCoMo (93.05%), LongMemEval-S (83.0%). Three-phase lifecycle: episodic → semantic → reconstructive. Multimodal.
OMEGA Yes (SQLite + ONNX) Yes, 25 tools ~2026-03 95.4% LongMemEval. Zero external deps. AES-256-GCM encryption at rest. Open-core (Apache 2.0 core; Pro for multi-agent).

Academic / not-yet-shipped

System Notes
True Memory arXiv 2026-05. Six-layer verbatim-first architecture. 93.0% LoCoMo, 87.8% LongMemEval, 76.6% BEAM-1M. Argues "extraction at ingestion is the wrong primitive" — independent validation of the verbatim thesis. No code release yet.

Notable shifts since April 2026

  • The verbatim thesis has academic validation. True Memory (arXiv:2605.04897) independently argues that extraction at ingestion is the wrong primitive, scoring 93.0% on LoCoMo vs Mem0's 61.4%. New entrants iai-mcp and ai-memory both chose verbatim-first designs, suggesting the pattern has reached broader adoption.
  • claude-mem (89K+ stars) is the elephant in the room. Explicitly non-verbatim (AI compression), but its community size makes it the default comparison point. The largest system taking the opposite architectural approach.
  • Letta V1 rework (Mar 2026) deprecates heartbeats and server-side MCP. MCP support is shifting to client-side skills; the story is less clear-cut than before.
  • Mem0 shipped a significant algorithm upgrade (single-pass hierarchical extraction + multi-signal retrieval → 91.6%) without going verbatim. Added opt-in infer=False for verbatim hard constraints — an escape hatch, not a core commitment.
  • MCP memory server space fragmented dramatically. At least 6 new systems with MCP support since April: agentmemory, OMEGA, ai-memory, iai-mcp, Open Brain, EngramX v4.0. Most are local-first SQLite. Differentiators narrowing to verbatim-vs-extraction and consolidation strategy.

The April-2026 verbatim cluster (MemPalace, Celiums, Longhand, engram all within ~8 days) is no longer an isolated coincidence — it was the leading edge of a pattern now confirmed by academic work and a second wave of implementations. The differentiator: verbatim storage is the foundation; everything else (tags, KG, decay, summaries, consolidated indices) is enrichment layered on top.

Quickstart

git clone https://github.com/techempower-org/mempalace.git
cd mempalace
uv sync --extra dev          # recommended; or: python -m venv venv && pip install -e ".[dev]"

uv run mempalace init ~/Projects --yes
uv run mempalace mine ~/Projects/myproject
uv run mempalace search "why did we switch to GraphQL"

For a daemon-fronted deployment (recommended once palace size reaches the multi-thousand-drawer range), see palace-daemon's setup. The fork's scripts/deploy.sh is a one-command Syncthing-aware redeploy: push fork main, restart palace-daemon, post-restart import-check that the new fork-ahead surface is loaded.

What it looks like in production

A Stop hook fires every 15 messages in Claude Code, triggers verbatim transcript mining via the daemon's /mine endpoint (no LLM in the loop), and renders a terminal line so the user sees the ingest land:

{"systemMessage": "✦ Transcript ingest triggered (wing=wing_realmwatch)"}

search_memories (via mempalace_search MCP tool) returns results with scope-authoritative context so callers can tell when the vector layer underdelivered:

{
  "query": "kiyo xhci usb crash fix razer",
  "total_before_filter": 15,
  "available_in_scope": 160351,
  "warnings": [],
  "results": [
    {"drawer_id": "drawer_kiyo-xhci-fix_technical_a8b2c4...", "wing": "projects",
     "room": "technical", "similarity": 0.859, "matched_via": "drawer", ...},
    {"drawer_id": "drawer_kiyo-xhci-fix_technical_d5e7f9...", "wing": "kiyo-xhci-fix",
     "room": "technical", "similarity": 0.852, "matched_via": "drawer", ...}
  ]
}

When the HNSW index is genuinely degraded (rare, post-fix), the same call returns warnings: ["vector search returned 0 of 5 requested; filled 5 from sqlite+BM25 keyword match"] with hits tagged "matched_via": "sqlite_bm25_fallback" — data is never silently hidden.

Current state

Substrate (2026-05-15). Postgres + pgvector + Apache AGE shipped on main and serving production traffic. PG16 + pgvector 0.8.2 + AGE 1.6.0 on familiar.jphe.in:5433. One engine consolidates vector search, full-text search (tsvector BM25), graph traversal, and the temporal entity-relationship store — previously four separate systems (ChromaDB + SQLite + graph cache). 8/9 bench suites pass. Full operator narrative at docs/operators/pgvector-cutover-runbook.md.

AGE integration (2026-05-22). PR #101 merged — six-phase AGE integration complete. Writethrough middleware on every drawer write extracts entities and creates :MENTIONS edges in the AGE graph. Backfill running against 335K+ existing drawers at ~5/s. The mempalace_walk_palace MCP tool enables Cypher traversal by wing, room, or entity. A 2026-05-17 spike showed graph signal adds +9pp R@5 over vector-only retrieval.

Hybrid retrieval (2026-05-24). candidate_strategy="hybrid" (vector ∪ tsvector BM25 ∪ AGE graph-expanded candidates, hybrid-reranked) is now the MCP default for all callers.

What this fork ships

Three bands of work, all instances of the architectural principles. Detail rows in the fork change inventory and FORK_CHANGELOG.md.

  • Structural retrieval fixes. Verbatim-only model: hooks no longer write 1KB checkpoint summaries; auto-mined transcript chunks land in mempalace_drawers and mempalace_search reaches them directly. One collection, one search path, no kind-filter / over-fetch hack.
  • Single-writer architecture. palace-daemon is the only process that opens the palace; clients connect over HTTP. ChromaDB HNSW concurrency hazards become structurally impossible.
  • Deterministic hook saves. Silent saves bypass auto-memory conflicts — the LLM is no longer in the save path. Verbatim transcript ingest is the entire save path.

Planned work

Organized around the verbatim-vs-derivative axis. Each item evaluated against the architectural principles.

ID What Status Tracking
P0 Multi-label tags (3-8 per drawer, TF-IDF extraction) Shipped (auto-extract on write + length/count caps) Fork-side; see FORK_CHANGELOG.md
P1 Derive hierarchy from unambiguous signals (cwd, transcript path) Open Fork-side
P2 Decay / recency weighting (Weibull) Shipped (recency-decay search weighting + prune --stale-days) Fork-side; rerank also tracked upstream
P3 Feedback loops (rerank + rating MCP tool) Shipped (mempalace_rate_memory + bounded rating signal); rerank tracked upstream Fork-side; see FORK_CHANGELOG.md
P4 KG auto-population + entity resolution Shipped 2026-05-22 PR #101
P5 Temporal fact validity (SPOC context slot) Open, depends on P4
P6 Input sanitization on writes Low priority while local-only
P7 Alternative storage modes Shipped (pgvector+AGE) RFC 001 #743
P8 Corpus partitioning by purpose On hold Design doc

Active investigations

  • End-to-end QA measurement on the post-structural-fix palace — the "17% E2E QA" attribution to engram-2 in earlier drafts was not substantiated in their published materials; the corpus-shape pathology it surfaced (checkpoint domination of mempalace_search results, pre-migration kind=content returning 3 tokens/Q vs post-migration 1,267) is real and is closed. Results published in notebook/data/cat9-postmigrate-e2e/REPORT.md: on LongMemEval oracle (n=500, reader o4-mini / judge gpt-5.3-chat), the default /search path scores 97.0% R@5 and 60.40% E2E QA — a +38.4pp retrieval→answer gap that locates the open work in consumption, not retrieval. (age-fused 17.60% is a known-broken-harness reading — snippet-width starvation + empty triples layer — not a verdict on graph fusion.)
  • Cat 9 / The Handshake — generalizable measurement of the retrieval→consumption gap. 46.67% / 78.33% on RLM-vs-Familiar. Scaling across the verbatim-first cohort via jphein/multipass-structural-memory-eval.
  • Multi-palace separation — curated "authority" vs auto-mined memory (upstream #1018). P8 may absorb. Design doc.

Composition with upstream

A meaningful shift in 2026-04 and 2026-05: this fork increasingly composes with upstream rather than carrying parallel implementations.

  • Cherry-picks (in-flight upstream PRs we use early): #665 PostgreSQL backend (commit 5e90c72, the substrate work above), #1085 batched inserts (6be6fff — CLOSED 2026-05-16, superseded by merged #1185; safe to drop on next sync), #1087 rewrite cmd_purge via delete(where=) (366a9ad), #1094 None-metadata coercion (43d728d).
  • Co-authored merges: #1377 (surgical _get_collection retry-once, shipped in v3.3.5 — originated from this fork via #1286 which igorls closed and re-extracted with Co-authored-by credit).
  • Coordinated reviews: #1199 (rmdes' unbounded-ingest fix), #1219 (pepo72's drawer_id), RFC 001 #743 (storage backend spec).
  • Closed in favor of upstream: #1171 cross-process write lock (closed 2026-04-25 — Felipe's #976 plus daemon-strict architecture obsoleted ours).

The fork ships structural moves first, validates them on the canonical palace, then either contributes upstream as PRs or aligns with upstream's parallel implementation. The composition is the point.

Ecosystem

Four peer builds converged on the same architectural agreements as this fork (verbatim base layer, no LLM in index path, wings as scope routing, consumption problem unsolved by retrieval): Familiar (78.33% recall), CampaignGenerator (19.82x cost reduction), Kent (APO training), adaptmem (orthogonal encoder lift). The multipass-structural-memory-eval framework provides the Cat 9 / Handshake diagnostic.

Full inventory of companion tools, evaluation frameworks, competing systems, peer builds, and active forks in docs/ECOSYSTEM.md.

Open upstream PRs

Open from this fork as of 2026-05-24. Run gh pr list --repo MemPalace/mempalace --author jphein --state open for the live list. Recently merged: #1142 (RELEASING.md, 2026-05-22), #1494 (recovery runbook, 2026-05-22), #1487 (rebuild_index progress, 2026-05-13), #1024 (configurable chunking, 2026-05-15), #1459 (empty-metadata sentinel, 2026-05-13) and #1474 (convo_miner bulk pre-fetch, 2026-05-13).

PR Status Description
#660 CI green, awaiting review L1 importance pre-filter
#1005 CI green, Dialectician-acked Warnings + sqlite BM25 top-up — never silently return fewer results than scope contains
#1086 CI green, awaiting review mempalace export CLI wrapper
#1087 CI green, rewritten 2026-04-26 per @igorls's review mempalace purge --wing/--room via delete(where=) (no nuke-and-rebuild)
#1094 CI green, awaiting review Coerce None metadatas to {} at ChromaCollection boundary
#1378 CI green Hoist CLOSET_RANK_BOOSTS to module level + record VecRecall ablation finding
#1382 CI green Benchmarks UTF-8 encoding + ASCII print chrome on Windows
#1484 CI pending OpenCode source adapter on RFC 002 contract — co-authored with @JakobSachs
#1508 CI pending symbol_header_prefix kwarg in chunk_text

What's next

  • Publish Cat 9 end-to-end results on the post-migration palace, with adapter parity numbers across the verbatim-first cohort.
  • Publish the multipass-structural-memory-eval harness with adapters for MemPalace, Longhand, Celiums, mcp-memory-service.
  • Land P1 (derive hierarchy from cwd / transcript path) and P5 (temporal fact validity) — the remaining open planned-work items; P0 (tags), P2 (decay/recency), and P3 (rating feedback) have shipped fork-side.
  • Agent-shaped CLI surfaceshipped. A fast direct-to-daemon CLI quartet — mempalace list, mempalace graph, mempalace cypher, mempalace stats — each with --json/--format json for non-MCP integration. These skip the MCP/AI round-trip and hit the daemon directly, so they're faster than the equivalent tool call. Prior art: Grafana's GCX CLI.
  • First-class support across AI coding agents — Claude Code, OpenCode, Cursor, Aider, Gemini CLI, Codex CLI, Warp. Path: upstream's RFC 002 source-adapter spec. Three cells: read (MCP, already agent-agnostic), mine (per-agent via RFC 002), hook/event (per-host or mining-on-cron fallback).

Setup / Development

# Setup
git clone https://github.com/techempower-org/mempalace.git
cd mempalace
uv sync --extra dev                       # recommended; or pip install -e ".[dev]"

# Develop
uv run pytest tests/ -q                   # 3498 tests (benchmarks deselected)
uv run mempalace status                   # palace health
uv run ruff check . && uv run ruff format --check .

# Doc maintenance (canonical YAML + renderer, see CLAUDE.md)
./scripts/render-docs.py                  # regenerate FORK_CHANGELOG from docs/fork-changes.yaml
./scripts/check-docs.sh                   # lint test count, fork hashes, render parity, upstream PR states

# Deploy fork main → palace-daemon on familiar.jphe.in:8085
./scripts/deploy.sh                       # one command: push, sync, restart, health, import-check

Fork change inventory

The full enumeration of fork-ahead changes. The canonical source is docs/fork-changes.yaml; FORK_CHANGELOG.md is regenerated from it and contains the complete open/pending table. Run ./scripts/check-docs.sh to verify everything resolves to live state.

Fork-change queue

# Description Upstream PR Fork commit
1 auto_wake: opt-in wake-on-demand for a sleeping palace-daemon host (wake command + /health poll + single retry) TBD
2 AGE graph-walk: auto edge-endpoint indexes in backfill + bind anonymous RELATION targets (MemPalace#335) TBD
3 pluggable adaptmem_ft encoder backend selectable via MEMPALACE_EMBEDDING_MODEL (closes #308) 5fba6d8
4 README.md landscape table — refresh upstream MemPalace star count from ~23K → ~53K (current 2026-05-28) TBD
5 README.md + docs/ECOSYSTEM.md — soften 'engram-2 17% E2E QA' framing per the 2026-05-24 research doc's unsubstantiated finding (#319) ddf00b4
6 kg_llm_extractor rewrites AGE dollar-quote tag in triples so drawers indexing palace source code don't fail at add_triple (#313) 3fb9428
7 scripts/maintain-fork-changes.py + ship-prep step 1: resolve commit:HEAD placeholders and de-dup yaml entries (#316) 9060e09
8 scripts/ship-prep.sh — one command bumps README test count and runs all three doc renderers (#312) 4677db8
9 mempalace_search MCP input schema accepts fusion_mode (convex|rrf) and forwards to search_memories (#302) f753ec4
10 scripts/check-docs.sh finds pytest via main checkout when run from a worktree, fails hard instead of silently skipping test-count check (#311) 1d19a8b
11 kg_triple_worker retries add_triple within-worker on transient psycopg errors instead of abandoning to lease-reclaim (#298) 36c0b02
12 mempalace_kg_stats returns structured backend-unavailable envelope on transient psycopg failures (#299) 8fd0b01
13 mempalace why + tunnels — explain a drawer + inventory cross-wing tunnels (slice of #191) fdcd0b4
14 RRF vs convex-blend rerank — A/B measurement on our corpus (#162) ea5d567
15 KG triples gain SPOC context slot + worker auto-derives valid_from from drawer metadata (#161) b87ce05
16 mempalace bulk-move — multi-drawer metadata relocation by source wing/room (#191) 1ca544b
17 mempalace move — fast direct-to-daemon single-drawer wing/room relocation (#191) d007b6f
18 mempalace stats migrates to GET /stats REST + exposes graph/status sections (#191) 853bb25
19 mempalace cypher — read-only Cypher query CLI (#191) 32a41b1
20 mempalace graph — fast direct-to-daemon KG structural snapshot (#191) 499f42d
21 mempalace list — fast direct-to-daemon drawer browser (#191) 257137b
22 Recency decay weighting in search + mempalace prune --stale-days CLI (#158) 558d327
23 mempalace_rate_memory MCP tool + bounded rating signal in search ranking (#159) 583536c
24 Formalize wing/room derivation order; demote entity detector to last-resort hint (#157) TBD
25 RRF fusion mode + convex-vs-RRF A/B harness (#162) #247 6c9d10c
26 mempalace stats: add ROOMS breakdown (drawer count by room) to the dashboard 1673465
27 Calibrated confidence field on search results + Brier-score eval column TBD
28 Evaluation doc: curated-authority vs auto-mined separation (#202) TBD
29 Apply AGE statement_timeout in same transaction as cypher() (PR #228 follow-up) TBD
30 LLM-based KG triple extraction: queue table, async worker, llama.cpp on familiar 59ac0bc
31 Promote verbatim-vs-derivative essay from research/ to README (#170) 6a264d9
32 mempalace stats — palace analytics dashboard (#191) 6f994fb
33 CLI wiring: mempalace mine --source (#57) 5ed9fa7
34 Warp terminal source adapter (#62) 2e85585
35 OpenCode adapter smoke test against real DB (#56) a9ed72b
36 Codex, Gemini, and Aider source adapters (#61, #59) 0c23165
37 Filesystem + conversation source adapters (#63) 9a1facf
38 Widen auto-query signal patterns for natural recall phrases 33e780e
39 Native rename_wing backend operation + CLI command (#154) d045f83
40 Standalone essay: the verbatim-vs-derivative axis (#47) TBD
41 Research doc: uncertainty-aware retrieval analysis (#84) TBD
42 Design doc: scope/collection filter on mempalace_search (#76) TBD
43 Agent-shaped CLI surface — --json / --quiet for non-MCP integration 25ed900
44 Design eval: multi-palace separation — curated vs auto-mined (#45) TBD
45 Document .sh shim delegation to palace-daemon (counter-position to upstream #1069) bf0a4d0
46 Honor ~/.mempalace/RETIRED marker — refuse default palace, surface retire message 798cf14
47 Empty repo .opencode/opencode.json mcp block — disabled flag wasn't being respected 7133eee
48 Drop $comment from .opencode/opencode.json — schema rejects unknown root keys 637bb01
49 Disable repo-level MCP entry by default + venv-python fallback 47018e5
50 Stub resources/list + prompts/list so MCP clients stop ERROR-logging on connect 6ca0670
51 Bundled OpenCode live-capture plugin that bypasses option-K v1.2.1 bugs (filed upstream as #4, #5) 5522623
52 Documented OpenCode integration recipe (read-side MCP + push plugin + retrospective adapter) 60dc9e6
53 .opencode/opencode.json — repo-root MCP config so opencode picks up mempalace automatically #1567 (OPEN) ba16b82
54 OpenCodeSourceAdapter (RFC 002) — retrospective ingest of OpenCode SQLite sessions #1484 (OPEN) 2ffe652
55 mempalace_walk_palace MCP tool — agent walks the palace via AGE Cypher 8022ecb
56 Backfill AGE graph from existing drawer table — restartable, checkpointed b3f0206
57 Wing/Room/Drawer hierarchy as native AGE nodes; Cypher MATCH walks palace structure ff583c0
58 Write-through middleware on PostgresCollection — entities populate AGE on every drawer write 3321d83
59 KnowledgeGraphAGE API parity with SQLite KG: add_entity, invalidate, query_entity, query_relationship, timeline, seed_from_entity_facts ff7187d
60 Pending-writes journal + replay so daemon outages stop being silent 0c34464
61 MCP server distinguishes 'backend unreachable' from 'no palace found' 0c34464
62 Defense-in-depth metadata sanitizer at the chromadb-client chokepoint f499814
63 Route Stop/PreCompact hooks through palace-daemon/clients/hook.py 42ded2e
64 KnowledgeGraphAGE skeleton — Apache AGE graph bootstrap over psycopg2 a3ee623
65 README pivots to the four-layer model + Auto Dream as vindication of the verbatim-vs-derivative axis 55b36ca
66 CI: gate postgres-backend tests against a pgvector service container da0bdbb
67 PostgreSQL backend via #665 cherry-pick + fork-side adaptations + smoke tests #665 (OPEN) 5e90c72
68 daemon-route mempalace status / search / mine when PALACE_DAEMON_URL is set 22ef562
69 daemon-route mcp_server.py via the handle_request JSON-RPC chokepoint 41359ba
70 Preserve dashed project names in transcript-derived wings #10 d76134d
71 Drop wing_ prefix from transcript-derived wings to converge with operator mines #9 86d4700
72 Retire mempalace_session_recovery collection + read tool #8 0b945e1
73 mempalace mined + purge --source-file (mining management surface) #7 2e6ced9
74 Drop hook-side checkpoint diary writes — verbatim-only architecture #6 69768fc
75 Restore transcript ingest via daemon /mine when PALACE_DAEMON_URL is set #2 09d2ca6
76 hook_verbatim_mode config flag preserves system tags + full tool I/O during transcript ingest ef98961
77 Retire the kind= filter — structural split made it inert 7ba28dc
78 Hoist CLOSET_RANK_BOOSTS to module level + record VecRecall ablation finding 3cb03f3
79 Strip embedded API key from .claude-plugin/ manifests; rely on env inheritance 9f91e18
80 Cherry-pick #1094 — coerce None metadatas at chromadb boundary #1094 (OPEN) 43d728d
81 Cherry-pick #1087 rewrite — collection.delete(where=) instead of nuke-and-rebuild #1087 (OPEN) 366a9ad
82 Canonical YAML manifest + renderer for fork-ahead docs 5a01aec
83 Phase D migration + PreCompact recovery write 42817d7
84 Surface drawer_id in search/diary/recovery payloads 9a8bb77
85 Cherry-pick #1085 — batch ChromaDB inserts in miner (10–30× faster) #1085 (CLOSED) 6be6fff
86 scripts/deploy.sh — one-command Syncthing-aware redeploy 8252025
87 Phases A–C of the checkpoint collection split e266365
88 kind= filter on search_memories excludes Stop-hook checkpoints (transitional) f9f5cc4

Recently merged into upstream

  • 2026-05-22: #1142 (docs/RELEASING.md), #1494 (recovery runbook for chromadb dimensionality=None corruption)
  • 2026-05-15: #1024 — Configurable chunk_size / chunk_overlap / min_chunk_size exposed via MempalaceConfig
  • 2026-05-13: #1487 (rebuild_index progress callback), #1459 (empty-metadata sentinel), #1474 (convo_miner bulk pre-fetch)
  • 2026-05-06 (in v3.3.5): #1377_get_collection retry-once + log-on-failure (co-authored from this fork via the closed #1286)
  • 2026-05-01 (post-v3.3.4): #1262, #1289, #1303
  • 2026-04-26: #1173, #1177, #1198, #1201
  • 2026-04-23: #659 — diary wing parameter
  • 2026-04-22: #661, #673, #1021
  • 2026-04-21 (in v3.3.2): #1000, #1023, #681
  • 2026-04-18: #999 — None-metadata guards across 8 read paths
  • In v3.3.0: #664, #682, #683, #684, #635 (via #667)

Closed (superseded or withdrawn)

  • #1085 (cherry-pick — closed by @midweste 2026-05-16, superseded by merged upstream #1185)
  • #1286 (drifted; @igorls closed and re-extracted the surgical fix as #1377 with co-author credit)
  • #1171 (cross-process write lock — superseded by #976 + daemon-strict)
  • #1146, #1115, #629, #632, #662, #663, #738, #1036 — all superseded

Sources

Synthesis and research

See docs/BIBLIOGRAPHY.md for the complete documentation index and external references.

License

MIT — see LICENSE.

About

Production fork of MemPalace. Verbatim-first AI memory, 335K+ drawers on Postgres + pgvector + Apache AGE. The verbatim-vs-derivative axis is the design test.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Python 95.4%
  • Shell 1.6%
  • HTML 1.3%
  • CSS 0.9%
  • Vue 0.4%
  • JavaScript 0.3%
  • TypeScript 0.1%