# Worktrunk: A CLI for Git worktree management, designed for AI agent workflows

> Source: <https://worktrunk.dev/>
> Published: 2026-10-01 17:55:37+00:00

# Worktrunk

Worktrunk is a CLI for Git worktree management, designed for **parallel AI agent
workflows**.

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 & copy-on-write build caches.

A quick demo:

## Context: git worktrees

[Section titled “Context: git worktrees”](#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 gives 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

[Section titled “Worktrunk makes git worktrees as easy as branches”](#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:**

- **[Hooks](https://worktrunk.dev/hook/)** — run commands on create, pre-merge, post-merge, etc
- **[LLM commit messages](https://worktrunk.dev/llm-commits/)** — generate commit messages from diffs
- **[Merge workflow](https://worktrunk.dev/merge/)** — squash, rebase, merge, clean up in one command
- **[Interactive picker](https://worktrunk.dev/switch/#interactive-picker)** — browse worktrees with streaming CI status and diff, log, PR and comment previews
- **[Share build caches](https://worktrunk.dev/step/#wt-step-copy-ignored)** — ten worktrees get`target/` ,`node_modules/` , etc without building or copying them (on APFS, btrfs, and XFS)
- **[`wt list --full`](https://worktrunk.dev/list/#full-mode)** —[CI status](https://worktrunk.dev/list/#ci-status) and[AI-generated summaries](https://worktrunk.dev/list/#llm-summaries) per branch
- **[PR checkout](https://worktrunk.dev/switch/#pull-requests-and-merge-requests)** —`wt switch pr:123` to jump straight to a PR’s branch
- **[Dev server per worktree](https://worktrunk.dev/tips-patterns/#dev-server-per-worktree)** —`hash_port` template filter gives each worktree a unique port
- **[Aliases](https://worktrunk.dev/extending/#aliases) & [per-branch variables](https://worktrunk.dev/config/#wt-config-state-vars)** — custom`wt <name>` commands and branch-scoped state for hook templates
- …and **[lots more](#next-steps)**

Multiple parallel agents, same simple commands:

## Install

[Section titled “Install”](#install)

**Homebrew (macOS & Linux):**

Shell integration allows commands to change directories.

**Cargo:**

## **Windows & other**

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

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](https://signpath.io/), certificate by [SignPath Foundation](https://signpath.org/) — [policy](https://worktrunk.dev/code-signing/).

**Arch Linux:**

**Conda / Pixi** (community-maintained [feedstock](https://github.com/conda-forge/worktrunk-feedstock)):

Or with [Pixi](https://pixi.sh): `pixi global install worktrunk && wt config shell install`.

## Quick start

[Section titled “Quick start”](#quick-start)

Create a worktree for a new feature:

This creates a new branch and worktree, then switches to it. Do your work, then check all worktrees with [`wt list`](https://worktrunk.dev/list/):

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:

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

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

The `-x` flag runs a command after switching; arguments after `--` are passed to it. Configure [post-start hooks](https://worktrunk.dev/hook/#hook-types) to automate setup (install deps, start dev servers).

## Next steps

[Section titled “Next steps”](#next-steps)

- Learn the core commands: [`wt switch`](https://worktrunk.dev/switch/) ,[` wt list`](https://worktrunk.dev/list/) ,[` wt merge`](https://worktrunk.dev/merge/) ,[` wt remove`](https://worktrunk.dev/remove/)
- Set up [hooks](https://worktrunk.dev/hook/) for automated setup
- Explore [LLM commit messages](https://worktrunk.dev/llm-commits/) ,[interactive
picker](https://worktrunk.dev/switch/#interactive-picker) ,[Claude Code integration](https://worktrunk.dev/claude-code/) ,[CI
status & PR links](https://worktrunk.dev/list/#ci-status)
- Browse [tips & patterns](https://worktrunk.dev/tips-patterns/) for recipes: aliases, dev servers, databases, agent handoffs, and more
- [Extending Worktrunk](https://worktrunk.dev/extending/) — customize workflows with hooks & aliases
- Watch [@DevOpsToolbox’s video on Worktrunk](https://youtu.be/WBQiqr6LevQ?t=345)
- Run `wt --help` or`wt <command> --help` for quick CLI reference
