ποΈ Por cwd: projeto = pasta
Deteccao automatica: nome do diretorio vira nome do projeto. Hook escolhe memoria correspondente.
π Routing por cwd
#!/usr/bin/env bash
# session_start.sh com routing por projeto
INPUT=$(cat)
CWD=$(echo "$INPUT" | jq -r '.cwd')
PROJ=$(basename "$CWD")
# Carregar base (identidade global) + overlay (projeto especifico)
BASE=$(cat ~/.memory/prime.md 2>/dev/null || echo '')
OVERLAY=''
if [[ -f "$HOME/.memory/projects/$PROJ/context.md" ]]; then
OVERLAY=$(cat "$HOME/.memory/projects/$PROJ/context.md")
elif [[ -f ~/.memory/context.md ]]; then
OVERLAY=$(cat ~/.memory/context.md)
fi
CONTEXT="$BASE\n\n$OVERLAY"
python3 -c "
import json
print(json.dumps({
'hookSpecificOutput': {
'hookEventName': 'SessionStart',
'additionalContext': '''$CONTEXT'''
}
}))
"π‘ Novo projeto = nova pasta
mkdir ~/.memory/projects/novo-proj + seed context.md. Hook pega automatico.
πΏ Por git branch
Features longas ganham com memoria por branch. Estado da feature isolado do main.
π Routing por branch
# Hook detecta branch atual BRANCH=$(cd "$CWD" && git branch --show-current 2>/dev/null) PROJ=$(basename "$CWD") # Prioridade: branch especifico > projeto > global BRANCH_CTX="$HOME/.memory/projects/$PROJ/branches/$BRANCH.md" PROJ_CTX="$HOME/.memory/projects/$PROJ/context.md" DEFAULT_CTX="$HOME/.memory/context.md" if [[ -f "$BRANCH_CTX" ]]; then OVERLAY=$(cat "$BRANCH_CTX") elif [[ -f "$PROJ_CTX" ]]; then OVERLAY=$(cat "$PROJ_CTX") elif [[ -f "$DEFAULT_CTX" ]]; then OVERLAY=$(cat "$DEFAULT_CTX") fi # Trabalhando em feature/new-auth? Claude ja sabe estado daquela feature. # Switch pra main? Memoria troca automaticamente.
π‘ Uso em projetos de longo ciclo
Feature de 2 meses? Branch-scoped context registra decisoes da feature sem poluir main.
π§βπΌ Por agente/papel
Um humano pode alternar papeis: comms, coder, writer. Cada papel com prime.md proprio.
π Profiles por role
~/.memory/
βββ prime.md (base global)
βββ profiles/
βββ comms/
β βββ prime.md (estilo para emails, Slack)
βββ coder/
β βββ prime.md (stack tecnica)
βββ writer/
βββ prime.md (tom publico, evita jargao)
# Hook le env var CLAUDE_ROLE
ROLE="${CLAUDE_ROLE:-coder}" # default coder
ROLE_PRIME="$HOME/.memory/profiles/$ROLE/prime.md"
if [[ -f "$ROLE_PRIME" ]]; then
BASE=$(cat "$ROLE_PRIME")
else
BASE=$(cat ~/.memory/prime.md)
fi
# Usar
$ CLAUDE_ROLE=comms claude
β Claude carrega perfil comms
$ CLAUDE_ROLE=writer claude
β Claude carrega perfil writerπ‘ Alias pra fluidez
alias claude-comms='CLAUDE_ROLE=comms claude'. Um comando por papel.
π Fallback e heranca
Base sempre, overlay quando existe. Identidade nao precisa repetir por projeto.
π§© Cadeia de heranca
Ordem de merge:
- β’Nivel 0: ~/.memory/prime.md (identidade permanente)
- β’Nivel 1: profile/$ROLE/prime.md (se ROLE definido)
- β’Nivel 2: projects/$PROJ/context.md (se em projeto conhecido)
- β’Nivel 3: projects/$PROJ/branches/$BRANCH.md (se em feature branch)
- β’Resultado: concatenacao de todos existentes
ποΈ Override manual
Escape hatch para casos excepcionais. ForΓ§ar profile nao-inferido.
π Override via env var
# ForΓ§ar perfil especifico
$ CLAUDE_MEMORY_PROFILE=writer claude
β ignora routing automatico, usa perfil writer
# ForΓ§ar projeto especifico
$ CLAUDE_MEMORY_PROJECT=legacy-system claude
β usa memoria do projeto legacy mesmo se cwd for outro
# Combinar
$ CLAUDE_MEMORY_PROFILE=comms CLAUDE_MEMORY_PROJECT=payments claude
β comms context + projeto payments
# No hook:
PROFILE="${CLAUDE_MEMORY_PROFILE:-$(infer_profile)}"
PROJECT="${CLAUDE_MEMORY_PROJECT:-$(infer_project "$CWD")}"π‘ Use com cautela
Override manual e poder. Abuse dele e voce perde o beneficio do routing automatico. Reserve pra casos reais.
π§ͺ Lab: multi-projeto
Exercicio ativo. Valide o routing antes de depender.
Setup
Crie 3 pastas em ~/projects/: {proj-a, proj-b, proj-c}. Crie 3 context.md diferentes em ~/.memory/projects/{proj-a,proj-b,proj-c}/.
Sessao em proj-a
cd ~/projects/proj-a && claude. Pergunte 'qual projeto ativo?'. Resposta deve mencionar proj-a.
Sessao em proj-b
Mesma coisa, outro projeto. Resposta deve trocar.
Proj-c (sem memoria especifica)
Deve cair no fallback do context.md global.
Validar isolamento
Pergunta sobre proj-a dentro de sessao de proj-b? Claude nao deve saber, provando isolamento.
π‘ Teste real
Sem teste, voce acha que funciona. Com teste, voce sabe. Invista 15 minutos β vai usar diariamente.
π Resumo do Modulo
Proximo:
6.6 β Metricas e evolucao continua