Como dois devs podem usar Claude Code no mesmo repositório sem pisar no trabalho um do outro?

Dois devs usando Claude Code no mesmo repositório dá conflito quando as duas sessões editam o mesmo checkout. A saída oficial é o suporte nativo a git worktrees: claude --worktree <nome> cria um checkout separado em .claude/worktrees/<nome>/, numa branch worktree-<nome>, e o que uma sessão muda nunca toca os arquivos da outra. Some isso a um CLAUDE.md versionado (regras iguais pros dois) e a /code-review antes de abrir PR, e você fecha as três frentes: isolar as sessões, combinar as regras e revisar o que o colega gerou com IA.
Fala aí, beleza? Cena que todo time já viveu: você está no meio de um refactor, o outro dev roda o Claude Code pra "dar uma ajeitada rapidinha" no service de pagamento, e do nada os SEUS arquivos mudaram embaixo de você
Aí vem o clássico "mas eu não mexi nisso", o git status virando um campo minado e meia hora perdida pra descobrir quem escreveu o quê
O ponto é que o problema aqui não é o modelo
O problema é falta de isolamento (as duas sessões mordendo o mesmo checkout) e falta de combinado de time (cada agente seguindo uma regra diferente)
Esse post resolve isso em três frentes: isolar as sessões em worktrees, compartilhar as regras que valem pros dois e revisar direito o código que o outro gerou com IA
Bora? 😀
O que você precisa antes de começar:
Lista curta, só o que é realmente pré-requisito:
- Um repositório git com pelo menos um commit: o worktree nasce a partir de um commit existente, então repo recém-criado e vazio não serve
- Claude Code instalado e rodando na raiz do projeto: é de lá que os caminhos padrão fazem sentido
- Acesso de escrita ao repositório: você vai criar branch e abrir PR
Duas coisas que NÃO são obrigatórias pra parte de isolamento:
A integração com GitHub (/install-github-app) só entra em cena na frente de revisão em pull request
E o Code Review automático em PR está disponível para assinaturas Team e Enterprise, então se o seu plano for outro, a parte de revisão local (/code-review na sua máquina) continua valendo normalmente
Passo a passo: isolar cada dev em um git worktree
Antes do como, o porquê: o Claude Code tem suporte nativo a git worktrees justamente pra rodar sessões paralelas sem uma pisar na outra
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
Cada worktree é um checkout separado, com branch e arquivos próprios
Se você conhece aquele esquema de clonar o projeto duas vezes em pastas diferentes pra testar duas coisas ao mesmo tempo, é a mesma ideia, só que oficial e integrada ao git
A diferença prática: mudanças feitas em uma sessão nunca tocam os arquivos da outra
- Suba a sessão já isolada. O comando cria o worktree e abre o Claude dentro dele:
claude --worktree pagamentos
# atalho
claude -w pagamentos
O valor que você passa não é só um rótulo bonitinho: ele vira o nome do diretório do worktree e é a base do nome da branch também (com um prefixo, que eu mostro no passo seguinte)
O erro comum deste passo: escolher nome genérico tipo teste e depois não saber qual sessão é qual quando as duas estiverem rodando
- Saiba onde a coisa nasceu. O worktree é criado em
.claude/worktrees/<nome>/na raiz do repositório, numa nova branch chamadaworktree-<nome>
No exemplo acima: pasta .claude/worktrees/pagamentos/ e branch worktree-pagamentos
O erro comum deste passo: procurar a branch com o nome que você digitou e achar que não criou nada. O prefixo worktree- está lá, é só listar as branches
- Deixe o Claude nomear quando você não quiser pensar. Omitindo o nome, ele gera um automaticamente, no estilo
bright-running-fox:
claude --worktree
Bom pra tarefa rápida, ruim pra tarefa longa
O erro comum deste passo: usar nome gerado em tudo e depois abrir a pasta de worktrees sem fazer ideia de qual bicho é qual tarefa
- Ignore o diretório dos worktrees no git. Essa é a recomendação oficial e evita que o conteúdo dos worktrees apareça como arquivo não rastreado no checkout principal:
echo ".claude/worktrees/" >> .gitignore
O erro comum deste passo: só lembrar disso depois que o git status virou uma parede de arquivos novos e alguém commitou a pasta inteira sem querer 😛
- Leve os arquivos ignorados pelo git pro worktree novo. Seu
.envnão vai junto sozinho, porque o git ignora ele
Pra isso existe um arquivo de configuração próprio, o .worktreeinclude, no diretório raiz do projeto:
.env
.env.local
O erro comum deste passo: tentar configurar isso dentro de settings. Não é lá, é um arquivo .worktreeinclude na raiz do projeto mesmo
- Volte pro mesmo worktree depois. Retomar uma sessão que estava em um worktree devolve você pra aquele worktree
Vale pro resume interativo, pro --continue e --resume em modo não interativo com -p, e também pro Agent SDK
O erro comum deste passo: abrir o Claude na raiz do projeto no dia seguinte achando que está continuando a tarefa de ontem, e começar a editar o checkout principal
Com isso, você e o outro dev podem tocar tarefas paralelas sem sincronizar nada no braço. É a mesma lógica de quando você quer rodar dois sistemas ao mesmo tempo sem um atrapalhar o outro, só que aplicada a duas pessoas em vez de dois projetos
Passo a passo: combinar as regras que valem para os dois devs
Isolar resolve o conflito de arquivo
Mas não resolve o outro problema: a sessão dele gera código com um padrão, a sua gera com outro, e o PR vira discussão de estilo
O combinado precisa morar no repositório, não no Slack
- Coloque as regras do time no arquivo de memória do projeto. No nível de projeto, o Claude Code lê
CLAUDE.mdou.claude/CLAUDE.mdno diretório de trabalho
Esses arquivos são lidos no início de cada sessão, então valem igual pra você e pro seu colega
O erro comum deste passo: escrever o combinado num doc externo que ninguém abre. Se não está no repo, não existe pro agente
- Separe o que é seu do que é do time. Instruções globais, que valem pra você em todos os projetos, vão em
~/.claude/CLAUDE.md, no nível de usuário
O erro comum deste passo: empurrar preferência pessoal pro arquivo do projeto e obrigar o outro dev a conviver com a sua mania
- Mantenha o arquivo curto. Acima de 200 linhas ele consome mais contexto e pode reduzir a aderência, ou seja, o agente segue MENOS as suas regras
E arquivo acima de 4 MiB o Claude Code simplesmente ignora
O erro comum deste passo: transformar o CLAUDE.md num manual de onboarding de 800 linhas e depois reclamar que o agente não obedece
- Conte com ele depois da compactação. O
CLAUDE.mdda raiz do projeto sobrevive ao/compact: o Claude relê o arquivo do disco e reinjeta na sessão
Detalhe importante em sessão longa de dupla, porque o combinado não some no meio do caminho
- Decida o que o time commita. O
.claude/settings.jsoné a configuração de projeto, feita pra ser commitada e compartilhada com o time
Já o .claude/settings.local.json guarda preferência pessoal por projeto e não deve entrar no controle de versão
A precedência, da maior pra menor, é: local (.claude/settings.local.json), projeto (.claude/settings.json), usuário (~/.claude/settings.json)
O erro comum deste passo: commitar o settings.local.json e sobrescrever a preferência de todo mundo, já que ele ganha de tudo
- Reaproveite regras entre projetos com symlink. O diretório
.claude/rules/suporta symlinks, então dá pra manter um conjunto de regras compartilhado e apontar vários projetos pra ele
Ótimo pra time que toca três, quatro repos com o mesmo padrão
- Zere a conversa sem perder o combinado. Quando o papo ficar longo demais,
/clearreinicia a conversa com contexto vazio e mantém a memória de projeto
O erro comum deste passo: fechar tudo e abrir de novo achando que precisa reexplicar o padrão do time. Não precisa
Se a sua dor for mais ampla que a dupla e envolver o time inteiro, vale ver como padronizar o agente entre vários devs do mesmo projeto
Passo a passo: revisar o código que o outro dev gerou com IA
Aqui mora a parte que quase ninguém faz direito
Revisar código gerado por IA de OUTRA pessoa é diferente de revisar o seu: você não viu o prompt, não viu o caminho, só o resultado
O Claude Code tem um comando embutido pra isso
- Rode a revisão no diff atual. O
/code-reviewrevisa o diff procurando bugs de correção e limpezas:
/code-review
O erro comum deste passo: rodar sem ter nada no diff e esperar uma auditoria do projeto inteiro. Ele olha o diff atual
- Escolha o nível de esforço. Os níveis são
low,medium,high,xhighemax
Em low e medium ele reporta só os achados de maior confiança
De high pra cima ele amplia a cobertura e pode incluir achados menos certos
/code-review high
O erro comum deste passo: não digitar nível nenhum e estranhar o resultado. Sem nível digitado, ele reutiliza o último nível usado
- Aplique os achados quando fizer sentido. A flag
--fixaplica o que a revisão encontrou:
/code-review high --fix
O erro comum deste passo: usar --fix com nível alto e aceitar tudo de olho fechado, inclusive os achados menos certos que o próprio nível alto assume trazer
- Revise um pull request específico. Passando um número de PR, ele revisa aquele PR:
/code-review high 1234
É o comando pra quando o outro dev já abriu o PR e você quer uma primeira passada antes de ler linha por linha
- Publique os achados no PR. A flag
--commentpublica os achados no pull request do GitHub como comentários inline:
/code-review high 1234 --comment
O erro comum deste passo: colar o resultado no chat do time e perder o contexto de qual linha era. Inline no PR resolve isso
- Instale a integração com GitHub. Do próprio Claude Code:
/install-github-app
Ele instala o GitHub App e prepara o pull request do workflow
Rodar de novo depois permite concluir as etapas de workflow e secret
Tem também a alternativa de instalar o app e copiar o arquivo de workflow manualmente
O erro comum deste passo: rodar uma vez, ver que abriu um PR e achar que acabou
- Confira as permissões que o app pede. São três, todas em leitura e escrita: Contents (pra modificar arquivos), Issues (pra responder issues) e Pull requests (pra criar PRs e enviar mudanças)
Tome cuidado ao aprovar isso em repositório de cliente sem avisar ninguém, beleza?
- Saiba onde a credencial fica. O Claude Code salva a credencial como repository secret, com nome
ANTHROPIC_API_KEYpara chave de API ouCLAUDE_CODE_OAUTH_TOKENpara token de assinatura
O erro comum deste passo: criar o secret na mão com outro nome e ficar caçando por que nada dispara
- Merge o PR de configuração. A menção
@claudepassa a funcionar no repositório depois que você cria e merge o pull request de configuração do workflow
O erro comum deste passo: mencionar @claude numa issue antes do merge e concluir que a integração está quebrada
Como funciona o Code Review automático em PR:
Vale entender o que roda por baixo, porque muda a sua expectativa sobre o resultado
Vários agentes analisam o diff e o código ao redor em paralelo na infraestrutura da Anthropic, cada um procurando uma classe diferente de problema
Depois, uma etapa de verificação confere os candidatos contra o comportamento real do código pra filtrar falso positivo
Os resultados são deduplicados, ordenados por severidade e publicados como comentários inline nas linhas onde o problema foi achado, com um resumo no corpo da revisão
Um detalhe que pega muita gente: pull request vindo de fork não é revisado automaticamente, independentemente da configuração de Review Behavior do repositório
Nesse caso, pra iniciar a revisão, é preciso comentar @claude review no pull request
Três cenários de dupla e como dividir o trabalho em cada um
Teoria é bonita, mas a dupla precisa saber o que fazer na segunda de manhã
Aqui vão os três arranjos mais comuns
| Cenário | Como isolar | Como revisar |
|---|---|---|
| Dois devs, features diferentes | Um worktree por feature, branch e PR próprios | /code-review antes de abrir cada PR |
| Dois devs, mesma feature | Dividir por camada ou por arquivo, combinado registrado no CLAUDE.md |
Revisão cruzada no PR, com --comment |
| Um gera, o outro revisa | Quem gera fica isolado no worktree | Quem revisa roda /code-review high 1234 |
Dois devs em features diferentes:
O caso mais fácil e o que o worktree resolve quase sozinho
Cada um sobe a própria sessão com claude -w <nome>, trabalha na branch worktree-<nome> e abre PR separado
Zero negociação de arquivo, porque os checkouts são diferentes
Dois devs na mesma feature:
Aqui não tem mágica: precisa de combinado humano
O jeito que funciona é dividir por camada (um no backend, outro no front) ou por arquivo, e registrar essa divisão no CLAUDE.md do projeto
Assim as duas sessões leem o mesmo combinado no início, e o agente do seu colega sabe que aquela pasta não é dele
Isso não é regra oficial de ferramenta, é prática de time mesmo
Um dev gerando enquanto o outro revisa:
Meu arranjo favorito pra tarefa grande
Quem gera fica isolado no worktree e não encosta no checkout principal
Quem revisa roda /code-review no PR e devolve os achados inline, sem nunca ter aberto o editor na mesma pasta
E pra enxergar quem está rodando o quê, existe um comando que lista as sessões vivas em JSON:
claude agents --json
Serve pra script, tipo barra de status ou seletor de sessão
Dá pra montar um indicadorzinho simples mostrando as sessões abertas da dupla. Mto massa pra quem gosta de tunar o terminal 😀
Problemas comuns quando duas sessões dividem o mesmo repositório
O worktree não é criado e aparece erro de base branch:
Sintoma: o comando falha com Failed to resolve base branch "HEAD": git rev-parse failed
Causa: o repositório não tem nenhum commit. O worktree é criado a partir de um commit existente
Solução: faça o primeiro commit no repositório e rode o comando de novo
Como prevenir: commit inicial antes de qualquer coisa em projeto novo, mesmo que seja só o README
Edit, Write ou comando de terminal recusado:
Sintoma: a sessão se recusa a editar um arquivo ou a rodar um comando que sempre funcionou
Causa: você está isolado em um worktree, e o Claude Code bloqueia chamadas de ferramenta que apontem pro checkout principal
Ele bloqueia Edit, Write ou NotebookEdit em caminho do checkout principal
Bloqueia comando Bash, PowerShell ou Monitor cujo diretório de trabalho caia no checkout principal OU não possa ser verificado
E bloqueia comando que redirecione o git pro checkout principal
As mesmas regras valem pra subagentes e pra sessões em background
Solução: trabalhe nos caminhos do próprio worktree, e se a intenção era mesmo mexer no principal, saia da sessão isolada
Como prevenir: nada de caminho absoluto apontando pra raiz antiga no meio dos seus scripts
Um monte de arquivo não rastreado no checkout principal:
Sintoma: git status cuspindo dezenas de arquivos estranhos
Causa: falta .claude/worktrees/ no .gitignore
Solução: adicione a linha e o barulho some
Como prevenir: isso entra junto com o setup do projeto, na mesma hora em que você configura o CLAUDE.md
App quebrado dentro do worktree:
Sintoma: o projeto roda no checkout principal, mas no worktree estoura falta de variável de ambiente
Causa: o .env é ignorado pelo git, então não foi pro worktree novo
Solução: liste esses arquivos no .worktreeinclude, no diretório raiz do projeto
Como prevenir: crie o .worktreeinclude junto com o primeiro worktree, não depois do primeiro erro
Histórico poluído com atribuição automática:
Sintoma: todo commit da dupla aparece com um co-autor que ninguém colocou
Causa: por padrão o commit inclui o trailer Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
Solução: a configuração attribution controla o texto de commit e de PR, e tem precedência sobre a antiga includeCoAuthoredBy (depreciada)
Pra esconder tudo, basta deixar commit e pr como strings vazias
Como prevenir: decidam isso em dupla e deixem registrado no .claude/settings.json, que é o arquivo feito pra ser commitado e compartilhado
Conclusão
Dois devs usando Claude Code no mesmo repositório não é problema de ferramenta, é problema de arranjo
E o arranjo tem três frentes: isolar (worktree por tarefa), combinar (regras versionadas que as duas sessões leem) e revisar (/code-review antes do PR)
Se você quiser fazer só uma coisa hoje, faça três coisas pequenas, que dão uns dez minutos no total:
- Adicione
.claude/worktrees/ao.gitignore - Suba um
CLAUDE.mdcurto com o combinado do time (curto mesmo, lembre do limite de 200 linhas) - Abra a próxima tarefa com
claude --worktree <nome>em vez de abrir na raiz
Depois disso, o hábito que muda o jogo é rodar /code-review antes de TODO pull request, e não só quando o código parece suspeito
Quando a revisão vira rotina, a dupla para de brigar com o repositório e volta a brigar com o problema real, que é o que interessa
até o próximo post! 😀
Perguntas frequentes
O Claude Code revisa automaticamente um pull request vindo de fork?
Não. O Claude não revisa PR de fork automaticamente, independente da configuração de Review Behavior do repositório. Pra iniciar a revisão nesse caso, é preciso comentar @claude review no próprio pull request.
Dá pra usar git worktree do Claude Code num repositório sem nenhum commit ainda?
Não dá. O worktree é criado a partir de um commit existente, então repositório vazio faz o comando falhar com ‘Failed to resolve base branch "HEAD": git rev-parse failed’. Por isso o primeiro pré-requisito antes de isolar os dois devs é ter pelo menos um commit no repo.
Qual o nome da branch criada pelo claude –worktree?
O valor que você passa no comando vira o nome do diretório do worktree, criado em .claude/worktrees/<nome>/ na raiz do repositório, e a branch nova se chama worktree-<nome>. Ou seja, rodando claude –worktree pagamentos você fica na branch worktree-pagamentos, com o prefixo na frente.
Como saber quais sessões do Claude Code estão rodando ao mesmo tempo no mesmo repositório?
O comando claude agents –json lista as sessões vivas em formato JSON. Dá pra usar isso em script, tipo barra de status ou seletor de sessão, pra enxergar o que cada dev está rodando sem perguntar no chat do time.
Quem aparece como autor quando o Claude Code gera um commit pro time?
Por padrão, o commit vem com o trailer Co-Authored-By: Claude Sonnet 4.6 <[email protected]>. Isso é controlado pela configuração attribution, que tem precedência sobre a antiga includeCoAuthoredBy (já depreciada); pra esconder essa atribuição, basta deixar commit e pr como strings vazias.
Qual arquivo de configuração do Claude Code o time deve commitar no repositório compartilhado?
.claude/settings.json é a configuração de projeto, feita pra ser versionada e valer pros dois devs. Já .claude/settings.local.json guarda preferência pessoal por projeto e não deve entrar no controle de versão; na precedência, local fica acima de projeto, que fica acima da configuração de usuário.
O Code Review automático em pull request funciona em qualquer plano do Claude Code?
Não, está disponível só para assinaturas Team e Enterprise. Se o plano for outro, a alternativa é rodar /code-review localmente, com níveis de esforço de low até max, e usar –comment quando quiser publicar os achados como comentário inline no PR.
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.
