Skip to content

Memory Architecture

Ruling: Michael, 2026-06-11 (Option A — consolidate). Resolves the disjointed-memory finding of 2026-06-10: five memory locations had accreted with no map. Three surfaces remain; one is dissolved; transcripts are excluded.


The Three Surfaces

SurfaceLocationContentsWriterReaders
Vault memorymemory/hinata-state.md (push timestamp) + memory_[cli].md per-CLI re-attach files (claude-code, codex, gemini, antigravity, cloud)Each CLI writes only its own memory_[cli].md via /handover; hinata-state.md written by push hooksAll CLIs, session-start hooks, Z2 via /opt/hinata-vault clone
Commander memory.claude/agent-memory/[Commander]/Per-commander MEMORY.md index + project_* / reference_* / feedback_* fact filesThe harness, when a registered agent with memory runsThe same commander on its next dispatch; Z2/BAU via vault clone
Harness memory~/.claude/projects/-Users-nnamdi-hinata-v2/memory/Hinata's private cross-session memory (MEMORY.md + fact files)Claude Code onlyClaude Code; BAU read-only (generate-morning-briefing.py MEMORY_PATH)

Dissolved

  • .claude/memory/ — dissolved 2026-06-11. The five per-CLI files moved to memory/. Never recreate. The autoMemoryDirectory key in .claude/settings.json pointed here and was dead config — removed; never re-add.

Rules

  1. One surface per purpose. Session re-attach state → memory/memory_[cli].md. Commander domain facts → that commander's .claude/agent-memory/ dir. Hinata-private working memory → harness memory. Nothing else is memory.
  2. Vault copy is sole canon for commander memory. The harness writes agent memory relative to the project dir the agent runs from. Dispatches therefore never instruct an agent to cd away from the vault — Sandpit/Z2 work uses absolute paths. Other repos gitignore .claude/ (hinata-sandpit: done 2026-06-11). Any agent-memory found outside the vault is folded into the vault copy, then deleted.
  3. Each CLI writes only its own re-attach file. Cross-CLI handover content routes through the OneDrive inbox, not by editing another CLI's memory file.
  4. Transcripts are not memory. Transcript archives are append-only permanent records on CT107 — never folded into any memory surface.
  5. Harness memory is Claude-private. No other CLI or script writes there. BAU reads it; that read path (MEMORY_PATH in generate-morning-briefing.py) is the only sanctioned external consumer.
  6. Staleness discipline. A commander updating infrastructure must update any of its own agent-memory facts the work invalidates in the same run (observed failure: Jimmy-Neutron recorded "sandpit still SSHFS" hours before the gap closed).
  7. Federation context auto-refresh (Michael ruling 2026-06-11). Commander/colonel context files in federation/ refresh automatically whenever domain reality changes — service migrations, integrations going live, schedule changes. No Michael gate, no waiting for an audit pass: the session that changes the reality updates the context file in the same run (rule 6 extended from agent memory to federation context). Origin: Bulma's context still read "Monzo not wired" three days after the CT109 banking stack went live.

Migration record

DateChange
2026-06-11.claude/memory/*.md (5 files) → memory/ via git mv; all references rewritten (CLAUDE.md, runtime index, runtime_workflow, universal-hinata-bridge, naming-conventions, handover SKILL, inject-handover.sh, session-start.sh); autoMemoryDirectory removed from settings
2026-06-11Stray hinata-sandpit/.claude/agent-memory/Jimmy-Neutron/ (2 files, sprouted 2026-06-10) folded into vault copy; sandpit .claude/ gitignored

Cross-links: runtime_workflow · ../format-design/naming-conventions · container-storage-strategy · hinata-architecture