grove

Multi-repo worktrees for AI agents

Give every agent
its own grove.

A grove is a workspace with a worktree of every repo your feature touches — all on one branch, so a single agent works across them like a monorepo. Each is isolated, so you can run a dozen in parallel.

One command, every repo Installs itself Lives in your shell MIT

Installation

Hand this to your coding agent.

grove installs itself. Paste this into Claude Code (or any AI CLI) — it clones grove, then follows the guided setup baked into the repo, one question at a time.

bootstrap prompt
Clone grove from https://github.com/shivgodhia/grove to ~/.zsh/grove.
Then open its README.md, find the guided "Installation" prompt, and follow it
exactly — walking me through setup and configuration one question at a time.
Or just run the full guided-setup prompt (what the agent will run)
also available in the grove README
Loading the guided-setup prompt…
Prefer to do it by hand?
four commands — clone, source, config, reload
# clone grove
git clone https://github.com/shivgodhia/grove ~/.zsh/grove

# load it in your shell
echo 'source ~/.zsh/grove/grove.zsh' >> ~/.zshrc

# start from the example config
cp ~/.zsh/grove/grove.local.example.zsh ~/.zsh/grove/grove.local.zsh

# reload
source ~/.zshrc

Then edit grove.local.zsh to point grove at your repos — the README walks through every option.

How it grows

One workspace.
Every repo.
One command.

Set up the group once. From then on, any branch is a single gv call — and everything else is already done.

Set up once

Name a group of repos: fullstack = frontend + backend.

Then, one command

gv fullstack dark-mode — a worktree in every repo on the same branch, deps installed, one agent that sees them all, in a fresh tmux session with your agent already running. Any repo fails, they all roll back.

What it does

Small tool. Whole workflow.

Run several branches — and several agents — in parallel without tripping over yourself.

A monorepo on demand

One workspace holds a worktree of every repo your feature touches — same branch, one folder. Your agent works across the whole set at once, understanding all of them, as if it were a monorepo you never had to migrate to.

Isolated checkouts

Every workspace is its own private set of checkouts. Run a dozen agents in parallel and none of them share a directory or a branch — no stomping on each other, no stashing, no “which agent touched this file?”

  • Interactive TUI. Type gv for an fzf dashboard of every workspace — branch tree and PR status included.
  • Survives restarts. A reboot, a crash, a killed tmux — reopen the workspace and your agent resumes right where you left off.
  • One Zsh file, MIT. No app, no binary, no daemon — lightweight, open source, yours to read and hack.
  • Atomic setup. If any repo fails, grove rolls the whole workspace back — no half-planted mess to clean up.

But my agent already does worktrees

Worktrees, yes.
Across your repos, no.

Claude Code and Cursor already give each agent its own worktree — but only within a single repo. A real feature rarely stays in one. The moment your change spans a frontend and a backend, you’re back to coordinating branches across separate clones by hand. That’s the part grove does.

native worktrees one repo each
  1. a worktree per agent — but only within one repo
  2. a feature that spans frontend and backend means two of them
  3. two agents, each seeing only its own repo
  4. and you’re the one relaying context between them
grove every repo the feature touches
 gv fullstack dark-mode

One workspace, a worktree of every repo the feature touches, all on the same branch — and a single agent that sees the whole set, so nobody has to relay context between them. Still isolated, still one command.

Field guide

The whole vocabulary.

One verb — gv — does it all.

gv --help
everyday
gv
Open the interactive TUI dashboard
gv <workspace> <name>
Create or attach to a workspace instance
gv <workspace> <name> <cmd>
Run a command in the workspace (no tmux)
gv --ls
See your branch stack, Graphite gt ls–style
gv --list
List every workspace and instance
tending
gv --no-tmux <workspace> <name>
Create it, print its dir, skip tmux (for scripts & agents)
gv --rm [--force] <ws> <name>
Remove an instance (--force if it's dirty)
gv --kms [--force]
Remove the current workspace, from inside it
gv --home
cd to your projects directory
gv --update
Pull the latest grove
gv --help
Show the full usage guide

Give every feature its own grove.

Isolated workspaces across your repos, so your agents run in parallel without stepping on each other. grove is one Zsh file, MIT-licensed, and installs itself in a couple of minutes.