MODULO 3.3

โš™๏ธ Schema do settings.json

Onde viver, qual a estrutura, permissoes necessarias, ordem de resolucao entre niveis.

6
Topicos
35
Minutos
Tecnico
Nivel
Config
Tipo
1

๐Ÿ“‚ Localizacao: 3 niveis

Claude Code resolve settings em tres niveis com precedencia. Coloque no nivel certo.

๐Ÿ“ Hierarquia de settings

1. PROJECT:  .claude/settings.json          (no repo atual)
2. USER:     ~/.claude/settings.json         (voce, cross-project)
3. GLOBAL:   /etc/claude/settings.json       (admin, multi-user)

PRECEDENCIA: project > user > global
MERGE: arrays se concatenam; objetos fazem merge profundo.

.claude/settings.local.json = local-only, nao versionado (gitignore)

๐Ÿ’ก Regra de decisao

Identidade pessoal โ†’ user. Hooks de projeto especifico โ†’ project. Compliance da empresa โ†’ global. Experimentos โ†’ local.

2

๐Ÿงฑ Estrutura basica

O schema do settings.json e simples: chave 'hooks' com array por evento.

๐Ÿ“ Estrutura minima

{
  "hooks": {
    "SessionStart": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.memory/hooks/session_start.sh"
          }
        ]
      }
    ]
  }
}

Leitura:
- "SessionStart": nome do evento (case-sensitive)
- "matcher": "" = sempre dispara
- "type": "command" = executa comando bash
- "command": o que rodar

โš ๏ธ Case sensitive

SessionStart com S maiusculo. sessionstart nao funciona. Claude Code e rigoroso nos nomes de eventos.

3

๐Ÿ” Permissoes: allow/deny/ask

Hooks executam comandos bash com suas permissoes. Precisa de allowlist para comandos sensitivos.

๐Ÿ›ก๏ธ Quando permissoes importam

Claude Code pede permissao para executar hooks de commands que nao estao na allowlist.

  • โ€ขallow: comandos que rodam sem perguntar. Seus scripts proprios.
  • โ€ขdeny: comandos bloqueados mesmo se Claude tentar. rm -rf, curl para dominios perigosos.
  • โ€ขask: pede confirmacao a cada execucao. Default para comandos novos.
  • โ€ขPara hooks: adicione o path completo do script em 'allow'.
4

๐ŸŽฏ Matchers: filtragem condicional

Matcher diz quando o hook dispara. Nao so se dispara, mas sob qual condicao.

๐ŸŽช Tipos de matcher

Por evento:

  • โ€ข'' (vazio): sempre dispara. Comum em SessionStart.
  • โ€ข'Bash': so quando a tool chamada e Bash. Comum em PreToolUse.
  • โ€ข'Write|Edit': regex para multiplos. Hooks de compliance.
  • โ€ขArray de objetos: cada objeto tem seu matcher e seus commands. Permite logica diferente por condicao.

๐Ÿ’ก Matcher em UserPromptSubmit

Voce pode criar matcher por keyword no prompt. Ex: matcher de 'deploy|infra' dispara hook que carrega infra.md. Trilha 4 mostra.

5

๐Ÿ“œ Exemplo completo comentado

Um settings.json de producao, linha a linha.

๐Ÿ“ Exemplo real

{
  "hooks": {
    "SessionStart": [{
      "matcher": "",
      "hooks": [{ "type": "command",
                    "command": "$CLAUDE_PROJECT_DIR/hooks/start.sh" }]
    }],
    "PreCompact": [{
      "matcher": "",
      "hooks": [{ "type": "command",
                    "command": "$CLAUDE_PROJECT_DIR/hooks/compact.sh" }]
    }],
    "UserPromptSubmit": [{
      "matcher": "",
      "hooks": [{ "type": "command",
                    "command": "$CLAUDE_PROJECT_DIR/hooks/router.sh" }]
    }],
    "SessionEnd": [{
      "matcher": "",
      "hooks": [{ "type": "command",
                    "command": "nohup $CLAUDE_PROJECT_DIR/hooks/end.sh &" }]
    }]
  }
}

๐Ÿ’ก Variaveis uteis

$CLAUDE_PROJECT_DIR resolve para o cwd do projeto atual. Use em paths para portabilidade.

6

โš ๏ธ Armadilhas comuns

Bugs de primeira hora que custam horas. Conheca para evitar.

โœ“ Fazer

  • โœ“Usar $CLAUDE_PROJECT_DIR ou ~ para paths
  • โœ“Testar JSON com jq antes de salvar
  • โœ“Dar +x nos scripts (chmod +x)
  • โœ“Logar stderr para debug

โœ— Evitar

  • โœ—Path relativo sem raiz (nao resolve)
  • โœ—Trailing comma no JSON (invalida)
  • โœ—Script sem shebang (#!/usr/bin/env bash)
  • โœ—Stdout vazio em vez de {}

๐Ÿ“ Resumo do Modulo

โœ“
3 niveis de settings โ€” global / user / project com merge.
โœ“
Estrutura hooks. โ€” array de matcher + commands.
โœ“
Permissoes separadas โ€” allow/deny de commands.
โœ“
Matchers filtram โ€” por ferramenta ou padrao.

Proximo:

3.4 โ€” Payload: stdin, stdout, additionalContext