github max-sixty/worktrunk v0.52.0
0.52.0

5 hours ago

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 verbatim, so post-operation hooks can never run an unapproved command. Behavior is otherwise unchanged, and wt merge --no-hooks (or a declined/empty plan) now returns before loading approvals, so a malformed approvals.toml no longer aborts a command that had nothing to authorize. (#2806)

  • Declining the wt merge commit-append no longer skips hooks: When a project's pre-merge/post-merge hooks were already approved, wt merge bundled the commit-message append into the same prompt; declining the lone append prompt skipped every hook for that run even though the user only meant to skip the append. The append is now gated on its own path (the same one wt step commit/wt step squash use), so declining it drops only the append. On a fresh repo where both the hooks and the append are unapproved this is now two prompts instead of one bundled prompt. Decline messages are also canonicalized across merge, remove, prune, and switch (Commands declined, … without hooks). (#2802)

  • Windows wt step prune .git/config race: wt step prune could intermittently fail on Windows with unable to access '.git/config': Permission denied — its parallel branch-integration checks read .git/config while an inline git branch -D rewrote it via git's lockfile rename, which on Windows briefly blocks concurrent readers. Branch-integration reads are now excluded from overlapping the git branch -D that rewrites config. (#2808)

Install worktrunk 0.52.0

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.52.0/worktrunk-installer.sh | sh && wt config shell install

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.52.0/worktrunk-installer.ps1 | iex"; git-wt config shell install

Install prebuilt binaries via Homebrew

brew install worktrunk && wt config shell install

Download worktrunk 0.52.0

File Platform Checksum
worktrunk-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
worktrunk-x86_64-apple-darwin.tar.xz Intel macOS checksum
worktrunk-x86_64-pc-windows-msvc.zip x64 Windows checksum
worktrunk-aarch64-unknown-linux-musl.tar.xz ARM64 MUSL Linux checksum
worktrunk-x86_64-unknown-linux-musl.tar.xz x64 MUSL Linux checksum

Install via Cargo

cargo install worktrunk && wt config shell install

Install via Winget (Windows)

winget install max-sixty.worktrunk && git-wt config shell install

Install via AUR (Arch Linux)

paru worktrunk-bin && wt config shell install

Don't miss a new worktrunk release

NewReleases is sending notifications on new releases.