MODULO 4.1

πŸš€ SessionStart: a injecao deterministica

O hook mais importante do curso. Substitui a incerteza do CLAUDE.md por 100% de confiabilidade. Comecar aqui = resultado visivel em 15 minutos.

6
Topicos
35
Minutos
Pratico
Nivel
CORE
Tipo
1

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

2

πŸ§ͺ 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.

3

πŸ” Refazendo o teste da palavra-codigo

Mesmo experimento do modulo 1.3, mas agora com hook. O momento eureka do curso.

1

Fase A: so CLAUDE.md (baseline)

Coloque a palavra em CLAUDE.md, abra 10 sessoes, pergunte. Espere 6-8 acertos.

2

Fase B: SessionStart hook

Remova CLAUDE.md. Configure hook com a mesma palavra. Abra 10 sessoes, pergunte.

3

Resultado

Fase B: 10/10 acertos. Diferenca de 30pp na taxa de sucesso.

4

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.

4

πŸ“„ 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).

5

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

6

🩺 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

βœ“
Hook SessionStart e o #1 β€” 90% dos ganhos de memoria vem dele.
βœ“
additionalContext e o canal β€” texto injetado no prompt antes do usuario.
βœ“
10/10 de acerto β€” contra 7/10 do CLAUDE.md.
βœ“
Lab palavra-codigo prova β€” ver e acreditar.

Proximo:

4.2 β€” prime.md: escrevendo sua identidade