treehouse es una herramienta de línea de comandos escrita en Go que facilita el aislamiento de entornos de desarrollo cuando se trabaja con Git worktrees. Asigna un número estable a cada worktree para que ese identificador sirva como base de configuración local: puertos, nombres de bases de datos o cualquier otro recurso que se quiera mantener separado por rama.
Su uso principal responde a un problema habitual: al abrir varios worktrees de un mismo repositorio, las aplicaciones que arrancan en puertos fijos (por ejemplo, un servidor de desarrollo en el 3000) colisionan entre sí. Con treehouse, el comando PORT="$(treehouse offset 3000)" npm run dev levanta el primer worktree en el puerto 3000, el segundo en el 3001, y así sucesivamente, sin reconfigurar manualmente cada entorno.
El número de worktree se guarda en un archivo .treehouse dentro del directorio de metadatos local de Git, normalmente .git/worktrees/<nombre>/ en worktrees enlazados. Ese archivo no se versiona y se elimina junto con los metadatos del worktree, por lo que no contamina el repositorio.
La herramienta ofrece cuatro subcomandos: init para asignar el siguiente número libre (o uno explícito con --set o reemplazar uno existente con --force); current para imprimir el número actual; offset <base> para sumar la base con el número de worktree; y run <comando> para ejecutar una orden con la variable de entorno WORKTREE_NUMBER ya definida. Los tres últimos fallan si el worktree no se ha inicializado previamente.
Entre los casos de uso documentados figuran: servidor de Rails/Puma con puerto derivado, nombre de base de datos PostgreSQL en config/database.yml con sufijo <%= treehouse current %>, aplicación Node con puerto dinámico y publicación de puertos en Docker (docker run -p "$(treehouse offset 8080):80" nginx).
Se distribuye como fórmula de Homebrew (brew install stemps/tap/treehouse) y como binario Go instalable con go install github.com/stemps/treehouse@latest. Las versiones se generan desde main mediante make release, que escribe un VERSION, etiqueta con SemVer (sin la v inicial) y dispara GitHub Actions para publicar artefactos y actualizar el tap stemps/homebrew-tap.
Como consideraciones, la herramienta es ligera y no invasiva —no requiere servidor ni base de datos—, pero depende de un único archivo local, por lo que debe ejecutarse treehouse init tras crear cada worktree. Las alternativas incluyen scripts de shell ad hoc o soluciones de orquestación más pesadas como Docker Compose con perfiles por rama, pero treehouse aporta una solución minimalista específica para el flujo de Git worktrees.
