grove

Um pool rápido de worktrees Git reutilizáveis com reservas persistentes, disponível por CLI e SDK.

Se você executa muitas tarefas no mesmo repositório, conhece a rotina. Agentes, CI, tarefas paralelas, tanto faz. Clonar de novo. Fazer fetch de novo. Esperar. Criei o Grove para escapar disso.

É um SDK e uma CLI em TypeScript que mantêm um pool de worktrees Git prontos para uso. Você adquire uma reserva, recebe um checkout isolado associado a um leaseId estável, faz seu trabalho e libera quando termina. Sem clonar tudo novamente a cada vez. Sem ficar olhando para git fetch enquanto outras três tarefas se acumulam atrás.

Veja o código no GitHub

Qual problema ele resolve

A maioria das ferramentas trata cada tarefa como um começo do zero. O Grove trata checkouts mais como algo que você pega emprestado e devolve.

Você reserva um espaço com um ID de reserva, faz checkout de uma branch ou referência, executa sua tarefa (mesmo se o processo reiniciar) e depois libera, repara ou destrói o espaço. Seus commits e alterações locais permanecem até você escolher uma política de limpeza: preservar (preserve), redefinir (reset) ou colocar em quarentena se algo der errado.

Do que eu gosto

Algumas coisas das quais tenho bastante orgulho:

  • Reservas persistentes. O estado sobrevive a reinicializações. Adquira novamente o mesmo leaseId e continue de onde parou.
  • Reutilização rápida. A redefinição usa git clean -fd, não -xfd, então arquivos ignorados, como node_modules, continuam ali entre execuções.
  • Recuperação de falhas. Registro antecipado do estado e um repair() explícito quando algo fica preso no meio de uma operação.

CLI e SDK

O Grove oferece duas formas de uso.

Há uma CLI (@ferueda/grove-cli) para executar comandos no terminal ou em scripts de shell. Todos os comandos aceitam --json com estruturas de resposta estáveis, ótimo para conectar ferramentas e fazer automações rápidas.

Também criei um SDK TypeScript (@ferueda/grove) porque meus agentes e automações precisavam criar worktrees diretamente no código. Sem chamar uma CLI pelo shell, sem analisar stdout. Seu orquestrador chama acquire, recebe um caminho, executa o trabalho e chama release. Essa é a interface que eu realmente queria para fluxos com agentes.