MODULO 6.5

πŸ‘₯ Memoria por agente e por projeto

Um hook que rotaciona vault de memoria por cwd, git branch, ou papel do agente. Isolamento sem duplicacao.

6
Topicos
35
Minutos
Avancado
Nivel
Pattern
Tipo
1

πŸ—‚οΈ 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.

2

🌿 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.

3

πŸ§‘β€πŸ’Ό 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.

4

πŸ”€ 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
5

πŸŽ›οΈ 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.

6

πŸ§ͺ Lab: multi-projeto

Exercicio ativo. Valide o routing antes de depender.

1

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}/.

2

Sessao em proj-a

cd ~/projects/proj-a && claude. Pergunte 'qual projeto ativo?'. Resposta deve mencionar proj-a.

3

Sessao em proj-b

Mesma coisa, outro projeto. Resposta deve trocar.

4

Proj-c (sem memoria especifica)

Deve cair no fallback do context.md global.

5

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

βœ“
Routing por cwd e padrao β€” detecta projeto pelo diretorio.
βœ“
Branch scope isola features β€” util em trabalhos longos.
βœ“
Role profiles β€” comms, coder, writer com style proprio.
βœ“
Heranca evita duplicacao β€” base + overlay.

Proximo:

6.6 β€” Metricas e evolucao continua