Configuração do Claude Code: escopo pessoal ou do projeto, qual escolher?

Escopo do Claude Code é a resposta pra pergunta: essa configuração é sua ou do repositório? Configuração pessoal vive em ~/.claude/ e te segue em todos os projetos. Configuração de projeto vive em .claude/ dentro do repo e só chega no clone do colega se você commitar o arquivo. E tem o .claude/settings.local.json, que é seu e só naquele repositório, fora do git. A ordem de força das settings é managed, depois argumentos de linha de comando, depois local, projeto e usuário. Decidir o escopo antes de escrever o arquivo evita 90% da confusão de time
Fala aí, beleza? Sabe aquele momento em que tu monta um setup lindo no Claude Code, com subagente, skill, MCP, tudo redondo, manda pro colega e na máquina dele simplesmente não acontece NADA?
Quase sempre o problema não é a configuração, é o escopo dela
O escopo do Claude Code é o que separa o que é seu do que é do repositório: tem configuração que mora na sua máquina e te acompanha em todo projeto, e tem configuração que mora dentro do repo e viaja no git junto com o código
Escolher errado dá nos dois lados: ou tu compartilha coisa que ninguém deveria herdar, ou tu guarda pra você aquilo que o time inteiro precisava ter
Bora destrinchar isso
Os quatro escopos de configuração e onde cada arquivo vive
O Claude Code lê settings em quatro escopos de arquivo, e cada um tem um dono diferente
| Escopo | Arquivo | Quem é afetado | Vai pro controle de versão? | Pra que serve |
|---|---|---|---|---|
| Managed | managed-settings.json (server-managed) |
quem trabalha sob aquela política | não é você quem versiona | política da organização |
| User | ~/.claude/settings.json |
só você, em todos os seus projetos | não | seu jeito de trabalhar |
| Project | .claude/settings.json |
o time todo, se o arquivo for commitado | sim | setup do repositório |
| Local | .claude/settings.local.json |
só você, só neste repositório | não | ajuste seu, preso a um repo |
A regra de endereço é simples: o que é de escopo global fica em ~/.claude/ e vale pra todos os projetos, e o que é de escopo de projeto fica no repositório, dentro de .claude/
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 116 aulas
- 4 projetos
- 9h 23min
As exceções ficam na RAIZ do repositório: CLAUDE.md, .mcp.json e .worktreeinclude
E a ordem de força das settings, do mais forte pro mais fraco, é essa: managed settings, depois argumentos de linha de comando, depois .claude/settings.local.json, depois .claude/settings.json e por último ~/.claude/settings.json (a documentação oficial de settings tem a lista completa das chaves)
Um aviso de nomenclatura antes que tu se perca mais pra frente: esse nível mais alto aparece como Managed aqui nos settings, mas a documentação de skills chama o mesmo topo da fila de enterprise
Nomes diferentes, mesmo escopo: o da política da organização
Repara numa coisa que confunde muita gente: o arquivo pessoal do seu home é o MAIS FRACO da fila, não o mais forte 🙂
Managed settings não são sobrescritas por usuário, projeto, local nem por --settings, com exceções documentadas: pra algumas chaves sensíveis à segurança, um valor mais restritivo vindo de um nível inferior continua valendo
O que você precisa antes de escolher o escopo
Antes de sair criando arquivo, três coisas precisam estar claras na tua cabeça
- Repositório sob controle de versão: as project settings só alcançam o clone do colega e a sessão em nuvem se o arquivo for commitado. Sem commit, aquilo é config local com nome bonito
- Diretório confiado: configuração de projeto não passa a valer sozinha. Ao entrar num diretório ainda não confiado, o Claude Code lista no prompt de confiança as allow rules, os additional directories, os hooks e os helper commands que aquelas settings ativariam
- Saber olhar o estado atual: o comando
/permissionsabre um diálogo com todas as regras de permissão E de qualsettings.jsoncada uma veio
Esse último é o mais subestimado da lista
Antes de mexer em qualquer coisa, roda /permissions e olha a origem de cada regra: boa parte dos "bugs" de configuração morre aí mesmo
Como configurar o escopo pessoal, que segue a sua máquina
Esse é o setup que é SEU: ninguém do time herda nada daqui
Quase tudo nesta lista te acompanha em todo projeto que tu abrir, e no fim tem um caso que também é só teu, porém fica preso a um repositório só (já chego nele)
- Settings pessoais no
~/.claude/settings.json
{
"permissions": {
"allow": ["Bash(npm run test:*)"]
}
}
Esse arquivo vale em todos os seus projetos, mas lembra da fila de precedência: ele perde pra project e pra local
- Servidor MCP com escopo de usuário
claude mcp add --scope user nome-do-servidor
Com --scope user a configuração é gravada no ~/.claude.json e vale pra todos os seus projetos
O erro comum deste passo: esquecer que o escopo padrão do MCP é o local, que fica preso ao projeto onde foi adicionado. Se tu não passou a flag, aquele servidor não vai te seguir pra lugar nenhum
- Subagentes pessoais em
~/.claude/agents/
Qualquer subagente que tu jogar aí fica disponível em todos os projetos
- Skills pessoais em
~/.claude/skills/
Mesma lógica: skill pessoal vale em todo projeto
- Memória pessoal no
~/.claude/CLAUDE.md
Aqui vai preferência de estilo, forma de responder, aquele jeitão que tu gosta que ele trabalhe, valendo em todos os projetos
- Preferência privada de UM projeto no
CLAUDE.local.md
Esse é o tal caso que foge da regra da seção: continua sendo só teu, mas não te segue pra lugar nenhum
Ele fica na raiz do projeto, carrega junto do CLAUDE.md e serve pras suas preferências privadas naquele repositório específico
Tome cuidado! Ele precisa ir pro .gitignore, senão a tua preferência pessoal vira preferência do time sem ninguém pedir
- Plugin com escopo user
O escopo user instala o plugin pra você, em todos os seus projetos. Se tu quer o plugin só naquele repositório e só pra você, o escopo é o local
O erro comum desta seção inteira: achar que o .claude/settings.local.json é o "seu arquivo pessoal"
Não é. Ele é seu, mas é preso a UM repositório só. O arquivo que vale em todos os projetos é o ~/.claude/settings.json
E tem uma pegadinha boa nesse local: quando o próprio Claude Code escreve o .claude/settings.local.json pela primeira vez, ele adiciona o arquivo aos git excludes globais
Se VOCÊ criar o arquivo na mão, esse ignore automático não acontece e tu precisa botar no .gitignore por conta própria
Já pensou commitar sem querer o teu arquivo de ajustes locais no repo do time? Pois é…
Como configurar o escopo de projeto para o time inteiro herdar
Agora o outro lado: o setup que nasce junto com o repositório e que qualquer pessoa herda no git clone
Se tu tá montando isso do zero num projeto novo, vale dar uma olhada no fluxo do primeiro projeto ao deploy antes, porque escopo de projeto é uma decisão bem mais confortável quando o fluxo já tá desenhado
.claude/settings.jsoncommitado
Esse é o coração do setup compartilhado. Sem commit, ele não existe pro time
- Servidor MCP no escopo do repositório
claude mcp add --scope project nome-do-servidor
Com --scope project a configuração é gravada no .mcp.json do repositório, feito justamente pra compartilhar com o time
- Subagentes versionados em
.claude/agents/
Subagente de review, de migração, de documentação, o que o time inteiro precisa ter
O Claude Code varre .claude/agents/ recursivamente, então subpasta é permitida: agents/review/ e agents/research/ funcionam normal
O erro comum deste passo: achar que o caminho define o nome do subagente. Não define. A identidade vem do campo name do frontmatter, e a subpasta não muda como ele é invocado
- Skills de projeto em
.claude/skills/
Skill que é regra da casa mora aqui
- Comandos custom em
.claude/commands/
.claude/commands/deploy.md
Esse arquivo cria o /deploy, pelo nome do arquivo. Simples assim
- Plugins no escopo project
Com --scope project a instalação grava em enabledPlugins no .claude/settings.json, que é o arquivo que todo colaborador do repositório recebe
{
"enabledPlugins": {
"nome-do-plugin@nome-do-marketplace": true
}
}
Esse formato "plugin-name@marketplace-name": true/false também pode ser configurado no ~/.claude/settings.json, no .claude/settings.local.json e no managed-settings.json, dependendo de quem tu quer atingir
extraKnownMarketplacesdeclarada no repositório
Essa setting é tipicamente usada no nível do repositório pra garantir que os membros do time tenham acesso às fontes de plugin necessárias
Sem ela, tu ativa um plugin que o colega não consegue nem alcançar
CLAUDE.mddo projeto como memória compartilhada
Regra de arquitetura, convenção de commit, o que não pode ser mexido: tudo isso é memória de projeto e é compartilhada com o time
O erro comum desta seção: esquecer o commit e achar que o time já recebeu
O segundo erro comum, mais sorrateiro: assumir que permissions.additionalDirectories já vale pra todo mundo só porque tá no arquivo commitado
Não vale. Isso só passa a valer depois que CADA pessoa do time confia na pasta
Quem vence quando o mesmo nome existe em dois escopos
Aqui mora a parte que mais pega gente desprevenida: a ordem de precedência NÃO é a mesma pra todo tipo de recurso
| Recurso | Ordem de precedência (mais forte primeiro) | O detalhe que pega |
|---|---|---|
| Settings | managed, CLI, local, projeto, usuário | chaves sensíveis à segurança têm exceção: valor mais restritivo de nível inferior continua valendo |
| Servidores MCP | local, project, user | mesmo nome em dois escopos? o local ganha |
| Subagentes | managed, flag de linha de comando, project, user, plugin | o de projeto vence o seu pessoal |
| Skills | enterprise (o mesmo Managed), pessoal, projeto, plugin | INVERTIDO: a sua skill pessoal vence a do projeto |
Lê a linha de skills de novo, porque ela é o oposto da de subagentes
No subagente, o projeto manda mais que você. Na skill, você manda mais que o projeto
Ou seja: se existe uma skill de mesmo nome em ~/.claude/skills/ e em .claude/skills/, a que roda é a PESSOAL, e o time inteiro pode estar rodando uma coisa enquanto tu roda outra sem perceber 😅
E a memória segue uma lógica diferente de todas: os níveis somam em vez de substituir, e em conflito direto a memória mais específica prevalece sobre a mais ampla
Qual escopo escolher em cada situação real
Dá pra decidir quase tudo com uma pergunta: isso é meu, do repositório, ou é temporário?
Atalho e estilo de trabalho seu: escopo de usuário, em ~/.claude/. Aquele jeitão de responder, o teu subagente favorito, a skill que tu usa em tudo
Regra de arquitetura, comando de deploy e subagente de review que todo mundo precisa: escopo de projeto, commitado. Isso é parte do repositório tanto quanto o package.json
Credencial, caminho de máquina e experimento que ninguém deveria herdar: escopo local, no .claude/settings.local.json, fora do git
Política que a organização não quer que ninguém sobrescreva: managed (o tal enterprise da doc de skills). É o único nível que não é sobrescrito por usuário, projeto, local nem por --settings
Marketplace de plugin que o time inteiro precisa alcançar: extraKnownMarketplaces declarada no repositório
Preferência sua dentro de um projeto do time, sem poluir o CLAUDE.md compartilhado: CLAUDE.local.md na raiz, com entrada no .gitignore
Esse último é ULTRA útil quando tu cai de paraquedas num repo que já existia e precisa anotar tuas descobertas pra você mesmo
É o mesmo espírito de quando tu usa o Claude pra entender um projeto legado: as tuas anotações de navegação são suas, o contrato de arquitetura é do time
Configurei no repositório e não funcionou para o time: o que checar
Bora pros sintomas clássicos, com causa e solução
O colega clonou e nada mudou:
Causa: o arquivo não foi commitado. Project settings só alcançam o clone do colega e a sessão em nuvem se o arquivo estiver no controle de versão
Solução: git status na pasta .claude/ e commita o que tá faltando
As allow rules e os additional directories do repo não valem pra ninguém:
Causa: o diretório ainda não foi confiado por aquela pessoa
Solução: ao entrar num diretório novo, o prompt de confiança lista as allow rules, os additional directories, os hooks e os helper commands que aquelas settings ativariam. Enquanto cada pessoa não aceitar, permissions.additionalDirectories não passa a valer pra ela
O hook do subagente de projeto não dispara:
Causa: hooks de frontmatter em subagente de projeto só rodam DEPOIS do aceite do diálogo de confiança da pasta de onde o arquivo do agente veio
Solução: aceitar o workspace trust dialog daquela pasta, que é pré-requisito
A skill do projeto é ignorada só na sua máquina:
Causa: existe uma skill pessoal de mesmo nome em ~/.claude/skills/, e a ordem é enterprise (aquele topo Managed), pessoal, projeto, plugin
Solução: renomear uma das duas, ou aceitar conscientemente que a pessoal manda
A skill custom substituiu a embutida, mas chamando pelo alias não roda:
Causa: uma skill code-review em .claude/skills/ substitui a /code-review embutida, porém digitar o alias embutido /review nunca roda a sua skill
Solução: chamar pelo nome cheio e avisar o time disso, senão vira debate de fantasma
Permissão negada mesmo com a regra de allow no lugar certo:
Causa: a ordem de avaliação é deny, depois ask, depois allow. Um deny em qualquer camada mata o teu allow
Outra causa: um hook que sai com código 2 interrompe a chamada da ferramenta ANTES das regras de permissão serem avaliadas
Solução: /permissions pra ver de qual settings.json cada regra veio, e /hooks pra navegar os hooks configurados por evento, abrindo os matchers e os detalhes de cada handler
Como prevenir tudo isso:
Três comandos resolvem a maior parte da investigação de dentro da própria sessão
/permissionsmostra todas as regras e o arquivo de origem de cada uma (e as alterações passam a valer já na próxima chamada de ferramenta, mesmo dentro do mesmo turno)/hooksabre um navegador somente leitura dos hooks, com a contagem por evento/memoryabre e navega pelos arquivos de memória sem sair da sessão
E guarda essa: o claudeMdExcludes pode ser configurado em qualquer camada de settings (user, project, local e managed policy), e os arrays SOMAM entre as camadas em vez de substituir
Então se algo do CLAUDE.md sumiu misteriosamente, provavelmente tem exclusão vindo de outra camada que tu nem olhou
Conclusão: decida o escopo antes de escrever o arquivo
A regra de bolso cabe em três linhas
É seu e vale em tudo? Vai pra ~/.claude/
É do repositório e o time precisa herdar? Vai pra .claude/, commitado
É temporário, sensível ou só teu naquele projeto? Vai pro local, fora do git
O resto é detalhe de precedência, e a tabela lá de cima resolve: settings e subagentes dão força pro projeto, skills dão força pra você, MCP dá força pro local e memória soma tudo com a mais específica ganhando no conflito
Próximo passo prático: abre o projeto que tu tá tocando hoje e roda /permissions
Olha de onde vem cada regra e move o que estiver no escopo errado, principalmente aquilo que tá no teu arquivo pessoal mas devia ser do repositório inteiro
É um trampo rápido que economiza um monte de "mas na minha máquina funciona" 😀
até o próximo post!
Perguntas frequentes
Se eu tiver a mesma configuração no settings pessoal e no settings do projeto, qual escopo do Claude Code vence?
A ordem de força vai do mais forte pro mais fraco assim: managed settings, depois argumentos de linha de comando, depois .claude/settings.local.json, depois .claude/settings.json e por último ~/.claude/settings.json. Ou seja, o arquivo do teu home é o mais fraco da fila inteira, então settings de projeto e local sempre passam na frente dele.
Skill pessoal e skill de projeto com o mesmo nome, qual delas roda?
Aqui a lógica é invertida em relação a subagente: quando existe uma skill de mesmo nome em ~/.claude/skills/ e em .claude/skills/, a pessoal é a que roda. A ordem completa de precedência é enterprise, depois pessoal, depois projeto, depois plugin. Só pra alinhar o nome: esse enterprise é o mesmo escopo mais alto que aparece como Managed nos settings, a política da organização.
Subagente de projeto e subagente pessoal com o mesmo nome, qual tem prioridade?
Diferente da skill, aqui o projeto vence: a ordem é managed, depois flag de linha de comando, depois project, depois user e por último plugin. Vale lembrar que a identidade do subagente vem do campo name no frontmatter, não do caminho da pasta, então dois arquivos em subpastas diferentes ainda podem colidir pelo mesmo nome.
Por que o servidor MCP que eu adicionei some quando eu troco de projeto?
Porque o escopo padrão do claude mcp add é o local, que fica preso ao projeto onde ele foi adicionado. Se tu quer que o servidor te acompanhe em todos os projetos, precisa usar claude mcp add –scope user, que grava a configuração em ~/.claude.json.
Comitei o .claude/settings.json do projeto, por que o time ainda não recebeu as regras?
Duas causas prováveis. Primeiro, a config de projeto só alcança o clone do colega e a sessão em nuvem se o arquivo foi de fato commitado, não basta existir na tua máquina. Segundo, o diretório precisa ser confiado: ao entrar num diretório ainda não confiado, o Claude Code lista as allow rules, additional directories, hooks e helper commands daquelas settings no prompt de confiança, e enquanto ninguém aceitar aquilo não entra em vigor.
Como descobrir de qual settings.json veio uma regra de permissão específica?
Roda o comando /permissions dentro da sessão. Ele abre um diálogo listando todas as regras de permissão e apontando de qual settings.json cada uma veio, e qualquer alteração passa a valer já na próxima chamada de ferramenta, mesmo dentro do mesmo turno.
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares
Bateu o limite de uso do Claude Code? Como retomar a tarefa sem refazer tudo
Bateu o limite de uso do Claude Code? Veja como retomar a tarefa de onde parou com /usage, CLAUDE.md e --continue, sem refazer nada.
Como pagar o Claude Code no Brasil: cartão, dólar, IOF e quanto fica em reais
Claude Code preço Brasil na prática: câmbio, IOF de 3,5% e quanto fica na fatura. Planos Pro e Max convertidos em reais e como pagar com cartão.
Como instalar uma skill no Claude Code: passo a passo
Saiba como instalar skill no Claude Code: use a pasta pessoal para todas as sessões ou a pasta de projeto para versionar. Frontmatter YAML é obrigatório.
