Worktrunk is a Git worktree manager designed to simplify trunk-based development workflows, enabling developers to manage multiple features or branches simultaneously without the overhead of stashing or switching in a single directory.
Key Features:
Simplified worktree management with commands akin to branch operations
Integration with AI agents like Claude Code for parallel task handling
Workflow automation via hooks during create, pre-merge, and post-merge stages
LLM commit messages generated from diffs
Advanced merge options including squash, rebase, and cleanup
Shell integration for seamless directory navigation
Ideal for developers working on complex projects with multiple features or branches, Worktrunk enhances productivity by streamlining worktree management and enabling efficient parallel workflows.
Available via winget for easy installation.
README
Β Β Worktrunk
> April 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.
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 && \
Alternatively, disable Windows Terminal's alias (Settings β Privacy & security β For developers β App Execution Aliases β disable "Windows Terminal") to use wt directly.
$ 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 + β +27 -8 β1 4bc72dc9 2h Add authentication module
^ main ^β‘ β‘1 0e631add 1d Initial commit
β Showing 2 worktrees, 1 with changes, 1 ahead, 1 column hidden
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).