Memory namespacing (multi-user)
Memory — convenção multi-usuário
A vault é compartilhada: vários usuários/agents commitam em main sem
coordenar. Pra memória auto (a que o Claude Code carrega no início de sessão)
não conflitar entre usuários, cada um tem sua própria subpasta:
brain/memory/
<slug>/ # uma pasta por usuário+máquina
MEMORY.md # índice — privado daquele usuário
*.md # memórias daquele usuário
marcus-atlas/ # ex.: usuário marcus na máquina ATLAS
Slug = <nome>-<hostname> (ex.: marcus-atlas). Inclui o hostname pra que o
mesmo usuário em duas máquinas não colida — cada máquina tem sua subpasta.
Regra: nunca colocar MEMORY.md ou arquivos de memória soltos na raiz debrain/memory/. Sempre dentro de brain/memory/<seu-slug>/. Como cada usuário+máquina
mexe só na própria subpasta, o git pull --rebase nunca encontra duas pessoas
editando o mesmo arquivo → zero conflito.
Como o Claude Code escreve direto aqui (junction)
A pasta de memória do harness é um directory junction apontando pra subpasta
do usuário. O que o Claude salva como memória cai direto no working tree do vault;
o Stop hook (vault-sync.sh) commita+push; o SessionStart hook dá git pull.
Setup numa máquina nova (PowerShell, sem admin — junction não precisa):
$slug = "marcus-" + $env:COMPUTERNAME.ToLower() # <nome>-<hostname>, único por máquina
$link = "$env:USERPROFILE\.claude\projects\<PROJECT-DIR>\memory"
$target = "C:\Users\User\kodama-vault\brain\memory\$slug"
New-Item -ItemType Directory -Force $target | Out-Null
if (Test-Path $link) { [System.IO.Directory]::Delete($link, $false) } # remove pasta/junction antiga (só o reparse point)
New-Item -ItemType Junction -Path $link -Target $target
Troca
"marcus-"pelo teu nome. O$env:COMPUTERNAMEgarante slug distinto
por máquina automaticamente.
Hooks em ~/.claude/settings.json: SessionStart faz git pull --rebase,
Stop chama vault-sync.sh (commit + pull --rebase --autostash + push).
Script canônico versionado em vault-sync.sh na raiz do repo.