Release Notes
Improved
-
wt listcustom columns: Each[list.custom-columns.<Header>]entry in user config adds a column towt list(and thewt switchpicker), rendered per row as a minijinja template overbranch,worktree_path,worktree_name, andvars.*, with optionalwidthand drop priority. Values expand from in-memory data only — no subprocess runs per cell — and a column that is empty on every row is dropped.wt list --format=jsongains acolumnsmap per item. The feature is experimental, so the config shape may still change. (#3073) -
--config-setfor inline config overrides: A global, repeatable--config-set <toml>flag overrides any user-config key for a single invocation, layered above config files andWORKTRUNK_*env vars. The value is a real TOML fragment, so arrays and tables work natively (wt --config-set list.full=true list); nested tables deep-merge, and a malformed or invalid override drops the whole--config-setlayer with an attributed warning rather than failing the command. (#3138) -
Picker shows cached PR/MR numbers: The
wt switchpicker skips the networked CI-status fetch, so it previously had no CI column. It now fills PR/MR numbers from the local.git/wt/cache/ci-status/cache populated by earlierwt list --fullor statusline runs, with zero network access. A stale entry (TTL passed or branch head moved) keeps its number dimmed; expired entries without a number are dropped. (#3073) -
Faster file copies on macOS: After a reflink (
clonefileon APFS, which already preserves mode bits), worktrunk now skips the redundant follow-upchmodon macOS, saving one syscall per file inwt step copy-ignoredand every other copy path. Linux (btrfs/XFS) still sets permissions, sinceFICLONEclones data extents only and drops the execute bit. (#3149)
Internal
-
Picker migrated to skim 4.8 (ratatui/crossterm): The
wt switchpicker moved off skim 0.20.5 (tuikit) to skim 4.8.0, dropping the vendoredvendor/skim-tuikit/patch tree (both patches it carried are now native or upstream). Two cosmetic picker changes come with it: the match counter no longer overlaps the preview-tab header, and the HEAD column shows the full short-SHA. (#3137) -
All command spawns route through one trace chokepoint:
CommandTraceis now the sole emitter of[wt-trace]command records, so a spawn path can't silently skip tracing —git worktree add, previously an unattributed gap, now shows up as a labeled slice inwt-perf timeline. (#3134)
Documentation
- Hook-approval skill guidance: The bundled worktrunk skill now frames hook approvals as user consent and no longer advocates
--yesto bypass prompts. (#3146)
Install worktrunk 0.61.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/max-sixty/worktrunk/releases/download/v0.61.0/worktrunk-installer.sh | sh && wt config shell installInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/max-sixty/worktrunk/releases/download/v0.61.0/worktrunk-installer.ps1 | iex"; git-wt config shell installInstall prebuilt binaries via Homebrew
brew install worktrunk && wt config shell installDownload worktrunk 0.61.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 installInstall via Winget (Windows)
winget install max-sixty.worktrunk && git-wt config shell installInstall via AUR (Arch Linux)
paru worktrunk-bin && wt config shell install