Blog · Claude Code

Worktrees no Claude Code: sessões paralelas sem conflitos de edição

Uma worktree do 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. Inicie uma sessão com claude --worktree <name> e o Claude edita lá em vez de no seu checkout, então duas ou três sessões podem trabalhar ao mesmo tempo sem mexer nos arquivos umas das outras. Este guia cobre a flag, onde as worktrees ficam, de qual branch elas partem, como levar os arquivos .env para elas, a limpeza, os subagentes e as configurações.

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, como bright-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_modules e os artefatos de build. Uma worktree é um checkout novo.

O fluxo com worktrees, passo a passo

  1. 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, rode claude uma vez antes para aceitar o aviso de confiança do workspace; até lá, as execuções interativas com --worktree se encerram.

  2. 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 ferramenta EnterWorktree.

    # 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/" >> .gitignore
  3. Leve junto os arquivos não rastreados

    Liste os arquivos ignorados pelo git de que o projeto precisa, como .env e .env.local, em um arquivo .worktreeinclude na 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 único node_modules e faz checkout só do pacote web.

    {
      "worktree": {
        "baseRef": "head",
        "symlinkDirectories": ["node_modules"],
        "sparsePaths": [".claude", "packages/web"]
      }
    }
  4. 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 como cp escreve, então permissões e sandbox continuam importando.

  5. 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.

  6. 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> --resume para 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çãoO que fazPadrã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.symlinkDirectoriesCria symlinks de diretórios como node_modules a partir do checkout principal em vez de duplicá-losNenhum
worktree.sparsePathsFaz 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 novaNenhum

Worktree do Claude Code vs branch vs git worktree

Trocar de branch`git worktree add` + `claude``claude --worktree`
Arquivos separados no discoNão: um diretório, uma branch por vezSimSim
Várias sessões ao mesmo tempoNão: uma sobrescreve a outraSimSim
Onde ficaO seu checkoutOnde você quiser.claude/worktrees/<name>/, ou o caminho de um hook
Parte deA branch para a qual você trocaQualquer branch existente ou novaorigin/<default>, o seu HEAD ou um PR
Copia o .envNão precisaNãoSim, com .worktreeinclude
Bloqueia edições fora delaNãoNãoSim
LimpezaNenhumagit worktree removeOferecida 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.

  1. Crie a worktree, inicie o Claude e remova quando terminar

    Troque feature-a pelo nome de uma branch nova, ou tire o -b para 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: worktree ao 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 com claude --bg --worktree ou defina worktree.bgIsolation como "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 --worktree não têm o aviso de saída, então deixam as worktrees para trás. Remova-as com git worktree remove, depois de git worktree unlock se o git disser que ela está travada.
  • Can only use --worktree in a git repository: rode git init e faça um primeiro commit, ou configure um hook WorktreeCreate para SVN, Perforce ou Mercurial.
  • Arquivos do Git LFS aparecem como arquivos ponteiro quando o LFS foi instalado com --local: rode git lfs pull dentro da worktree.
  • O Claude Code não cria uma worktree quando .claude ou .claude/worktrees é um symlink.
  • Os hooks mantêm ${CLAUDE_PROJECT_DIR} apontando para o checkout principal; leia o campo cwd da 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.
Com o Crewmark

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.

  1. 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.

  2. 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.

  3. 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.

Dê a cada worktree um funcionário que sabe o que fazer em seguida.

O Crewmark transforma sessões do Claude Code, Codex e DeepSeek Harness em funcionários de IA com papéis, metas, horários de trabalho e um heartbeat.