← Package directory
Available on winget

Install worktrunk

A Git worktree manager for trunk-based development

Install with winget
winget install --id max-sixty.worktrunk
Upgrade
winget upgrade --id max-sixty.worktrunk
Uninstall
winget uninstall --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.52.0

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 — killpg on Unix, taskkill /T /F on Windows). A single post-start hook (wt step tether -- npm run dev) replaces the usual post-start-to-launch / pre-remove-to-stop pair, and unlike pre-remove it also cleans up after a git worktree remove, an rm -rf, or a crashed hook — the leak path that eventually saturates macOS fseventsd. Arguments after -- run directly with no shell, matching wt step for-each. (#2785) - Gemini CLI extension: Worktrunk now ships a Gemini CLI extension for wt list activity tracking, installable with gemini extensions install max-sixty/worktrunk. The extension's manifest, hooks, and skills resolve at the repo root, so the GitHub-name install path works without a local clone. (#2803, #2807, thanks @rafavital for the request in #2763) Fixed - Project hooks are frozen at the approval gate: A project-defined pre-*/post-* hook command was selected from .config/wt.toml twice — once to build the approval prompt, once at execution — and the operation itself mutates state between the two reads (a merge moves the target ref, an auto-rebase rewrites the feature config, a removal scrubs the worktree, git worktree add materializes a --create worktree). The second read could select a command the user never approved; on a freshly cloned repo that is unapproved code execution. The gate now freezes the command set into an immutable plan that the executor consumes...

Read release notes

Version history

Version Updated Notes
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...
v0.46.0 Unknown Release Notes Improved - sanitize_db template filter caps output at 48 chars (was 63 — PostgreSQL's identifier limit). The new budget leaves headroom for users composing the output into longer paths or identifiers, e.g.,...
v0.45.2 Unknown Release Notes Fixed - Interactive pickers via aliases no longer freeze with a blank screen: After the v0.44.0 fix that let aliases inherit the controlling tty (#2380), wt sw (and other aliases that wrap wt switch) still...
v0.45.1 Unknown Release Notes Fixed - worktrunk builds again with --no-default-features (regression in v0.45.0): The TTY progress spinner added in #2420 used crossterm unconditionally, but crossterm is gated behind the cli feature in Ca...
v0.45.0 Unknown Release Notes Improved - wt remove --foreground shows a TTY progress spinner: Removing a worktree with a fat node_modules (or any large trash payload) now prints ⠼ Removing 7,272 files · 64.5 MiB to stderr while the unli...
v0.44.0 Unknown Release Notes Fixed - Interactive alias children (e.g. sw = "wt switch") keep the tty again: Alias execution was piping the template context JSON into each child's stdin, displacing the controlling terminal; interactive...
v0.43.0 Unknown Release Notes Fixed - wt step copy-ignored no longer self-lowers priority in the foreground: Since v0.37.0, copy-ignored wrapped its work in taskpolicy -b (macOS) / ionice -c3 (Linux) unconditionally, which throttled dis...
v0.42.0 Unknown Release Notes Improved - Alias banner is silent when there's nothing to summarize: ◎ Running alias <name> now only prints when the alias has at least one named step worth naming. Single unnamed aliases (ls = "wt list") a...
v0.41.0 Unknown Release Notes Improved - Hooks accept the same --KEY=VALUE smart routing as aliases: wt hook pre-merge --branch=foo --yes binds {{ branch }} when the template references it; unreferenced --KEY=VALUE tokens and everything...
v0.40.0 Unknown Release Notes Improved - Aliases route --KEY=VALUE to template variables and forward everything else as {{ args }}: --KEY=VALUE (or --KEY VALUE) binds KEY whenever the template references {{ KEY }} — wt deploy --env=stag...
v0.39.0 Unknown Release Notes Improved - Aliases dispatch from top-level wt <name> (and graduate from experimental): Configured aliases now resolve as first-class commands — wt deploy works the same as wt step deploy, reading better as...
v0.38.0 Unknown Release Notes Improved - Concurrent execution in pre-* pipeline hooks: Pipeline blocks ([[pre-start]], [[pre-merge]], etc.) now run their concurrent commands in parallel for foreground hooks, matching the existing behavi...
v0.37.1 Unknown Release Notes Improved - Progressive rendering in wt switch picker: The picker now mirrors wt list's skeleton-first model — branch and path render immediately, while status, diff stats, counts, and summaries fill in in p...
v0.37.0 Unknown Release Notes Improved - pre-* hook table form temporarily deprecated ahead of concurrent-execution unification: Today, pre-* hooks run serially: pipeline form is serial by construction, and table form ([[pre-merge]]) —...