Rodar vários agentes de IA ao mesmo tempo tem dois problemas.

O primeiro: na mesma pasta, um pisa no outro. Edita o mesmo arquivo, roda os testes no meio da mudança do outro. O segundo: você passa o dia clicando em aba de terminal pra ver quem já terminou e quem ainda tá trabalhando.

Eu, com três abas de agente abertas

O Herdr resolve os dois. Eu gravei um tutorial curto instalando ele e colocando dois Claude Code trabalhando em paralelo no CourseShelf, um projeto real meu em Elixir e Phoenix. Aqui vai a versão escrita.

https://youtu.be/Rjgxo1vLVUE

Instalar é uma linha

curl -fsSL https://herdr.dev/install.sh | sh

Depois é só rodar herdr em qualquer diretório.

Uma coisa que eu gosto: dá pra usar o Herdr inteiro com o mouse. Clicar pra trocar de pane, arrastar a borda pra redimensionar, botão direito pra abrir menu. Você não precisa decorar nada pra começar.

Mas tudo tem atalho, e todos começam pelo prefixo ctrl+b. Você aperta ctrl+b, solta, e a próxima tecla vai pro Herdr, não pro programa rodando no terminal. É assim porque o agente e o shell já usam quase todas as combinações. Quem usa tmux já conhece. E ctrl+b seguido de ? mostra todos os atalhos.

Os que eu usei no vídeo:

AçãoAtalho
abrir um projeto (space)ctrl+b shift+n
nova worktreectrl+b shift+g
nova abactrl+b c
trocar de worktreectrl+b w
Goto (lista de agentes)ctrl+b g
fechar a janelactrl+b q
todos os atalhosctrl+b ?

Pra abrir um projeto, eu clico em New na sidebar e dou cd pra pasta. Isso é um space, um por projeto. A sidebar já mostra o CourseShelf na branch main.

Uma worktree por agente

Pra um agente não pisar no outro, cada um trabalha numa git worktree: outra pasta do mesmo repositório, na sua própria branch. No Herdr é botão direito no space, New worktree, nome da branch, Create and open. Ela aparece agrupada embaixo do projeto na sidebar.

Só que a worktree vem só com o que tá no Git. Então são mais três passos: secrets, dependências e escolher uma porta pro servidor local rodar.

Secrets

Os secrets do CourseShelf ficam no config/dev.secret.exs, que tá no .gitignore. Pra eles irem junto, eu tenho um arquivo .worktreeinclude na raiz do projeto:

# .worktreeinclude (courseshelf-v2)
config/dev.secret.exs

Esse arquivo diz pro Claude Code e pro app do ChatGPT que, quando eles criarem uma worktree nova, é pra copiar esse arquivo. Por padrão o Herdr não lê o .worktreeinclude, então eu tive que instalar um plugin da comunidade pra esse workflow funcionar, o herdr-worktreeinclude:

herdr plugin install eightHundreds/herdr-worktreeinclude

Dependências e porta

Pro servidor, eu abro uma aba nova na worktree. Primeiro as dependências, que no Elixir e Phoenix é mix deps.get.

Depois a porta. Por padrão o meu servidor usa a 4001, mas ele lê a variável de ambiente PORT:

# config/dev.exs (courseshelf-v2)
http: [ip: {127, 0, 0, 1}, port: String.to_integer(System.get_env("PORT", "4001"))],

Então eu subo com PORT=4002 na primeira worktree e PORT=4003 na segunda. Cada worktree com o seu servidor, na sua aba. Na segunda worktree eu só repeti o processo: os secrets já tinham sido copiados automaticamente.

Dois Claude Code trabalhando

Com as duas worktrees de pé, eu abri o Claude Code em cada uma. Na primeira, um botão pra copiar o link do post no blog. Na segunda, mudar o layout da lista de posts pra um grid de duas colunas. Um mexe na página do post, o outro na lista de posts.

São tarefas que não dependem uma da outra. Se dependem, é fila, não paralelo.

O Herdr reconhece o Claude Code sozinho, e Codex, OpenCode e vários outros. A sidebar mostra o estado de cada agente: os dois working.

E aqui tá a parte que resolve o segundo problema. Eu tava olhando uma aba quando o outro agente terminou. A sidebar marca done, aparece uma notificação e toca um som. Ele fica done até eu abrir. Se o agente pede permissão pra rodar um comando, ele aparece como blocked, esperando você, do mesmo jeito.

Os agentes me esperando

Pra navegar entre os agentes, dá pra usar a sidebar. Mas com ctrl+b e g eu abro o Goto, que lista todos os agentes, e apertando d ele filtra os que estão done.

Fechar o terminal não mata nada

Com os dois agentes trabalhando, eu fechei a janela do terminal (ctrl+b e q). Abri outra, rodei herdr de novo, e tava tudo lá.

O Herdr roda num servidor em background. Quem guarda os terminais é ele, não a janela que você tá vendo.

O gargalo agora sou eu

Os dois terminaram, e agora são duas mudanças pra revisar.

Primeiro no navegador. Na porta 4002, na página do post, o botão copia o link. Na 4003, as duas colunas na lista de posts, e uma só quando eu diminuo a janela.

Depois o código. Eu leio o diff dentro do próprio agente, com /diff. Um detalhe: com o zoom do terminal muito grande, o /diff não cabia. Escondi a sidebar do Herdr com o mouse, dei um zoom out e rodei de novo. No grid, uma alteração pequena no CSS. No botão de copiar, o agente também mexeu nas traduções, porque o CourseShelf tá em sete línguas.

Depois de revisar, fica a seu critério abrir uma PR ou fazer o merge na sua própria máquina.

Limpando

Depois do merge, botão direito na worktree e Delete worktree checkout. Esse não tem atalho por padrão, mas dá pra configurar um.

O Herdr roda git worktree remove, mas não apaga a branch. Isso é com você:

git branch -d blog-grid

Para ser justo

O Claude desktop também cria uma worktree por sessão, com diff e navegador embutidos. Se você prefere interface gráfica e só usa Claude, ele resolve.

Eu volto pro Herdr quando quero ficar no terminal, misturar Claude Code com Codex e OpenCode lado a lado, ou deixar tudo rodando depois de fechar a janela.

Meu veredito

Comece com dois agentes. Mais do que isso não adianta se você não consegue revisar o que eles fazem. O Herdr tira o caos de rodar agentes em paralelo, mas não tira de você a revisão.

Vídeo no YouTube: https://youtu.be/Rjgxo1vLVUE

Conheça meu trabalho: https://bergholz.com.br/

Obrigado por ler até aqui.

the end