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