Worktrunk is a CLI for Git worktree management, designed for parallel AI agent workflows
> /plugin marketplace add max-sixty/worktrunk> /plugin install worktrunk@worktrunk
What's inside
August 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:

π Full documentation at worktrunk.dev π
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.
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:
Expand into the more advanced commands as needed
Workflow automation:
target/, node_modules/, etc between worktreeswt list --full β CI status and AI-generated summaries per branchwt switch pr:123 to jump straight to a PR's branchhash_port template filter gives each worktree a unique portwt <name> commands and branch-scoped state for hook templatesMultiple parallel agents, same simple commands:

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. 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.
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, 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).
wt switch, wt list, wt merge, wt removewt --help or wt <command> --help for quick CLI referenceπ Full documentation at worktrunk.dev π
.agents/
plugins/
marketplace.json
.cargo/
config.toml
.claude/
.claude-plugin/
marketplace.json
skills/
release/
SKILL.md
running-tend/
references/
nightly-cleaner.md
review-pr.md
SKILL.md
writing-user-outputs/
SKILL.md
.config/
clawpatch/
config.json
features/
feat_custom_approval_gate.json
feat_custom_approvals_storage.json
feat_custom_config_deprecation.json
feat_custom_hook_logs.json
feat_custom_merge_safety.json
feat_custom_network_boundary.json
feat_custom_performance.json
feat_custom_prune.json
feat_custom_remove.json
feat_custom_repo_cache.json
feat_custom_shell_integration.json
feat_custom_signal_handling.json
feat_custom_switch_resolve.json
feat_custom_template_expansion.json
insta.yaml
lychee.toml
nextest.toml
tend.yaml
wt.toml
.gitattributes
.github/
.codecov.yaml
actions/
claude-setup/
action.yaml
test-setup/
action.yaml
aur/
PKGBUILD
benchmark-failure.md
CLAUDE.md
dependabot.yaml
nightly-failure.md
scripts/
list-recent-runs.sh
verify-windows-signature.py
workflows/
affected.yaml
benchmarks.yaml
ci.yaml
coverage.yaml
nightly.yaml
publish-docs.yaml
release.yaml
tend-ci-fix.yaml
tend-mention.yaml
tend-nightly.yaml
tend-notifications.yaml
tend-review-runs.yaml
tend-review.yaml
tend-triage.yaml
tend-weekly.yaml
.gitignore
.pre-commit-config.yaml
.typos.toml
.worktreeinclude
AGENTS.md
benches/
alias.rs
CLAUDE.md
completion.rs
imported-fixture
list.rs
picker_preview.rs
prune.rs
remove.rs
time_to_first_output.rs
build.rs
Cargo.lock
Cargo.toml
CHANGELOG.md
CLAUDE.md
dev/
config.example.toml
logo-padded-768.png
logo-prompt.json
opencode-plugin.ts
wt.example.toml
dist-workspace.toml
docs/
.gitignore
CLAUDE.md
config.toml
content/
_index.md
claude-code.md
code-signing.md
config.md
extending.md
faq.md
hook.md
list.md
llm-commits.md
merge.md
remove.md
step.md
switch.md
tips-patterns.md
worktrunk.md
demos/
.gitignore
build
CLAUDE.md
shared/
__init__.py
fixtures/
alpha-readme.md
alpha-utils.rs
gh-mock.sh
lib-hooks.rs
lib.rs
starship.toml
lib.py
themes.py
validation.py
snapshots/
wt-commit.snap
wt-core.snap
wt-list.snap
wt-merge.snap
tapes/
shared-commands.tape
shared-setup.tape
wt-commit.tape
wt-core.tape
wt-devserver.tape
wt-hooks.tape
wt-list-remove.tape
wt-list.tape
wt-merge.tape
wt-statusline.tape
wt-switch-picker.tape
wt-switch.tape
wt-zellij-omnibus.tape
sass/
custom.scss
static/
.well-known/
agent-skills/
index.json
worktrunk
apple-touch-icon.png
claude-code.md
code-copy.js
code-signing.md
config.md
demos/
twitter/
thread-preview.html
thread.md
extending.md
faq.md
favicon-48.png
favicon.png
github-social-card.svg
hook.md
list.md
llm-commits.md
llms.txt
logo.png
logo@2x.png
merge.md
mobile-menu.js
normalize.css
remove.md
robots.txt
schema/
list-v2.json
search.js
social-card.svg
step.md
switch.md
tips-patterns.md
worktrunk.md
templates/
_variables.html
404.html
base.html
index.html
macros.html
page.html
shortcodes/
rawcode.html
terminal.html
sitemap.xml
themes/
base16-ocean-dark.json
worktrunk-light.json
flake.lock
flake.nix
gemini-extension.json
hooks/
hooks.json
LICENSE
nix/
home-manager-module.nix
plugins/
worktrunk/
.claude-plugin/
plugin.json
.codex-plugin/
plugin.json
CLAUDE.md
hooks/
hooks.json
wt.sh
README.md
skills/
worktrunk/
reference/
claude-code.md
code-signing.md
config.md
extending.md
faq.md
hook.md
list.md
llm-commits.md
merge.md
README.md
remove.md
shell-integration.md
step.md
switch.md
tips-patterns.md
troubleshooting.md
worktrunk.md
SKILL.md
wt-switch-create/
rationale.md
SKILL.md
README.md
rust-toolchain.toml
skills/
worktrunk/
reference/
claude-code.md
code-signing.md
config.md
extending.md
faq.md
hook.md
list.md
llm-commits.md
merge.md
README.md
remove.md
shell-integration.md
step.md
switch.md
tips-patterns.md
troubleshooting.md
worktrunk.md
SKILL.md
wt-switch-create/
rationale.md
SKILL.md
src/
cache.rs
cli/
config.rs
hook.rs
list.rs
mod.rs
step.rs
command_log.rs
commands/
alias.rs
backup.rs
CLAUDE.md
command_approval.rs
command_executor.rs
commit.rs
config/
alias.rs
approvals.rs
codex.rs
create.rs
hints.rs
mod.rs
opencode.rs
plugins.rs
show.rs
snapshots/
wt__commands__config__alias__tests__format_entry_dry_run_pipeline.snap
wt__commands__config__alias__tests__format_entry_show_pipeline.snap
wt__commands__config__alias__tests__format_entry_show_single.snap
wt__commands__config__tests__warn_unknown_keys_nested.snap
state.rs
update.rs
configure_shell.rs
context.rs
custom.rs
eval.rs
for_each.rs
hook_announcement.rs
hook_commands.rs
hook_filter.rs
hook_plan.rs
hooks.rs
init.rs
list/
ci_status/
azure.rs
cache.rs
gitea.rs
github.rs
gitlab.rs
mod.rs
platform.rs
CLAUDE.md
collect/
execution.rs
mod.rs
results.rs
tasks.rs
types.rs
columns.rs
custom_columns.rs
json_output.rs
json_v2.rs
layout.rs
mod.rs
model/
item.rs
mod.rs
state.rs
stats.rs
status_symbols.rs
statusline_segment.rs
progressive_table.rs
progressive.rs
render.rs
snapshots/
wt__commands__list__layout__tests__snapshot_path_yields_to_summary.snap
merge.rs
mod.rs
picker/
items.rs
log_formatter.rs
mod.rs
os.rs
pager.rs
pr_pane.rs
preview_cache.rs
preview_notify.rs
preview_orchestrator.rs
preview.rs
progressive_handler.rs
prs.rs
snapshots/
wt__commands__picker__items__tests__branch_diff.snap
wt__commands__picker__items__tests__cache_hit.snap
wt__commands__picker__items__tests__cache_miss.snap
wt__commands__picker__items__tests__empty_all_local_diffs.snap
wt__commands__picker__items__tests__empty_upstream_and_summary.snap
wt__commands__picker__items__tests__loading_placeholder_branch_diff.snap
wt__commands__picker__items__tests__loading_placeholder_log.snap
wt__commands__picker__items__tests__loading_placeholder_summary.snap
wt__commands__picker__items__tests__loading_placeholder_upstream_diff.snap
wt__commands__picker__items__tests__loading_placeholder_working_tree.snap
wt__commands__picker__items__tests__log.snap
wt__commands__picker__items__tests__pr_row.snap
wt__commands__picker__items__tests__pr.snap
wt__commands__picker__items__tests__summary.snap
wt__commands__picker__items__tests__upstream_diff.snap
wt__commands__picker__items__tests__working_tree.snap
summary.rs
pipeline_spec.rs
process.rs
project_config.rs
relocate.rs
remove.rs
repository_ext.rs
run_pipeline.rs
snapshots/
wt__commands__configure_shell__tests__fish_completion_content_custom_cmd.snap
wt__commands__configure_shell__tests__fish_completion_content.snap
... 1352 moreFAQ
worktrunk is a Claude Code plugin with 7 hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. It includes release, running-tend, writing-user-outputs. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.