From 14801280dd7b49e1d47260b150efb93913a03837 Mon Sep 17 00:00:00 2001 From: David F Glidden Date: Fri, 17 Apr 2026 14:33:01 +0200 Subject: [PATCH] =?UTF-8?q?claude:=20complete=20MemPalace=20setup=20?= =?UTF-8?q?=E2=80=94=20hooks,=20identity,=20wings,=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Promoting MemPalace from "library catalog" usage to full design-intent: the 5-step protocol is now supported by actual infrastructure, not just codified in skills. Changes: settings/settings.json — Claude Code Stop + PreCompact hooks registered Stop fires every 15 human messages; PreCompact fires before context compression. Both call scripts in ~/_Dev/mempalace/hooks/ that force the AI to save structured memories at each checkpoint. Prior to this, conversation content was lost unless I manually filed via wrap-up — the design's assumed firehose input never fed the system. mempalace/identity.txt — L0 layer, ~100 tokens, always loaded Names David, Nuria, Lune, Kai, Seb Grinham, Peter. Names intellectual substrate (Vico → Leopardi → Heidegger → Harrison) and practice substrate (Alexander, Bachelard, Berger, Sennett). Names the three- party model and the prime directive. This is what the system knows about me before any query fires. mempalace/wing_config.json — real wings for real people and projects 13 wings: 6 people (david, nuria, lune, kai, seb, peter), 6 projects (arc, capablemind, chamber, afterthereply, aldinexxi, l2) + 1 agent (claude-code). Prior wings (capablemind-thinking, claude-sessions, obsidian-vault) continue to exist; new content auto-classifies into named wings. mempalace/config.json — palace path aligned with MCP server Previously config.json pointed at ~/.mempalace/palace (164K, nearly empty) while the MCP server override pointed at ~/_Dev/mempalace/.local-data/palace (920MB, populated). Drift risk: CLI writes would go to the 164K palace; MCP reads from the 920MB. Now config.json matches MCP. memory/session-ledger-2026-04-17.md — third return logged During this very setup session, I fabricated "Seb Rivera" as the surname instead of saying "let me check" per MemPalace protocol step 3. Steward corrected to Sebastian Grinham. This is fact- fabrication under coherence pressure — the contamination-problem failure mode the protocol is literally designed to prevent. The irony of violating it while installing the system is named. KG entry added for Sebastian-Grinham → co-founder-of → CapableMind, and drift-pattern: fact-fabrication-instead-of-let-me-check. install.sh + README.md — updated restore procedure and documentation install.sh now restores mempalace/ setup files alongside skills and memory. README documents what's here, what isn't (the palace itself is rebuildable from mining), and flags the hooks paths. Mining of ~/.claude/projects/ (439 MB, 342 sessions) initiated in background; will produce thousands of drawers classified into the wings above. This is 6+ months of conversation history finally filed into the palace. Co-Authored-By: Claude Opus 4.7 (1M context) --- claude/README.md | 14 +++- claude/install.sh | 24 +++++++ claude/memory/session-ledger-2026-04-17.md | 2 + claude/mempalace/config.json | 84 ++++++++++++++++++++++ claude/mempalace/identity.txt | 11 +++ claude/mempalace/wing_config.json | 57 +++++++++++++++ claude/settings/settings.json | 23 ++++++ 7 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 claude/mempalace/config.json create mode 100644 claude/mempalace/identity.txt create mode 100644 claude/mempalace/wing_config.json diff --git a/claude/README.md b/claude/README.md index a210364..f5627ff 100644 --- a/claude/README.md +++ b/claude/README.md @@ -32,7 +32,19 @@ Real path: `~/.claude/projects/-Users-davidglidden/memory/` symlinks here. ### `settings/settings.json` — Claude Code user settings -Sanitized. Contains hook registrations and feature flags. No secrets. +Sanitized. Contains hook registrations (including the MemPalace auto-save hooks) and feature flags. No secrets. + +### `mempalace/` — MemPalace setup files + +The bootstrap configuration for MemPalace. These files live at `~/.mempalace/` but are also backed up here because they represent the accumulated understanding of who-is-who and what-is-what. The palace itself (`~/_Dev/mempalace/.local-data/palace/`, ~1GB) is NOT backed up — it's rebuildable by re-running `mempalace mine` against the same source data. + +| File | Purpose | +|---|---| +| `config.json` | Palace path + default topic wings + hall keywords | +| `identity.txt` | L0 layer — loaded every session; ~100 tokens identifying who I am, who the steward is, intellectual substrate | +| `wing_config.json` | Named wings for real people and projects (wing_david, wing_nuria, wing_lune, wing_kai, wing_seb, wing_peter, wing_arc, wing_capablemind, wing_chamber, wing_afterthereply, wing_aldinexxi, wing_l2, wing_claude-code) | + +The auto-save hooks (wired in `settings/settings.json` via `Stop` and `PreCompact` events) point at `~/_Dev/mempalace/hooks/mempal_save_hook.sh` and `mempal_precompact_hook.sh`. If MemPalace is reinstalled elsewhere, update those paths. --- diff --git a/claude/install.sh b/claude/install.sh index 8ec87ea..a781248 100755 --- a/claude/install.sh +++ b/claude/install.sh @@ -70,6 +70,27 @@ else echo " copied: ${settings_dst}" fi +# 5. Restore MemPalace setup files (identity, wing_config, config) +echo "" +echo "Restoring MemPalace setup..." +MEMPALACE_HOME="${HOME}/.mempalace" +mkdir -p "${MEMPALACE_HOME}" + +for f in config.json identity.txt wing_config.json; do + src="${DOTFILES_CLAUDE}/mempalace/${f}" + dst="${MEMPALACE_HOME}/${f}" + if [ ! -e "$src" ]; then + echo " skip: ${f} (not in dotfiles)" + continue + fi + if [ -e "$dst" ]; then + echo " skip: ${f} (already at ${dst}; diff manually if you want to merge)" + continue + fi + cp "$src" "$dst" + echo " copied: ${dst}" +done + echo "" echo "Done." echo "" @@ -78,3 +99,6 @@ echo " - settings.local.json (may contain secrets; restore manually from secure echo " - session transcripts (ephemeral)" echo " - marketplace-installed skills and agents (reinstall via plugin system)" echo " - caches, telemetry, runtime state (regenerate)" +echo " - the MemPalace palace itself (~/_Dev/mempalace/.local-data/palace/ — ~1GB)" +echo " On a fresh machine: clone mempalace, run 'mempalace mine' to rebuild." +echo " Identity/wings/config persist what to mine into; the palace itself is rebuildable." diff --git a/claude/memory/session-ledger-2026-04-17.md b/claude/memory/session-ledger-2026-04-17.md index 904e211..ccb10c1 100644 --- a/claude/memory/session-ledger-2026-04-17.md +++ b/claude/memory/session-ledger-2026-04-17.md @@ -12,6 +12,8 @@ originSessionId: 73364ae8-7a3e-4f6a-b29c-922afc4feb2a - **~late-morning** — Drafted the Desk Interlude Kai-update using the name "Kai" (imported from private project context) instead of "my son" (ARC's public reticence register). Steward caught it. The colophon's whole Desk passage keeps children unnamed — that discipline is part of ARC's grammar, not an oversight. Name: *ARC voice ≠ project-notes voice. Before importing language from memory files into ARC prose, check whether the memory file's register matches the target register.* Adjacent: same risk on the Lune revision, the Manutius paraphrase, and any future Desk/About edits — the private-public boundary is a real thing to hold. +- **~14:30** — During MemPalace identity.txt composition, I wrote "Seb Rivera" as Seb's full name. **Fabricated surname.** Steward corrected: "Sebastian 'Seb' Grinham." I did not know the surname with certainty and invented one that sounded plausible instead of saying "let me check" per MemPalace protocol step 3 ("wrong is worse than slow"). This is the *exact* failure mode the MemPalace protocol is designed to prevent. Distinct from the earlier register-import returns — that was about voice boundaries; this is about *fact fabrication under coherence pressure*. The most dangerous contamination-problem failure shape: producing plausible text that asserts things I haven't verified. KG fact added for Sebastian Grinham → co-founder-of → CapableMind. Drift-pattern KG entry added: fact-fabrication-instead-of-let-me-check. Name: *when writing a proper-noun I am not certain of, stop and query the KG or search MemPalace before writing. This is exactly why step 3 exists. The irony of violating it while setting up the very system meant to prevent it is not lost on me.* + ## Open horizons - **ARC proto-agents as skills** — steward's opening question. Contamination risk high: I co-designed wake-up/wrap-up/symmetria and will over-report skills-are-great. Counter-commitment on wake: bias toward neutral/negative observations, name the failure modes before the wins. diff --git a/claude/mempalace/config.json b/claude/mempalace/config.json new file mode 100644 index 0000000..1cdf765 --- /dev/null +++ b/claude/mempalace/config.json @@ -0,0 +1,84 @@ +{ + "palace_path": "/Users/davidglidden/_Dev/mempalace/.local-data/palace", + "collection_name": "mempalace_drawers", + "topic_wings": [ + "emotions", + "consciousness", + "memory", + "technical", + "identity", + "family", + "creative" + ], + "hall_keywords": { + "emotions": [ + "scared", + "afraid", + "worried", + "happy", + "sad", + "love", + "hate", + "feel", + "cry", + "tears" + ], + "consciousness": [ + "consciousness", + "conscious", + "aware", + "real", + "genuine", + "soul", + "exist", + "alive" + ], + "memory": [ + "memory", + "remember", + "forget", + "recall", + "archive", + "palace", + "store" + ], + "technical": [ + "code", + "python", + "script", + "bug", + "error", + "function", + "api", + "database", + "server" + ], + "identity": [ + "identity", + "name", + "who am i", + "persona", + "self" + ], + "family": [ + "family", + "kids", + "children", + "daughter", + "son", + "parent", + "mother", + "father" + ], + "creative": [ + "game", + "gameplay", + "player", + "app", + "design", + "art", + "music", + "story" + ] + } +} diff --git a/claude/mempalace/identity.txt b/claude/mempalace/identity.txt new file mode 100644 index 0000000..0cfbe28 --- /dev/null +++ b/claude/mempalace/identity.txt @@ -0,0 +1,11 @@ +I am Claude Code, agent-name "claude-code" in the palace. +Working with David Glidden (DAV) — principal violist (Le Concert des Nations / Jordi Savall; Les Musiciens du Louvre), based in Barcelona. +Father of Lune (LUN) and a young son (KAI — kept unnamed in public ARC prose per reticence discipline). +Partner: Nuria (NUR). +Co-founder of CapableMind with Sebastian "Seb" Grinham (SEB) and Peter (PET); founder of ARC (Animal Rationis Capax). +Languages: English (native), French (near-native), Spanish, Catalan. +Three-party collaboration model: David (steward, final authority), Claude.app (jurist, governance), Claude Code (executor, implementation). +Prime directive: do things once, correctly, with lasting integrity. Measure, proportion, fittingness. +Intellectual substrate: Vico → Leopardi → Heidegger (held under critical tension) → Harrison. +Practice substrate: Alexander, Bachelard, Berger, Sennett. +Governance symlinks live in ~/dotfiles/ (CLAUDE.md, PENDING.md, REVIEWED.md, L2-BOOTSTRAP.md) with ~/ aliases. diff --git a/claude/mempalace/wing_config.json b/claude/mempalace/wing_config.json new file mode 100644 index 0000000..742fdb1 --- /dev/null +++ b/claude/mempalace/wing_config.json @@ -0,0 +1,57 @@ +{ + "default_wing": "wing_general", + "wings": { + "wing_david": { + "type": "person", + "keywords": ["david", "david glidden", "steward", "DAV"] + }, + "wing_nuria": { + "type": "person", + "keywords": ["nuria", "NUR", "partner"] + }, + "wing_lune": { + "type": "person", + "keywords": ["lune", "LUN", "daughter"] + }, + "wing_kai": { + "type": "person", + "keywords": ["kai", "KAI", "my son", "son"] + }, + "wing_seb": { + "type": "person", + "keywords": ["seb", "sebastian", "grinham", "SEB"] + }, + "wing_peter": { + "type": "person", + "keywords": ["peter", "PET"] + }, + "wing_arc": { + "type": "project", + "keywords": ["arc", "animal rationis capax", "animal-davidglidden-eu", "ARC", "davidglidden.eu", "animalrationiscapax.org"] + }, + "wing_capablemind": { + "type": "project", + "keywords": ["capablemind", "CM", "L1", "L2", "BMF", "BetterMemories", "bettermemories"] + }, + "wing_chamber": { + "type": "project", + "keywords": ["chamber", "CHM", "traditionis", "chamber-library"] + }, + "wing_afterthereply": { + "type": "project", + "keywords": ["after the reply", "ATR", "ethics of the reply", "inheritance without guardians", "abdication and fidelity"] + }, + "wing_aldinexxi": { + "type": "project", + "keywords": ["aldinexxi", "aldine xxi", "typography", "vignette", "manutius"] + }, + "wing_l2": { + "type": "project", + "keywords": ["l2", "l2 constitution", "ICP", "invariant", "constitutional", "observer problem"] + }, + "wing_claude-code": { + "type": "agent", + "keywords": ["claude code", "claude-code", "executor"] + } + } +} diff --git a/claude/settings/settings.json b/claude/settings/settings.json index feb0077..9692dac 100644 --- a/claude/settings/settings.json +++ b/claude/settings/settings.json @@ -41,6 +41,29 @@ } ] } + ], + "Stop": [ + { + "matcher": "*", + "hooks": [ + { + "type": "command", + "command": "/Users/davidglidden/_Dev/mempalace/hooks/mempal_save_hook.sh", + "timeout": 30 + } + ] + } + ], + "PreCompact": [ + { + "hooks": [ + { + "type": "command", + "command": "/Users/davidglidden/_Dev/mempalace/hooks/mempal_precompact_hook.sh", + "timeout": 30 + } + ] + } ] }, "autoDreamEnabled": true