Appearance
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
| Surface | Location | Contents | Writer | Readers |
|---|---|---|---|---|
| Vault memory | memory/ | 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 hooks | All 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 files | The harness, when a registered agent with memory runs | The 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 only | Claude Code; BAU read-only (generate-morning-briefing.py MEMORY_PATH) |
Dissolved
.claude/memory/— dissolved 2026-06-11. The five per-CLI files moved tomemory/. Never recreate. TheautoMemoryDirectorykey in.claude/settings.jsonpointed here and was dead config — removed; never re-add.
Rules
- 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. - 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
cdaway 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. - 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.
- Transcripts are not memory. Transcript archives are append-only permanent records on CT107 — never folded into any memory surface.
- Harness memory is Claude-private. No other CLI or script writes there. BAU reads it; that read path (
MEMORY_PATHingenerate-morning-briefing.py) is the only sanctioned external consumer. - 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).
- 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
| Date | Change |
|---|---|
| 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-11 | Stray 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