Skip to main content

Split your work.Not your focus.

Every branch gets its own worktree, tmux session, and AI agent, so you can work in parallel 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, and git diffs, without leaving the terminal.

02

Tailored multi-pane sessions

Per-project multi-pane layouts, auto-running dev servers, and a consistent toolset, scaffolded from 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. Preview panes load your full shell profile, so your tools are always on PATH.

07

Preview any branch, live

Promote any worktree to a live preview: your whole stack (APIs, web apps, mobile bundler) runs from that branch in a dedicated session. Switch which branch is live with one command.

08

Configs that follow your tunnels

Expose a service through ngrok and Sprout rewrites the URL into your app config whenever it changes. No stale tunnel URLs, no hand-editing, no rebuilds.

A few commands.

Simple, memorable commands that stay out of your way.

create a worktree
$sprout new feat checkout-redesign
✓ Created worktree: ~/projects/myapp.worktrees/feat-checkout-redesign
list all worktrees
$sprout list
* feat/checkout-redesign dirty
  main clean
  fix/login-bug clean
switch instantly
$spr go fix/login-bug
✓ ~/projects/myapp.worktrees/fix-login-bug
sprout preview
$sprout preview feat/checkout-redesign
✓ Preview now running from feat/checkout-redesign
  api → https://a1b2c3.ngrok.app

Preview any branch. Configs follow.

Promote any worktree to a live preview and Sprout runs your whole stack from it. Expose a service through ngrok and Sprout rewrites the URL into your app config whenever it changes — no editing, no rebuilds.

.sprout.toml
[[preview_sync]]
file = "{worktree}/web/config.json"
reload_windows = ["web"]

  [[preview_sync.set]]
  path = "api.baseUrl"
  tunnel = "api"
  • Run your real stack against any agent's branch
  • Tunnel URLs synced into your config automatically
  • Switch previews with one command, no rebuilds

A TUI built for parallel work.

Run sprout to see every worktree at once, with its branch, pull request, CI result, tmux session and what its agent is doing, then act on it without leaving.

  • Spot the agent that needs input among a dozen that are busy
  • Review, stage, commit or discard changes right next to the diff
  • Watch an agent live, then attach to tmux only when it matters
  • Start a worktree from a branch, an issue or a pull request
sprout ui — acme-api
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-myapp-feat-api]
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 from 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
claude
$sprout skills install
✓ installed sprout-init to ~/.claude/skills
✓ installed sprout-issue to ~/.claude/skills
>/sprout-issue 123
✓ worktree feature/123-fix-login ready
  agent is planning, waiting for your review

Skills for your agent. One command.

Sprout ships Claude Code skills that drive sprout for you. Point one at a GitHub issue and get a worktree with an agent already planning it, or let another generate your whole .sprout.toml.

  • sprout-issue: issue to worktree to planning agent
  • sprout-init: detect your stack and write the config
  • Skills guide

Stop stashing. Start sprouting.

brew tap joegrabski/sprout && brew install sprout