đŻO que vocĂȘ ganha aqui
Saber EXATAMENTE onde colocar cada peça da configuração do Claude Code. Sair do "joguei tudo no CLAUDE.md" pra ter settings, hooks, slash commands e permissĂ”es nos lugares certos â e funcionando.
ConteĂșdo detalhado
đ CLAUDE.md â hierarquia e escopo
CLAUDE.md existe em trĂȘs nĂveis, todos concatenados no system prompt em ordem. Errar a hierarquia faz instrução de projeto sobrescrever global sem vocĂȘ perceber, ou pior â instrução global sufocando preferĂȘncia especĂfica do projeto.
Os 3 nĂveis (do mais genĂ©rico ao mais especĂfico)
~/.claude/CLAUDE.md â Global (vocĂȘ, todos os projetos) â concatena ./CLAUDE.md â Projeto (raiz) â concatena ./src/api/CLAUDE.md â Subdir (escopo desta pasta)
Quando Claude abre um arquivo em src/api/, vĂȘ os 3 arquivos. Quando abre um em src/ui/, vĂȘ sĂł os 2 primeiros (global + projeto).
â Bom CLAUDE.md
- âą Comandos de build/test/lint LITERAIS no topo
- ⹠ConvençÔes não-óbvias (não repetir o que linter jå força)
- âą Links pra ADRs/runbooks profundos
- âą Tom de voz preferido em respostas
- âą < 2KB (caber sem rolar)
â CLAUDE.md inchado
- âą Repete style guide inteiro (que jĂĄ estĂĄ em
.editorconfig) - âą HistĂłrico do projeto (irrelevante pro agente)
- âą PolĂtica de RH (nĂŁo Ă© instrução de cĂłdigo)
- ⹠50+ KB de "best practices" genéricos
- ⹠Documentação de bibliotecas internas
đĄRegra de ouro
Se o conteĂșdo pode ser lido sob demanda (referĂȘncia), bota em references/ de uma skill ou em docs/ do projeto. Se Ă© sempre necessĂĄrio (build commands, convençÔes centrais), bota em CLAUDE.md. Default: tudo em references/, exceto prova em contrĂĄrio.
Conceitos-chave
Global, projeto, subdir
Tudo entra no prompt
EspecĂfico ganha
Caber sem rolar
đ Estrutura completa da pasta .claude/
A convenção Ă© rĂgida: nome certo, pasta certa, ou Claude nĂŁo enxerga. Aqui estĂĄ o mapa que vocĂȘ pode imprimir e colar do lado do monitor:
.claude/ â raiz do projeto (tambĂ©m ~/.claude/ global) âââ CLAUDE.md â instruçÔes (pode estar na raiz do projeto) âââ settings.json â permissĂ”es, modelo, env, hooks âââ settings.local.json â override local (.gitignore) â âââ agents/ â SUB-AGENTS em Markdown â âââ code-reviewer.md â âââ doc-writer.md â âââ skills/ â SKILLS (pastas com SKILL.md) â âââ my-skill/ â âââ SKILL.md â frontmatter + body â âââ scripts/ â scripts auxiliares â âââ references/ â docs lazy-load â âââ assets/ â imagens/binĂĄrios â âââ commands/ â SLASH COMMANDS â âââ review.md â /review â âââ ship.md â /ship â âââ plugin/sub.md â /plugin:sub (namespaced) â âââ hooks/ â scripts disparados em eventos â âââ pre-commit.sh â âââ on-stop.sh â âââ output-styles/ â estilos de resposta âââ concise.md
Global vs projeto â mesma estrutura
Tudo isso existe igual em ~/.claude/ (suas preferĂȘncias, vale em todo projeto) e em ./.claude/ (especĂfico desse projeto, commitado no git). Skills/agents do projeto tĂȘm precedĂȘncia sobre os globais quando nome coincide.
â ïžErros comuns de path
- âą Colocar skill em
.claude/skill/(singular) â Claude nĂŁo vĂȘ - âą SKILL.md em letra minĂșscula â nĂŁo reconhece
- âą Sub-agent em
.claude/sub-agents/â tem que seragents/ - âą Slash command sem
.mdâ ignorado
Conceitos-chave
Nome certo, pasta certa
Global = projeto
Projeto > global
.local.json fora
âïž settings.json â o que vocĂȘ controla
Arquivo JSON com configuração comportamental. Ă onde vocĂȘ reduz fricção de permissĂŁo, troca modelo, injeta hooks. Override em cascata: user (~/.claude/) â project (.claude/) â local (.claude/settings.local.json).
settings.json comentado (exemplo real)
{
"model": "claude-opus-4-6", // modelo padrĂŁo da sessĂŁo
"includeCoAuthoredBy": true, // Co-Authored-By em commits
"permissions": {
"allow": [
"Bash(ls:*)", "Bash(cat:*)", // libera leitura
"Bash(git status:*)", "Bash(git log:*)", // git read-only
"Read", "Grep", "Glob" // tools bĂĄsicas
],
"deny": [
"Bash(rm -rf:*)", // nunca
"Bash(curl:* | sh)" // pipe pra shell = nĂŁo
],
"ask": [
"Bash(git push:*)", // sempre confirma
"Write", "Edit" // escrita = confirma
]
},
"env": {
"CLAUDE_PROJECT_DIR": "${cwd}",
"NODE_ENV": "development"
},
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "./scripts/log-bash.sh"
}]
}]
}
}
user
~/.claude/settings.json
Suas preferĂȘncias em todos projetos. Modelo, theme, tom de voz.
project
.claude/settings.json
Vai pro git. PermissÔes e hooks que o time inteiro herda.
local
.claude/settings.local.json
Override local (.gitignore). Credenciais, env de dev.
Conceitos-chave
Cada um sobrescreve
3 verbos de permissĂŁo
${cwd}, ${env}
Glob por tool
đȘ Hooks â a Ășnica forma de garantir comportamento
Hooks sĂŁo shell commands disparados pelo harness em eventos do agente. Eles RODAM, nĂŁo dependem do Claude lembrar de fazer. Ă a Ășnica forma de garantir determinismo ("sempre lint antes de commit").
PreToolUse â antes de cada tool
Roda antes de Claude executar uma ferramenta. Pode bloquear (exit â 0) ou sĂł logar.
Caso clĂĄssico: bloquear comandos perigosos, logar todo Bash, redirecionar Read pra MCP indexado.
PostToolUse â depois de cada tool
Roda depois. Recebe o output da tool, pode anotar contexto pra prĂłximas rodadas.
Caso clĂĄssico: rodar formatter apĂłs Edit, validar JSON depois de Write, indexar arquivo mudado.
Stop â quando o agente decide parar
Roda quando Claude termina o turno. Permite checagem final.
Caso clĂĄssico: rodar testes, validar diff antes de devolver controle, exigir checklist completo.
SessionStart e UserPromptSubmit
SessionStart: roda ao abrir sessĂŁo. UserPromptSubmit: a cada mensagem sua.
Caso clĂĄssico: SessionStart popula MCP, UserPromptSubmit injeta contexto adicional (claude-mem, etc.).
đĄMemory NĂO substitui hook
Quando vocĂȘ pede "sempre faz X", Claude pode esquecer (nĂŁo Ă© determinĂstico). Hook RODA. Pediu pra rodar lint antes de commit? Hook. Pediu pra logar comandos? Hook. MemĂłria de skill ajuda, mas pra garantia, hook.
Conceitos-chave
Sempre roda
0 ok, â 0 bloqueia
PolĂtica de erro
Filtro por tool
⥠Slash commands customizados
Arquivos markdown em .claude/commands/ que viram comandos slash automaticamente. Tarefa que vocĂȘ repete? Vira /comando e some.
Exemplo â .claude/commands/review.md
--- description: Revisa o diff atual procurando bugs de correção allowed-tools: Bash(git diff:*), Read, Grep --- Revise o diff atual da branch. Procure: - Bugs de correção (nĂŁo estilo) - Casos nĂŁo tratados (null, vazio, edge) - Vulnerabilidades comuns (SQLi, XSS, path traversal) Use \`$ARGUMENTS\` se passado para focar em arquivo especĂfico. Retorne uma lista numerada de findings + severity.
Uso: /review ou /review src/api/auth.ts
â Bons casos de slash
- âą
/reviewâ revisa diff atual - âą
/shipâ checklist prĂ©-merge - âą
/testâ gera testes pro arquivo aberto - âą
/explainâ explica trecho selecionado - âą
/changelogâ gera entrada do CHANGELOG
â Mau uso de slash
- âą ConteĂșdo enorme que deveria ser skill
- âą Comando que sĂł faz sentido pra vocĂȘ (usa user-level, nĂŁo projeto)
- âą Sem allowed-tools (pode tudo)
- âą Sem description (descobre sĂł lendo o arquivo)
Conceitos-chave
Args do comando
Restringe surface
/plugin:sub
Escopo do slash
đ Sistema de permissĂ”es â fricção vs segurança
TrĂȘs verbos: allow (libera), deny (bloqueia), ask (pergunta). Configuração mal calibrada vira fricção (perguntar pra tudo) ou risco (liberar demais).
Modos de sessĂŁo
Independente das permissĂ”es do settings.json, vocĂȘ pode trocar o MODO ao vivo:
- default: usa exatamente o settings
- acceptEdits: aceita Edit/Write sem perguntar (Ăștil em refactor)
- plan: sĂł planeja, nunca edita (Ăștil em arquitetura)
- bypassPermissions: ignora tudo (perigoso â sĂł pra ambiente sandbox)
Conceitos-chave
allow/deny/ask
Bash(cmd:*)
plan, acceptEdits
mcp__server__
đ§Ș Plan mode e output styles
Dois mecanismos pra trocar comportamento ao vivo sem editar settings. Plan mode congela edição (Claude planeja, não age). Output styles trocam o tom de resposta (concise, verbose, explanatory, etc.).
đ Plan mode
Ativa com /plan ou flag --plan. Claude lĂȘ, pensa, propĂ”e â mas nĂŁo escreve nem roda destrutivo atĂ© vocĂȘ sair do modo.
Quando usar: refactor grande, escolha de arquitetura, hipĂłtese de bug. VocĂȘ quer alinhamento antes da ação.
đš Output styles
Ativa com /output-style concise. Vivem em .claude/output-styles/<nome>.md. Trocam tom sem mexer no system prompt.
Built-in: concise (objetivo), verbose (detalhado), explanatory (didĂĄtico). Customize criando seu prĂłprio.
đĄCombo prĂĄtico
Tarefa nova de arquitetura? Entra em /plan + /output-style verbose. Claude desenha tudo, vocĂȘ revisa, daĂ sai do plan mode e ele executa.
Conceitos-chave
NĂŁo precisa editar settings
SĂł lĂȘ, nĂŁo escreve
Tom de resposta
.md em output-styles/
đŻResumo do mĂłdulo
PrĂłximo mĂłdulo:
2.2 â Skills, sub-agents e MCP no Claude Code