winget install --id max-sixty.worktrunk
About worktrunk
worktrunk (wt) is a Git worktree manager designed for trunk-based development workflows. It simplifies creating, switching between, and managing Git worktrees, making it easy to work on multiple features or branches simultaneously without the overhead of stashing or switching branches in a single working directory.
What's new in v0.65.0
Release Notes Improved - Picker alt-x flashes why a worktree wasn't removed: When alt-x in the wt switch picker keeps a row instead of removing it, the reason now flashes in the picker header for a beat, rather than only draining to stderr after you quit — so the "why" is visible while the row is still in front of you. It covers both the by-design keeps (the current worktree; an unmerged branch-only row shows ○ Kept <branch> — branch is unmerged) and genuine removal failures (a dirty, locked, or main worktree, shown as an error). The full diagnostic still drains on exit. The --prs loading marker now also matches the picker's other in-flight placeholders (↳ Loading open PRs…). (#3336, #3350) - -vv diagnostics consolidate on diagnostic.md, led by the performance profile: A -vv run now opens with a one-line pointer to the log directory (○ Verbose logging to .git/wt/logs/) and closes by naming what it captured — ○ Logs, performance profile, and diagnostics saved @ diagnostic.md — with the raw trace.jsonl / subprocess.log companions listed beneath and the gh gist create bug-report hint. diagnostic.md now leads with the performance profile, expanded by default and promoted above the environment / worktree / config dumps; that profile reports the 20 slowest calls (was 8) and 10 same-context redundant-command offenders (was 3). The profile lives in the diagnostic.md bundle, and wt config state logs profile re-renders it live from trace.jsonl. (#3329) Fixed - wt remove preserves your subdirectory position: Removing a worktree from a subdirectory (e.g. apps/gateway/) now lands you in...
Version history
| Version | Updated | Notes |
|---|---|---|
| v0.65.0 | Unknown | Release Notes Improved - Picker alt-x flashes why a worktree wasn't removed: When alt-x in the wt switch picker keeps a row instead of removing it, the reason now flashes in the picker header for a beat, rather than only... |
| v0.64.0 | Unknown | Release Notes Improved - {{ git.branch.* }} template namespace for custom columns: wt list custom columns can now read a branch's own git config via {{ git.branch.<key> }} — both convention keys you set yourself (branch.... |
| v0.63.0 | Unknown | Release Notes Improved - [list] columns can force a column on past --full: Listing a column now overrides the --full / [list] summary presets — columns = ["branch", "ci"] shows the CI column without --full. Hard data-sou... |
| v0.62.0 | Unknown | Release Notes Improved - Browse open PRs/MRs in the wt switch picker, with live CI: The picker now streams a live CI/review-status column per row — priming from the local cache, then fetching live (it previously showed o... |
| v0.61.0 | Unknown | Release Notes Improved - wt list custom columns: Each [list.custom-columns.<Header>] entry in user config adds a column to wt list (and the wt switch picker), rendered per row as a minijinja template over branch, worktre... |
| v0.60.0 | Unknown | Release Notes Improved - Package installs complete branch and worktree names: A plain brew install worktrunk (or other package install) now tab-completes branch and worktree names, not just subcommands and flags. wt conf... |
| v0.59.0 | Unknown | Release Notes Improved - Picker frees digit keys for filtering; preview tabs move to Alt: In the wt switch picker, plain digits now go to the filter, so a branch name with a number in it can be typed directly. Preview ta... |
| v0.58.0 | Unknown | Release Notes Improved - Table-form pre-* hooks run concurrently: A multi-entry table hook ([pre-merge] with several keys) now runs its commands concurrently, completing the cut-over announced in v0.37.0: every hook type... |
| v0.57.0 | Unknown | Release Notes Improved - wt step diff --branch: wt step diff gained a -b/--branch flag, mirroring wt step commit, so the diff can target another worktree's branch without leaving the current one. The branch must have a c... |
| v0.56.0 | Unknown | Release Notes Improved - wt list JSON output includes repo_url: Each item now carries repo_url, the repository's web URL derived from the primary remote (absent when there's no parseable forge remote). It's the local che... |
| v0.55.0 | Unknown | Release Notes Improved - wt switch accepts forge PR/MR URLs: wt switch https://github.com/owner/repo/pull/123 now resolves the same way as wt switch pr:123, and the URL form works anywhere a pr:N / mr:N shortcut does (po... |
| v0.54.0 | Unknown | Release Notes Improved - Rate-limit pace segment in the Claude Code statusline: wt list statusline --format=claude-code now surfaces a yellow 1.3×pace(10am–3pm) segment when Claude Code's reported five-hour or seven-day... |
| v0.53.0 | Unknown | Release Notes Improved - wt switch --execute deprecates shell command lines: A future release will switch --execute (-x) to an argv input model — a single program, with arguments after --, run with no implicit shell. Thi... |
| v0.52.0 | Unknown | Release Notes Improved - wt step tether: New [experimental] operation that runs a command in its own process group and kills the whole group when the command exits or its worktree is removed (a 250ms portable poll — kill... |
| v0.51.0 | Unknown | Release Notes Improved - Codex support: Worktrunk now ships a first-class Codex plugin alongside the Claude Code one. wt config plugins codex install installs it; wt config show --full reports its state. The Codex plugin... |
| v0.50.0 | Unknown | Release Notes Improved - Experimental Azure DevOps support: wt switch pr:<N> resolves Azure DevOps pull requests via the az CLI — auto-detected from dev.azure.com / ssh.dev.azure.com / *.visualstudio.com remotes, or pinn... |
| v0.49.0 | Unknown | Release Notes Improved - New codename(n) template filter: Produces deterministic friendly names from any input string — codename(1) returns a noun, codename(2) returns adjective-noun, higher counts add more adjectives. T... |
| v0.48.0 | Unknown | Release Notes Improved - --format=json extends to seven more commands: wt step rebase, wt step push, wt step commit, wt step squash, wt step relocate, wt step copy-ignored, and wt hook show now accept --format=json. Shap... |
| v0.47.0 | Unknown | Release Notes Improved - wt switch <number> suggests pr:N / mr:N first: When wt switch 2474 fails because no branch by that name exists, the hint now leads with how to switch to the matching PR/MR before mentioning --cre... |
| v0.46.1 | Unknown | Release Notes Fixed - No spurious Skipping pre-commit hooks (--no-hooks) line after declined approval: wt step commit, wt step squash, and wt merge collapsed two distinct hook-skip reasons — the user passing --no-hooks a... |