π― O que e SessionStart
SessionStart dispara antes da primeira mensagem do usuario. Seu script retorna texto via additionalContext e o prompt ja nasce enriquecido.
π Fluxo do SessionStart
Voce abre Claude Code em algum diretorio
β
βΌ
Claude Code coleta settings.json (project + user + global)
β
βΌ
Encontra hook SessionStart, executa o command
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β Seu script: β
β 1. Le input JSON (cwd, session_id) β
β 2. Decide o que carregar (prime.md) β
β 3. Retorna JSON com additionalContext β
βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
Claude Code anexa o additionalContext ao system prompt
β
βΌ
Primeira mensagem do usuario chega; modelo ja conhece contextoπ‘ Garantia de execucao
Diferente de CLAUDE.md, que depende do modelo ponderar, SessionStart EXECUTA. Se o script roda, o contexto entra. Simples e deterministico.
π§ͺ Configuracao minima em 5 linhas
Hello world do SessionStart. Em 2 minutos voce tem hook funcionando.
π settings.json minimo
{
"hooks": {
"SessionStart": [{
"matcher": "",
"hooks": [{
"type": "command",
"command": "echo '{\"hookSpecificOutput\":{\"hookEventName\":\"SessionStart\",\"additionalContext\":\"Sou Mario, dev backend Python. Palavra-codigo: XIBATA-7.\"}}'"
}]
}]
}
}π‘ Copie e cole
Esse JSON literal funciona. Coloque em .claude/settings.local.json do seu projeto. Abra Claude Code. Pergunte 'qual a palavra-codigo?'. Deve responder XIBATA-7.
π Refazendo o teste da palavra-codigo
Mesmo experimento do modulo 1.3, mas agora com hook. O momento eureka do curso.
Fase A: so CLAUDE.md (baseline)
Coloque a palavra em CLAUDE.md, abra 10 sessoes, pergunte. Espere 6-8 acertos.
Fase B: SessionStart hook
Remova CLAUDE.md. Configure hook com a mesma palavra. Abra 10 sessoes, pergunte.
Resultado
Fase B: 10/10 acertos. Diferenca de 30pp na taxa de sucesso.
Implicacao
Para qualquer regra critica, CLAUDE.md e insuficiente. Hook e o padrao.
π‘ Lab pronto
labs/palavra-codigo/ tem tudo: hook.sh, settings.json, run_experiment.sh. Voce roda em 10 minutos.
π O formato do prime.md
Configuracao basica aponta para arquivo prime.md. Detalhes no modulo 4.2 β aqui so o formato geral.
π Prime.md compact
Template de 100-200 tokens:
- β’Role: papel principal
- β’Stack: tecnologias do dia-a-dia
- β’Style: preferencias de comunicacao
- β’Current context: projeto ou tema ativo (opcional)
- β’Claude directives: instrucoes explicitas
π‘ Mantenha enxuto
200 tokens e cap. Prime inchado nega o beneficio. Se estiver crescendo, separe em context.md (modulo 4.4).
π Condicional por cwd / projeto
Um unico hook atende N projetos. Script le cwd e escolhe prime/context especifico.
π Hook com routing por cwd
#!/usr/bin/env bash
# session_start.sh
INPUT=$(cat)
CWD=$(echo "$INPUT" | jq -r '.cwd')
# Extrair nome do projeto do cwd
PROJ=$(basename "$CWD")
# Carregar memoria especifica do projeto (se existir) + base
BASE_FILE="$HOME/.memory/prime.md"
PROJ_FILE="$HOME/.memory/projects/$PROJ/context.md"
BASE=$(cat "$BASE_FILE" 2>/dev/null || echo "")
PROJ_CTX=$(cat "$PROJ_FILE" 2>/dev/null || echo "")
CONTEXT="${BASE}\n\n${PROJ_CTX}"
# Montar JSON de saida
python3 -c "
import json, sys
print(json.dumps({
'hookSpecificOutput': {
'hookEventName': 'SessionStart',
'additionalContext': '''$CONTEXT'''
}
}))
"π‘ Cresce sem esforΓ§o
Novo projeto? So criar ~/.memory/projects/X/context.md. Hook pega automatico.
π©Ί Diagnosticando 'nao disparou'
Checklist direto para o bug mais comum dos primeiros 30 minutos.
π Checklist de 5 pontos
1. Script executavel? $ chmod +x ~/.memory/hooks/session_start.sh 2. JSON de output valido? $ cat mock_input.json | ./hook.sh | jq . (se jq falhar, JSON ta quebrado) 3. Path absoluto no settings.json? "command": "/home/user/.../session_start.sh" β "command": "./session_start.sh" β 4. Nome do evento correto? "SessionStart" β "sessionStart" β "session-start" β 5. Conflito entre niveis? Claude Code usa o settings de maior precedencia. Project (.claude/settings.json) > User > Global
β οΈ Teste com echo primeiro
Antes de setup complexo: "command": "echo '{}'" so para ver se dispara. Se nao dispara echo vazio, o problema esta em settings, nao no script.
π Resumo do Modulo
Proximo:
4.2 β prime.md: escrevendo sua identidade