Worktrees no Claude Code, explicadas
O git tem worktrees há anos: git worktree add faz checkout de uma branch em um segundo diretório, apoiado nos mesmos dados do .git. O Claude Code se baseia nisso. Com --worktree (ou -w), ele cria a worktree para você, inicia a sessão dentro dela, bloqueia edições que cairiam no seu checkout principal e oferece fazer a limpeza quando você sai.
As worktrees isolam arquivos, e nada mais. Para dividir uma tarefa entre vários workers dentro de uma única conversa, use subagentes; para comparar as opções, veja vários agentes do Claude Code.
- Local padrão:
.claude/worktrees/<name>/, na raiz do repositório. - Nome de branch padrão:
worktree-<name>. Se você não der um nome, o Claude Code escolhe um, comobright-running-fox. - Compartilhado com o seu checkout: o diretório
.git(então commits e branches aparecem em todo lugar), os plugins do projeto e as aprovações de permissão de "não perguntar de novo". - Não compartilhado: tudo o que está no .gitignore, como
.env,node_modulese os artefatos de build. Uma worktree é um checkout novo.
O fluxo com worktrees, passo a passo
Ignore a pasta das worktrees
Adicione
.claude/worktrees/ao.gitignore, para que os arquivos das worktrees não apareçam como não rastreados no seu checkout principal. Se você nunca rodou o Claude neste repositório, rodeclaudeuma vez antes para aceitar o aviso de confiança do workspace; até lá, as execuções interativas com--worktreese encerram.Inicie uma sessão por tarefa
Rode
claude --worktree <name>em um terminal para cada tarefa. Rodar de novo com um nome que já existe reabre essa worktree em vez de criar outra. Você também pode pedir ao Claude no meio da sessão para "trabalhar em uma worktree", e ele se move para uma com a ferramentaEnterWorktree.# Duas sessões isoladas, cada uma no próprio terminal claude --worktree feature-auth claude --worktree fix-flaky-test # Crie uma worktree a partir do pull request 1234 (coloque o # entre aspas) claude --worktree "#1234" # Deixe as worktrees fora do git status echo ".claude/worktrees/" >> .gitignoreLeve junto os arquivos não rastreados
Liste os arquivos ignorados pelo git de que o projeto precisa, como
.enve.env.local, em um arquivo.worktreeincludena raiz do repositório, com a sintaxe do.gitignore. O Claude Code copia os arquivos que combinam para cada worktree que cria, inclusive as de subagentes e as do app desktop. Depois instale as dependências na worktree, ou configure isso nas configurações: este exemplo parte do seu trabalho atual, reaproveita um úniconode_modulese faz checkout só do pacote web.{ "worktree": { "baseRef": "head", "symlinkDirectories": ["node_modules"], "sparsePaths": [".claude", "packages/web"] } }Deixe as sessões trabalharem
Enquanto uma sessão está isolada, o Claude Code recusa edições de arquivo que apontam para o checkout principal, comandos cujo diretório de trabalho é o checkout principal e comandos git redirecionados para ele (
git -C,--git-dir,GIT_DIR). Ele não acompanha o que um comando de shell comum comocpescreve, então permissões e sandbox continuam importando.Revise e faça o merge como qualquer branch
Cada worktree é uma branch normal. Faça commit e push de dentro dela, abra um pull request e revise como faria com o de um colega. Como todas as worktrees compartilham o
.git, a branch aparece no seu checkout principal na hora.Saia e faça a limpeza
Quando você sai, o Claude Code verifica a worktree. Uma worktree limpa de uma sessão sem nome é removida automaticamente junto com a branch; uma sessão com nome pergunta antes. Se houver alterações, arquivos não rastreados ou commits novos, ele pergunta se deve manter ou remover a worktree e mostra um comando
claude --worktree <name> --resumepara você voltar depois.
Fonte: documentação do Claude Code, Run parallel sessions with worktrees
Configurações de worktree no Claude Code
Todas ficam sob worktree em um arquivo de configurações (~/.claude/settings.json, .claude/settings.json ou .claude/settings.local.json).
| Configuração | O que faz | Padrão |
|---|---|---|
worktree.baseRef | "fresh" parte da branch padrão do remoto (origin/main); "head" parte do seu HEAD local, incluindo commits ainda não enviados | "fresh" |
worktree.symlinkDirectories | Cria symlinks de diretórios como node_modules a partir do checkout principal em vez de duplicá-los | Nenhum |
worktree.sparsePaths | Faz checkout só dos diretórios listados (mais os arquivos da raiz) com sparse-checkout; inclua .claude | Árvore inteira |
worktree.bgIsolation | "worktree" faz as sessões em background editarem só dentro de uma worktree; "none" deixa que editem a cópia de trabalho | "worktree" |
| Local das worktrees (app desktop) | Settings > Code define uma pasta própria para as sessões locais; conexões SSH têm a delas | .claude/worktrees/ |
.worktreeinclude (arquivo, não configuração) | Copia os arquivos ignorados pelo git que combinam para cada worktree nova | Nenhum |
Worktree do Claude Code vs branch vs git worktree
| Trocar de branch | `git worktree add` + `claude` | `claude --worktree` | |
|---|---|---|---|
| Arquivos separados no disco | Não: um diretório, uma branch por vez | Sim | Sim |
| Várias sessões ao mesmo tempo | Não: uma sobrescreve a outra | Sim | Sim |
| Onde fica | O seu checkout | Onde você quiser | .claude/worktrees/<name>/, ou o caminho de um hook |
| Parte de | A branch para a qual você troca | Qualquer branch existente ou nova | origin/<default>, o seu HEAD ou um PR |
Copia o .env | Não precisa | Não | Sim, com .worktreeinclude |
| Bloqueia edições fora dela | Não | Não | Sim |
| Limpeza | Nenhuma | git worktree remove | Oferecida ao sair |
Fazendo à mão com git worktree
Use o git puro quando quiser uma branch específica que já existe ou uma pasta fora do repositório; o worktree.baseRef não consegue apontar para uma branch. O Claude Code continua compartilhando plugins e aprovações de permissão com essas worktrees.
Crie a worktree, inicie o Claude e remova quando terminar
Troque
feature-apelo nome de uma branch nova, ou tire o-bpara fazer checkout de uma branch que já existe.git worktree add ../app-feature-a -b feature-a cd ../app-feature-a && claude git worktree list git worktree remove ../app-feature-a
Subagentes e sessões em background em worktrees
- Peça ao Claude para "usar worktrees para os seus agentes", ou adicione
isolation: worktreeao frontmatter de um subagente personalizado em.claude/agents/, e cada subagente edita na própria worktree temporária. - A worktree de um subagente sem alterações é removida quando o subagente termina. Uma com alterações fica até que uma limpeza periódica consiga removê-la sem perder trabalho, depois de
cleanupPeriodDays. - Sessões em background (
claude --bg) editam só dentro de uma worktree por padrão; inicie uma comclaude --bg --worktreeou definaworktree.bgIsolationcomo"none". - No app desktop, ative Worktree embaixo da caixa de prompt antes de iniciar uma sessão.
Limpeza de worktrees e problemas comuns
- Execuções com
claude -p --worktreenão têm o aviso de saída, então deixam as worktrees para trás. Remova-as comgit worktree remove, depois degit worktree unlockse o git disser que ela está travada. Can only use --worktree in a git repository: rodegit inite faça um primeiro commit, ou configure um hookWorktreeCreatepara SVN, Perforce ou Mercurial.- Arquivos do Git LFS aparecem como arquivos ponteiro quando o LFS foi instalado com
--local: rodegit lfs pulldentro da worktree. - O Claude Code não cria uma worktree quando
.claudeou.claude/worktreesé um symlink. - Os hooks mantêm
${CLAUDE_PROJECT_DIR}apontando para o checkout principal; leia o campocwdda entrada do hook para obter o caminho da worktree. - Uma worktree com base
"fresh"e sem commits próprios, ou cujo PR já passou pelo merge, volta para a branch padrão quando você a reabre pelo nome.
As worktrees mantêm as sessões separadas. O Crewmark as mantém ocupadas.
As worktrees resolvem o problema das colisões, mas cada sessão continua parada até você digitar. O Crewmark transforma uma sessão do Claude Code, Codex, DeepSeek Harness ou OpenCode em um funcionário de IA com um papel, uma meta e um horário de trabalho, e a acorda com um heartbeat para pegar a próxima issue de um quadro.
Um funcionário por worktree
Dê a cada funcionário a própria worktree e um papel, como um programador e um revisor no mesmo repositório, como em vários agentes do Claude Code.
Deixe o heartbeat iniciar o trabalho
Durante o horário de trabalho, cada funcionário acorda a cada 15, 30 ou 60 minutos na mesma conversa; veja como tornar o Claude Code proativo.
Atribua issues e revise as branches
Coloque o trabalho no quadro; cada funcionário pega uma issue, faz commit na própria branch e avisa você quando precisa de uma decisão. Leia o que é um funcionário de IA.
Perguntas frequentes sobre worktrees no Claude Code
O que é uma worktree no Claude Code?
Um diretório de trabalho do git separado, com os próprios arquivos e a própria branch, que compartilha o histórico do seu repositório. claude --worktree <name> cria uma e roda a sessão dentro dela, então sessões paralelas não editam os mesmos arquivos.
Onde o Claude Code coloca as worktrees?
Em .claude/worktrees/<name>/, na raiz do repositório, em uma branch chamada worktree-<name>. O app desktop permite escolher outra pasta em Settings, e um hook WorktreeCreate pode colocá-las em qualquer lugar.
De qual branch uma worktree do Claude Code parte?
Por padrão, da branch padrão do remoto, normalmente origin/main. Defina worktree.baseRef como "head" para partir do seu HEAD local, passe "#1234" para começar de um pull request ou crie a worktree com git worktree add para qualquer outra branch.
Por que o meu arquivo .env não está na worktree?
Uma worktree é um checkout novo, então os arquivos ignorados pelo git não estão lá. Liste-os em um arquivo .worktreeinclude na raiz do repositório e o Claude Code os copia para cada worktree nova.
Como faço a limpeza das worktrees do Claude Code?
Ao sair de uma sessão, ele oferece remover a worktree dela, e remove sozinho as que estão limpas e sem nome. As worktrees de execuções com -p ficam para trás: liste-as com git worktree list e remova-as com git worktree remove.
Worktree ou branch: qual é a diferença?
Uma branch é uma linha de commits; uma worktree é um diretório onde uma branch está em checkout. Trocar de branch muda os arquivos do seu único diretório, enquanto as worktrees dão a cada branch o próprio diretório, então várias sessões podem rodar ao mesmo tempo.
Os subagentes podem usar worktrees?
Sim. Peça ao Claude que use worktrees para os agentes dele, ou adicione isolation: worktree ao frontmatter de um subagente personalizado. Cada um recebe uma worktree temporária, que é removida se ele não fizer alterações.
Conferido com a documentação do Claude Code (worktrees, configurações, referência da CLI e app desktop) em 6 de novembro de 2026.