Skip to main content
Open Source • Built for the Terminal

Split your work.Not your focus.

Sprout manages your git worktrees with isolated tmux sessions and dedicated AI agents, so you can work across multiple branches without ever losing your place.

Install via Homebrew
$brew tap joegrabski/sprout
$brew install sprout

git 2.5+  ·  tmux  ·  macos & linux  ·  mit

Everything your workflow needs

Sprout handles the overhead so you stay in flow.

01

See everything at once

A TUI showing all your worktrees with live status, active sessions, git state, and running agents, without leaving the terminal.

02

Tailored multi-pane sessions

Every worktree gets its own tmux session. Configure project-specific multi-pane layouts, auto-running dev servers, and consistent toolsets in one TOML rule.

03

An AI agent per branch

Run Codex, Aider, Claude Code, or Gemini inside each worktree. Each agent keeps its own independent context.

04

Work in parallel, ship faster

Tackle a hotfix, a feature, and a review at the same time. No stashing. No branch juggling. Every worktree stays ready.

05

Always a clean repo root

Worktrees live in a sibling directory. Your main checkout stays clean and easy to navigate.

06

Feels native to your shell

Shell hooks for zsh, bash, and fish let you navigate worktrees exactly like any other directory.

A few commands.

Simple, memorable commands that stay out of your way.

create a worktree
$sprout new feat checkout-redesign
✓ branch created
✓ tmux session launched
✓ agent ready
list all worktrees
$sprout list
* feat/checkout-redesign active
  main clean
  fix/login-bug clean
switch instantly
$sprout go fix/login-bug
~/projects/myapp.worktrees/fix-login-bug

A TUI built for parallel work.

Run sprout ui for a three-pane interface: every branch, its tmux session, git state, and running agent, all visible at once.

  • Jump between worktrees with a single keypress
  • Watch live agent output and git diffs side by side
  • Start, stop, and attach to agents without switching tabs
sprout ui
[1]-Status
myappmain selected: feat/checkout agent: ready
[2]-Details
AGENT OUTPUTGIT DIFF
[3]-Worktrees
CURBRANCHSTATUSAGENT
maindirtyn/a
*feat/checkoutdirtyready
fix/auth-bugdirtybusy
chore/cleanupcleanrunning
└ tab cycle focus │ esc close help │ INFO: ready2 of 4 feat/checkout
neovim
1 func main() {
2 fmt.Println("hello sprout")
3 }
-- INSERT --
dev server
[ready] listening on :8080
GET /api/health 200 OK
POST /api/worktrees 201 Created
[sprout-feat]
0:main*1:agent2:git
Feb 20 14:30

Configure your ideal environment.

Define every window and pane exactly how you work. Sprout scaffolds your entire workspace using simple TOML rules — from code editors to auto-running development servers.

.sprout.toml
# Match the layout shown on the left
[[windows]]
name = "main"
layout = "main-horizontal"
panes = [
  { run = "nvim ." },
  { run = "go run main.go" }
]

[[windows]]
name = "agent"
panes = [{ run = "codex" }]

[[windows]]
name = "git"
panes = [{ run = "lazygit" }]
  • Define project-specific split layouts
  • Auto-run your dev server or logs on launch
  • Perfectly consistent environments every time

Stop stashing. Start sprouting.

brew tap joegrabski/sprout && brew install sprout