#git #git-branch #git-worktree #worktrees #artificial-intelligence #ai-agents #git-cli

bin+lib worktrunk

A CLI for Git worktree management, designed for parallel AI agent workflows

76 releases (23 breaking)

Uses new Rust 2024

new 0.24.0 Feb 15, 2026
0.22.0 Feb 2, 2026
0.8.3 Dec 31, 2025
0.1.10 Nov 29, 2025

#140 in Filesystem

Download history 1/week @ 2025-11-30 25/week @ 2025-12-07 3/week @ 2025-12-21 15/week @ 2025-12-28 102/week @ 2026-01-04 160/week @ 2026-01-11 276/week @ 2026-01-18 325/week @ 2026-01-25 354/week @ 2026-02-01 430/week @ 2026-02-08

1,441 downloads per month

MIT/Apache

2.5MB
46K SLoC

Worktrunk logo  Worktrunk

Docs Crates.io License: MIT CI Codecov Stars

February 2026: Worktrunk was released over the holidays, and lots of folks seem to be using it. It's built with love (there's no slop!). If social proof is helpful: I also created PRQL (10k stars) and am a maintainer of Xarray (4k stars), Insta, & Numbagg. Please let me know any frictions at all; I'm intensely focused on making Worktrunk excellent, and the biggest gap is understanding how others experience using it.

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.

Scaling agents becomes trivial. 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.

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:

A demo with some advanced features:

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

On Windows, wt defaults to Windows Terminal's command. 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 β†’ Privacy & security β†’ For developers β†’ App Execution Aliases β†’ disable "Windows Terminal") to use wt directly.

Arch Linux:

paru worktrunk-bin && 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↕  Remoteβ‡…  Commit    Age   Message
@ feature-auth  +   –      +53                         0e631add  1d    Initial commit
^ main              ^⇑                         ⇑1      0e631add  1d    Initial commit

β—‹ Showing 2 worktrees, 1 with changes, 1 column hidden

The @ marks the current worktree. + means staged changes, ⇑ 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

Dependencies

~24–60MB
~1M SLoC