worktrunk README

The project's README from github.com/max-sixty/worktrunk. As one markdown file: README.md.

Worktrunk logo  Worktrunk

Docs License: MIT OR Apache-2.0 CI Codecov Stars maintained with tend

September 2026: Worktrunk was released at the start of the year, and has quickly become the most popular git worktree manager. It's built with love (there's no slop!). Please let me know any frictions at all; I'm intensely focused on continuing to make Worktrunk excellent, and the biggest help is folks posting problems they perceive.

Worktrunk is a CLI for git worktree management, designed for running AI agents in parallel.

Worktrunk's three core commands make worktrees as easy as branches. Plus, Worktrunk has a bunch of quality-of-life features to simplify working with many parallel changes, including hooks to automate local workflows.

A quick demo:

Worktrunk Demo

📚 Full documentation at worktrunk.dev 📚

Context: git worktrees

AI agents like Claude Code and Codex can handle longer tasks without supervision, such that it's possible to manage 5-10+ in parallel. Git's native worktree feature give each agent its own working directory, so they don't step on each other's changes.

But the git worktree UX is clunky. Even a task as small as starting a new worktree requires typing the branch name three times: git worktree add -b feat ../repo.feat, then cd ../repo.feat.

Worktrunk makes git worktrees as easy as branches

Worktrees are addressed by branch name; paths are computed from a configurable template. Commands that take a branch also accept the path of the worktree it is checked out in.

Start with the core commands

Core commands:

Task Worktrunk Plain git
Switch worktrees wt switch feat cd ../repo.feat
Create + start Claude wt switch -c -x claude feat
git worktree add -b feat ../repo.feat && \
cd ../repo.feat && \
claude
Clean up wt remove
cd ../repo && \
git worktree remove ../repo.feat && \
git branch -d feat
List with status wt list git worktree list (paths only)

Expand into the more advanced commands as needed

Workflow automation:

Multiple parallel agents, same simple commands:

Worktrunk omnibus demo: multiple Claude agents in Zellij tabs with hooks, LLM commits, and merge workflow

Install

Homebrew (macOS & Linux):

brew install worktrunk && wt config shell install

Shell integration allows commands to change directories.

Cargo:

cargo install worktrunk && wt config shell install
Windows & other

Windows. wt defaults to Windows Terminal's command, so Winget additionally installs Worktrunk as git-wt to avoid the conflict:

winget install max-sixty.worktrunk
git-wt config shell install

Alternatively, disable Windows Terminal's alias (Settings → Apps → Advanced app settings → App execution aliases → "Terminal"/"Terminal Preview") to use wt directly.

Free code signing provided by SignPath.io, certificate by SignPath Foundation — policy.

Arch Linux:

sudo pacman -S worktrunk && wt config shell install

Conda / Pixi (community-maintained feedstock):

conda install -c conda-forge worktrunk && wt config shell install

Or with Pixi: pixi global install worktrunk && wt config shell install.

Quick start

Create a worktree for a new feature:

$ wt switch --create feature-auth
✓ Created branch feature-auth from main and worktree @ ~/repo.feature-auth

This creates a new branch and worktree, then switches to it. Do your work, then check all worktrees with wt list:

$ wt list
  Branch        Status      HEAD±     main↕    main…±    Remote⇅  Commit    Age  Message
@ feature-auth  +   ↑      +27   -8   ↑1       +31                4bc72dc    2h  Add authenticati…
^ main              ^⇡                                    ⇡1      0e631ad    1d  Initial commit

○ Showing 2 worktrees, 1 with changes, 1 ahead, hidden: Path

The @ marks the current worktree. + means staged changes, ↑1 means 1 commit ahead of main, ⇡ means unpushed commits.

When done, either:

PR workflow — commit, push, open a PR, merge via GitHub/GitLab, then clean up:

wt step commit                    # commit staged changes
gh pr create                      # or glab mr create
wt remove                         # after PR is merged

Local merge — squash, rebase onto main, fast-forward merge, clean up:

$ wt merge main
◎ Generating commit message and committing changes... (2 files, +53, no squashing needed)
  Add authentication module
✓ Committed changes @ a1b2c3d
◎ Merging 1 commit to main @ a1b2c3d (no rebase needed)
  * a1b2c3d Add authentication module
   auth.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
   lib.rs  |  2 ++
   2 files changed, 53 insertions(+)
✓ Merged to main (1 commit, 2 files, +53)
◎ Removing feature-auth worktree & branch in background (same commit as main, _)
○ Switched to worktree for main @ ~/repo

For parallel agents, create multiple worktrees and launch an agent in each:

wt switch -x claude -c feature-a -- 'Add user authentication'
wt switch -x claude -c feature-b -- 'Fix the pagination bug'
wt switch -x claude -c feature-c -- 'Write tests for the API'

The -x flag runs a command after switching; arguments after -- are passed to it. Configure post-start hooks to automate setup (install deps, start dev servers).

Next steps

Further reading

Contributing

📚 Full documentation at worktrunk.dev 📚

Star history

Star History Chart

worktrunk (max-sixty/worktrunk)

Searching Database…

What is this?Worktrunk is a command-line tool that makes git worktrees as easy as branches, built for running several AI coding agents in parallel without them stepping on each other's changes.
Is this a git replacement, or does it build on regular git?It builds on git's native worktree feature rather than replacing git: worktrees are addressed by branch name, paths come from a configurable template, and commands that take a branch also accept the worktree path.
How do I install it and get it running?Homebrew on macOS and Linux, Cargo or Winget on Windows, Arch packages, or the community Conda/Pixi feed. Afterwards run wt config shell install so commands like wt switch can change directories.
Does it only work with Claude Code, or other agents too?Any coding agent. The README showcases Claude Code and Codex; wt switch -x runs any command after switching (wt switch -c -x claude feat), with extra arguments passed through after --.
Are there any gotchas I should know about?On Windows the wt name is already taken by Windows Terminal, so the Winget install registers the tool as git-wt unless you disable the Terminal alias in system settings.
Who is this for — do I have to be running AI agents to benefit?Mainly developers running 5-10+ AI agents in parallel, but the same core commands make worktrees easy for any workflow with many parallel changes.
What does a typical workflow look like?wt switch -c feat creates a branch and worktree and switches to it; wt list shows every worktree with status (@ is current, + staged changes, ↑1 one commit ahead of main, ⇡ unpushed). When you're done, wt merge squashes, rebases, merges and cleans up in one command — or open a PR and run wt remove.
Why not just use git's built-in worktree commands?The author finds git's worktree UX clunky: even starting one worktree means typing the branch name three times (git worktree add -b feat ../repo.feat, then cd ../repo.feat). Worktrunk collapses that into wt switch -c feat.
How do I start Claude Code in a fresh worktree with one command?wt switch -c -x claude feat creates the branch and worktree, enters it and launches Claude. Post-start hooks can then install dependencies or start dev servers automatically, and aliases let you define your own wt commands.
What else does it automate?Hooks on create, pre-merge and post-merge; LLM commit messages generated from diffs; an interactive picker with live diff and log previews; wt list --full with CI status and AI summaries per branch; PR checkout via wt switch pr:123; per-worktree dev-server ports via the hashport filter; and shared build caches so ten worktrees share target/ and node_modules/ without rebuilding (APFS, btrfs, XFS).
Creator
max-sixty
Size
61.7 MB
Stars
9.3K
Age
11mo
Commits · 90 Days