Documentação oficial desta página · v0.20.6
Git Worktrees
O Hermes Agent costuma ser usado em repositórios grandes e de vida longa. Quando você quer:
- rodar vários agentes em paralelo no mesmo projeto, ou
- manter refatorações experimentais isoladas da sua branch principal,
as worktrees do Git são o jeito mais seguro de dar a cada agente um clone próprio, sem duplicar o repositório inteiro.
Esta página mostra como combinar worktrees com o Hermes, para cada sessão ter um diretório de trabalho limpo e isolado.
Por que usar worktrees com o Hermes
O Hermes trata o diretório de trabalho atual como a raiz do projeto:
- CLI: o diretório onde você roda
hermesouhermes chat - Gateways de mensagem: o diretório definido em
terminal.cwd, no~/.hermes/config.yaml
Se você roda vários agentes no mesmo clone, as mudanças de um atrapalham o outro:
- Um agente pode apagar ou reescrever arquivos que o outro está usando.
- Fica difícil entender quais mudanças pertencem a qual experimento.
Com worktrees, cada agente ganha:
- a própria branch e o próprio diretório
- o próprio histórico de checkpoints, para o
/rollback
Veja também: Checkpoints e Rollback.
Começando: criar uma worktree
De dentro da sessão: /worktree new
O caminho mais rápido (inspirado no /worktree new do Copilot CLI): numa sessão interativa, rode
/worktree new meu-experimento
O Hermes cria .worktrees/meu-experimento/ dentro do repositório (branch
hermes/meu-experimento, baseada na ponta remota recém-buscada, a menos que
worktree_sync: false) e reaponta as ferramentas de terminal e de arquivo da sessão para lá — sem
reiniciar. Omita o nome para ganhar uma árvore aleatória hermes-<id>. O /worktree sozinho mostra
a árvore ativa; /worktree list lista todas. Na saída, a árvore só é mantida se tiver commits não
enviados, igual ao hermes -w.
Na mão, com o git
A partir do repositório principal (o que contém o .git/), crie uma worktree para uma branch:
# na raiz do repositório principal
cd /caminho/do/seu/repo
# cria uma branch nova e uma worktree em ../repo-feature
git worktree add ../repo-feature feature/hermes-experimento
Isso cria:
- um diretório novo:
../repo-feature - uma branch nova:
feature/hermes-experimento, com checkout naquele diretório
Agora dá para entrar na worktree e rodar o Hermes lá:
cd ../repo-feature
# começa o Hermes na worktree
hermes
O Hermes vai:
- enxergar
../repo-featurecomo a raiz do projeto - usar aquele diretório para arquivos de contexto, edições e ferramentas
- usar um histórico de checkpoints separado, no escopo daquela worktree
Vários agentes em paralelo
Dá para criar várias worktrees, cada uma com a própria branch:
cd /caminho/do/seu/repo
git worktree add ../repo-experimento-a feature/hermes-a
git worktree add ../repo-experimento-b feature/hermes-b
Em terminais separados:
# Terminal 1
cd ../repo-experimento-a
hermes
# Terminal 2
cd ../repo-experimento-b
hermes
Cada processo do Hermes:
- trabalha na própria branch (
feature/hermes-aefeature/hermes-b) - grava checkpoints sob um repositório-sombra diferente (derivado do caminho da worktree)
- usa o
/rollbackde forma independente, sem afetar o outro
Isso é útil principalmente para:
- refatorações em lote
- tentar abordagens diferentes para a mesma tarefa
- parear sessões de CLI e de gateway contra o mesmo repositório remoto
Limpar worktrees com segurança
Quando você terminar um experimento:
- Decida se vai manter ou descartar o trabalho.
- Para manter, incorpore a branch na principal, como de costume.
- Remova a worktree:
cd /caminho/do/seu/repo
# remove o diretório da worktree e a referência a ela
git worktree remove ../repo-feature
Observações:
- O
git worktree removese recusa a remover uma worktree com mudanças não commitadas, a não ser que você force. - Remover a worktree não apaga a branch; use os comandos normais de
git branchpara apagar ou manter. - Os dados de checkpoint em
~/.hermes/checkpoints/não são limpos sozinhos quando você remove uma worktree, mas costumam ser bem pequenos.
Boas práticas
- Uma worktree por experimento
- Crie uma branch e uma worktree dedicadas a cada mudança relevante.
- Isso mantém os diffs focados e os pull requests pequenos e revisáveis.
- Nomeie as branches pelo experimento
- Por exemplo,
feature/hermes-docs-checkpoints,feature/hermes-refatorar-testes.
- Por exemplo,
- Faça commit com frequência
- Use commits do git para os marcos importantes.
- Use checkpoints e o
/rollbackcomo rede de segurança para as edições feitas pelas ferramentas no meio do caminho.
- Evite rodar o Hermes na raiz do repositório principal quando usar worktrees
- Prefira os diretórios das worktrees, para cada agente ter um escopo claro.
Usando o hermes -w (modo automático)
O Hermes tem a opção -w, que cria uma worktree descartável automaticamente, com branch
própria. Não é preciso montar worktree na mão — entre no repositório e rode:
cd /caminho/do/seu/repo
hermes -w
O Hermes vai:
- criar uma worktree temporária em
.worktrees/, dentro do repositório - fazer checkout de uma branch isolada (
hermes/hermes-<hash>, por exemplo) - rodar a sessão inteira dentro dela
É o jeito mais fácil de conseguir isolamento. Também dá para combinar com uma pergunta única:
hermes -w -z "Corrija a issue #123"
Para agentes em paralelo, abra vários terminais e rode hermes -w em cada um — cada invocação ganha
worktree e branch próprias, sozinha.
Juntando tudo
- Use worktrees do git para dar a cada sessão um clone limpo.
- Use branches para registrar o histórico de alto nível dos experimentos.
- Use checkpoints e
/rollbackpara se recuperar de erros dentro de cada worktree.
A combinação rende:
- garantia forte de que agentes e experimentos diferentes não se atropelam
- ciclos de iteração rápidos, com recuperação fácil de edições ruins
- pull requests limpos e revisáveis
Desenvolver as interfaces em várias worktrees
As superfícies em TypeScript (ui-tui/, apps/desktop/) precisam cada uma de um node_modules, e
um npm ci novo por worktree duplica isso em toda branch. Se você mexe na TUI ou no aplicativo
desktop a partir de várias worktrees, veja
TUI e Desktop a partir de Worktrees, com os
auxiliares htui e hgui, que compartilham uma instalação só por link simbólico.