Bumps the patch group with 5 updates: | Package | From | To | | --- | --- | --- | | [askama](https://github.com/askama-rs/askama) | `0.16.0` | `0.16.1` | | [crossbeam-channel](https://github.com/crossbeam-rs/crossbeam) | `0.5.16` | `0.5.17` | | [indexmap](https://github.com/indexmap-rs/indexmap) | `2.14.1` | `2.14.2` | | [termimad](https://github.com/Canop/termimad) | `0.35.3` | `0.35.4` | | [open](https://github.com/Byron/open-rs) | `5.4.3` | `5.4.4` | Updates `askama` from 0.16.0 to 0.16.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/askama-rs/askama/releases">askama's releases</a>.</em></p> <blockquote> <h2>v0.16.1</h2> <h2>What's Changed</h2> <ul> <li>docs: explain how to install by enabling feature specific for each framework by <a href="https://github.com/pinage404"><code>@pinage404</code></a> in <a href="https://redirect.github.com/askama-rs/askama/pull/742">askama-rs/askama#742</a></li> <li>Fix new clippy lint by <a href="https://github.com/GuillaumeGomez"><code>@GuillaumeGomez</code></a> in <a href="https://redirect.github.com/askama-rs/askama/pull/743">askama-rs/askama#743</a></li> <li>Fix CI by <a href="https://github.com/GuillaumeGomez"><code>@GuillaumeGomez</code></a> in <a href="https://redirect.github.com/askama-rs/askama/pull/747">askama-rs/askama#747</a></li> <li>Upgrade to syn 3 by <a href="https://github.com/paolobarbolini"><code>@paolobarbolini</code></a> in <a href="https://redirect.github.com/askama-rs/askama/pull/745">askama-rs/askama#745</a></li> <li>book: fix link by <a href="https://github.com/antonmosich"><code>@antonmosich</code></a> in <a href="https://redirect.github.com/askama-rs/askama/pull/754">askama-rs/askama#754</a></li> <li>Fix new clippy lint by <a href="https://github.com/GuillaumeGomez"><code>@GuillaumeGomez</code></a> in <a href="https://redirect.github.com/askama-rs/askama/pull/755">askama-rs/askama#755</a></li> <li>Add missing compount assignment in the book syntax overview by <a href="https://github.com/GuillaumeGomez"><code>@GuillaumeGomez</code></a> in <a href="https://redirect.github.com/askama-rs/askama/pull/757">askama-rs/askama#757</a></li> <li>Fix wrong "custom escaper example" link in the book by <a href="https://github.com/GuillaumeGomez"><code>@GuillaumeGomez</code></a> in <a href="https://redirect.github.com/askama-rs/askama/pull/759">askama-rs/askama#759</a></li> <li>Add possibility to specify <code>let</code>/<code>set</code> block type by <a href="https://github.com/GuillaumeGomez"><code>@GuillaumeGomez</code></a> in <a href="https://redirect.github.com/askama-rs/askama/pull/760">askama-rs/askama#760</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/pinage404"><code>@pinage404</code></a> made their first contribution in <a href="https://redirect.github.com/askama-rs/askama/pull/742">askama-rs/askama#742</a></li> <li><a href="https://github.com/antonmosich"><code>@antonmosich</code></a> made their first contribution in <a href="https://redirect.github.com/askama-rs/askama/pull/754">askama-rs/askama#754</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/askama-rs/askama/compare/v0.16.0...v0.16.1">https://github.com/askama-rs/askama/compare/v0.16.0...v0.16.1</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/askama-rs/askama/commit/9ae4d5bdf4352b35e34106e38944c90d7a7ede3e"><code>9ae4d5b</code></a> Merge pull request <a href="https://redirect.github.com/askama-rs/askama/issues/761">#761</a> from GuillaumeGomez/update</li> <li><a href="https://github.com/askama-rs/askama/commit/c788325d46efab3b59b7c3ba081b6a83f589afef"><code>c788325</code></a> Update crates version to <code>0.16.1</code></li> <li><a href="https://github.com/askama-rs/askama/commit/aab8bc42436e9008cbf0cf10799177252f5503b8"><code>aab8bc4</code></a> Merge pull request <a href="https://redirect.github.com/askama-rs/askama/issues/760">#760</a> from GuillaumeGomez/let-ty</li> <li><a href="https://github.com/askama-rs/askama/commit/1043eaef5d6be53be59d2e7d7028a050ad8e4a3d"><code>1043eae</code></a> Update book to mention that we can specify the type of the variable</li> <li><a href="https://github.com/askama-rs/askama/commit/a2e3b49824c970404776f1d7403bea65019073e2"><code>a2e3b49</code></a> Add possibility to specify <code>let</code>/<code>set</code> block type</li> <li><a href="https://github.com/askama-rs/askama/commit/0c9c2ee617b05667eef4569c268df9efbd1f9139"><code>0c9c2ee</code></a> Merge pull request <a href="https://redirect.github.com/askama-rs/askama/issues/759">#759</a> from askama-rs/GuillaumeGomez-patch-1</li> <li><a href="https://github.com/askama-rs/askama/commit/cc3bde8b86857350fb3c08e23dd41cc886014d08"><code>cc3bde8</code></a> Fix wrong "custom escaper example" link in the book</li> <li><a href="https://github.com/askama-rs/askama/commit/e47575b12798f77638932fe7626285a1582f4a67"><code>e47575b</code></a> Merge pull request <a href="https://redirect.github.com/askama-rs/askama/issues/757">#757</a> from GuillaumeGomez/book-compound</li> <li><a href="https://github.com/askama-rs/askama/commit/0bf45f2e71734bd9d57c4aaf39314faad6a5f8a5"><code>0bf45f2</code></a> Add missing compount assignment in the book syntax overview</li> <li><a href="https://github.com/askama-rs/askama/commit/f98f8c5c1779c315977cac652cbcc12d6e1a147b"><code>f98f8c5</code></a> Merge pull request <a href="https://redirect.github.com/askama-rs/askama/issues/755">#755</a> from GuillaumeGomez/fix-clippy</li> <li>Additional commits viewable in <a href="https://github.com/askama-rs/askama/compare/v0.16.0...v0.16.1">compare view</a></li> </ul> </details> <br /> Updates `crossbeam-channel` from 0.5.16 to 0.5.17 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/crossbeam-rs/crossbeam/releases">crossbeam-channel's releases</a>.</em></p> <blockquote> <h2>crossbeam-channel 0.5.17</h2> <ul> <li>Fix UB in bounded channel when <code>SelectedOperation</code> is leaked. (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1295">#1295</a>)</li> <li>Fix behavior inconsistency on already received case in <code>at()</code>. (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1296">#1296</a>)</li> <li>Handle overflow in bounded channel initialization. (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1301">#1301</a>)</li> <li>Use 64-bit index on 32-bit platforms if 64-bit atomic is available. (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1321">#1321</a>)</li> <li>Update MSRV policy to support 1 year instead of 6 months to meet rayon's MSRV policy. (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1284">#1284</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/crossbeam-rs/crossbeam/commit/2920c984290229ab4e0ca0452ef09e48a82063f3"><code>2920c98</code></a> Prepare for the next release</li> <li><a href="https://github.com/crossbeam-rs/crossbeam/commit/808b75a4cbbb59eab83a92cf867a3c771795f959"><code>808b75a</code></a> ci: Update codegen job</li> <li><a href="https://github.com/crossbeam-rs/crossbeam/commit/46774e09313d4601c23f77da0b078c914194c152"><code>46774e0</code></a> channel: Document that send_timeout sends an available message even if the ti...</li> <li><a href="https://github.com/crossbeam-rs/crossbeam/commit/89a3fe4025857397a1adfc954957687d4dce9c93"><code>89a3fe4</code></a> epoch: Make Shared::null const</li> <li><a href="https://github.com/crossbeam-rs/crossbeam/commit/383d74adcda222f99d54b4e80b55cce6bf30f142"><code>383d74a</code></a> Use *::MAX associated constants</li> <li><a href="https://github.com/crossbeam-rs/crossbeam/commit/a30b825e6de35ecc4762a55656f63b4dbf4ccb8a"><code>a30b825</code></a> channel,deque,queue: Use AtomicU64/u64 in head/tail index if available</li> <li><a href="https://github.com/crossbeam-rs/crossbeam/commit/a0e4d2929e4bf670bf05aad548880656e187a51e"><code>a0e4d29</code></a> Replace iterative capacity growth with <code>next_power_of_two</code> (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1216">#1216</a>)</li> <li><a href="https://github.com/crossbeam-rs/crossbeam/commit/94f74d26240f5d49e61d56ac10111e6527dbcfe6"><code>94f74d2</code></a> Recognize x86_64-unknown-linux-gnutsan in build script</li> <li><a href="https://github.com/crossbeam-rs/crossbeam/commit/30e5963e4c0a9fc6626bd6417528c4f621e3838e"><code>30e5963</code></a> epoch: Add missing fence emulation for tsan</li> <li><a href="https://github.com/crossbeam-rs/crossbeam/commit/708a6bd582d1ee482183e186e98527b41bffe565"><code>708a6bd</code></a> Handle overflow in bounded channel/queue initialization (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1301">#1301</a>)</li> <li>Additional commits viewable in <a href="https://github.com/crossbeam-rs/crossbeam/compare/crossbeam-channel-0.5.16...crossbeam-channel-0.5.17">compare view</a></li> </ul> </details> <br /> Updates `indexmap` from 2.14.1 to 2.14.2 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/indexmap-rs/indexmap/blob/main/RELEASES.md">indexmap's changelog</a>.</em></p> <blockquote> <h2>2.14.2 (2026-09-04)</h2> <ul> <li>Fix item hygiene in map and set macros. Previously, an internal <code>const CAP</code> could shadow the same name in the caller's namespace.</li> <li>Allow <code>const</code> initialization of empty <code>indexmap_with_default!</code> and <code>indexset_with_default!</code>. The hasher may also be omitted if it's inferrable.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/indexmap-rs/indexmap/commit/41a870887c4c77adf665886e63df08f406bfe37a"><code>41a8708</code></a> Merge pull request <a href="https://redirect.github.com/indexmap-rs/indexmap/issues/450">#450</a> from cuviper/macros</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/0fb7b5c813c94dcb16f220d249e42a7b9e4ea44d"><code>0fb7b5c</code></a> Release 2.14.2</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/55e6b28278f242b4d4190a14b6e86c09580dd75a"><code>55e6b28</code></a> Improve the empty macro cases</li> <li><a href="https://github.com/indexmap-rs/indexmap/commit/c067355e1ca5ec39348f42dcee582d4f222c3295"><code>c067355</code></a> Fix item hygiene in user macros</li> <li>See full diff in <a href="https://github.com/indexmap-rs/indexmap/compare/2.14.1...2.14.2">compare view</a></li> </ul> </details> <br /> Updates `termimad` from 0.35.3 to 0.35.4 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/Canop/termimad/blob/main/CHANGELOG.md">termimad's changelog</a>.</em></p> <blockquote> <h3>v0.35.4 - 2026-09-05</h3> <ul> <li>fix <code>parse_color</code> returning the light variant for <code>darkblue</code>, <code>darkcyan</code> and <code>darkyellow</code>, and accepting strings merely containing a color name</li> </ul> <p><!-- raw HTML omitted --><!-- raw HTML omitted --></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/Canop/termimad/commits">compare view</a></li> </ul> </details> <br /> Updates `open` from 5.4.3 to 5.4.4 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/Byron/open-rs/releases">open's releases</a>.</em></p> <blockquote> <h2>v5.4.4</h2> <h3>Bug Fixes</h3> <ul> <li> <p>open Windows paths without wildcard expansion</p> <!-- raw HTML omitted --> <p>Opening a child of a bracket-named directory fails because Start-Process resolves parent directories as PowerShell wildcard patterns. The isolated Windows regression test reproduced WildcardPatternException for a copied executable under "【Tiny Asa】 [77P7V-712MB]\child" before this change.</p> <p>Use Test-Path and Invoke-Item with LiteralPath for existing items, retaining Start-Process for URLs and application names. These cmdlets also work under PowerShell Constrained Language Mode. Share the embedded script between Windows and WSL, keep targets in environment data, and stop on launch errors to report a nonzero exit status. Preserve the security boundary established in fd29861: cmd /c start remains opt-in through the insecure feature. No previously removed launcher options are restored.</p> <p>The integration test launches only a copy of its own test binary, which records its executable path and exits. It checks absolute and relative paths with invalid and valid bracket patterns, Unicode, backticks, quotes, shell metacharacters, and leading dashes in normal and constrained PowerShell sessions, plus failure for a missing executable. It requires neither Explorer nor registered document or URL handlers. Adjust the existing fallback assertion to also allow the opt-in cmd launcher after Explorer with all features enabled.</p> <p>Validated locally on Windows with PowerShell 5.1.26100.33438 and rustc 1.97.1: cargo test and cargo test --all-features each passed all 19 tests, including the behavioral regression. git diff --check passed, and cargo package --list includes the embedded script. Test-Path returned false without errors for representative https, mailto, and file URLs. Actual GUI folder, document, URL handling and WSL interop were not exercised locally.</p> </li> </ul> <h3>Commit Statistics</h3> <ul> <li>2 commits contributed to the release.</li> <li>8 days passed between releases.</li> <li>1 commit was understood as <a href="https://www.conventionalcommits.org">conventional</a>.</li> <li>1 unique issue was worked on: <a href="https://redirect.github.com/Byron/open-rs/issues/132">#132</a></li> </ul> <h3>Commit Details</h3> <!-- raw HTML omitted --> <!-- raw HTML omitted --> <ul> <li><strong><a href="https://redirect.github.com/Byron/open-rs/issues/132">#132</a></strong> <ul> <li>Open Windows paths without wildcard expansion (ad95c40)</li> </ul> </li> <li><strong>Uncategorized</strong></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/Byron/open-rs/blob/main/changelog.md">open's changelog</a>.</em></p> <blockquote> <h2>5.4.4 (2026-09-10)</h2> <h3>Bug Fixes</h3> <ul> <li> <p><!-- raw HTML omitted --> open Windows paths without wildcard expansion</p> <!-- raw HTML omitted --> <p>Opening a child of a bracket-named directory fails because Start-Process resolves parent directories as PowerShell wildcard patterns. The isolated Windows regression test reproduced WildcardPatternException for a copied executable under "【Tiny Asa】 [77P7V-712MB]\child" before this change.</p> <p>Use Test-Path and Invoke-Item with LiteralPath for existing items, retaining Start-Process for URLs and application names. These cmdlets also work under PowerShell Constrained Language Mode. Share the embedded script between Windows and WSL, keep targets in environment data, and stop on launch errors to report a nonzero exit status. Preserve the security boundary established in fd29861: cmd /c start remains opt-in through the insecure feature. No previously removed launcher options are restored.</p> <p>The integration test launches only a copy of its own test binary, which records its executable path and exits. It checks absolute and relative paths with invalid and valid bracket patterns, Unicode, backticks, quotes, shell metacharacters, and leading dashes in normal and constrained PowerShell sessions, plus failure for a missing executable. It requires neither Explorer nor registered document or URL handlers. Adjust the existing fallback assertion to also allow the opt-in cmd launcher after Explorer with all features enabled.</p> <p>Validated locally on Windows with PowerShell 5.1.26100.33438 and rustc 1.97.1: cargo test and cargo test --all-features each passed all 19 tests, including the behavioral regression. git diff --check passed, and cargo package --list includes the embedded script. Test-Path returned false without errors for representative https, mailto, and file URLs. Actual GUI folder, document, URL handling and WSL interop were not exercised locally.</p> </li> </ul> <h3>Commit Statistics</h3> <!-- raw HTML omitted --> <ul> <li>2 commits contributed to the release.</li> <li>8 days passed between releases.</li> <li>1 commit was understood as <a href="https://www.conventionalcommits.org">conventional</a>.</li> <li>1 unique issue was worked on: <a href="https://redirect.github.com/Byron/open-rs/issues/132">#132</a></li> </ul> <h3>Commit Details</h3> <!-- raw HTML omitted --> <!-- raw HTML omitted --> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/Byron/open-rs/commit/ba35e001028f03290eaae2cc1cad8411322507b2"><code>ba35e00</code></a> Release open v5.4.4</li> <li><a href="https://github.com/Byron/open-rs/commit/45317f8a4fdc43218dcc3418156e677e35662dff"><code>45317f8</code></a> Merge pull request <a href="https://redirect.github.com/Byron/open-rs/issues/133">#133</a> from Byron/fix-open-on-windows</li> <li><a href="https://github.com/Byron/open-rs/commit/ad95c40f98144b368ec759492edecd0b8b20b672"><code>ad95c40</code></a> fix: open Windows paths without wildcard expansion (<a href="https://redirect.github.com/Byron/open-rs/issues/132">#132</a>)</li> <li>See full diff in <a href="https://github.com/Byron/open-rs/compare/v5.4.3...v5.4.4">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Worktrunk
September 2026: Worktrunk was released at the start of the year, and has quickly become the most popular git worktree manager. It's built with love (there's no slop!). Please let me know any frictions at all; I'm intensely focused on continuing to make Worktrunk excellent, and the biggest help is folks posting problems they perceive.
Worktrunk is a CLI for git worktree management, designed for running AI agents in parallel.
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.
A quick demo:
📚 Full documentation at worktrunk.dev 📚
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
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 |
|
| Clean up | wt remove |
|
| List with status | wt list |
git worktree list (paths only) |
Expand into the more advanced commands as needed
Workflow automation:
- Hooks — run commands on create, pre-merge, post-merge, etc
- LLM commit messages — generate commit messages from diffs
- Merge workflow — squash, rebase, merge, clean up in one command
- Interactive picker — browse worktrees with live diff and log previews
- Share build caches — ten worktrees get
target/,node_modules/, etc without building or copying them (on APFS, btrfs, and XFS) wt list --full— CI status and AI-generated summaries per branch- PR checkout —
wt switch pr:123to jump straight to a PR's branch - Dev server per worktree —
hash_porttemplate filter gives each worktree a unique port - Aliases & per-branch variables — custom
wt <name>commands and branch-scoped state for hook templates - ...and lots more
Multiple parallel agents, same simple commands:
Install
Homebrew (macOS & Linux):
brew install worktrunk && wt config shell install
Shell integration allows commands to change directories.
Cargo:
cargo install worktrunk && wt config shell install
Windows & other
Windows. wt defaults to Windows Terminal's command, so Winget additionally installs Worktrunk as git-wt to avoid the conflict:
winget install max-sixty.worktrunk
git-wt config shell install
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, certificate by SignPath Foundation — policy.
Arch Linux:
sudo pacman -S worktrunk && wt config shell install
Conda / Pixi (community-maintained feedstock):
conda install -c conda-forge worktrunk && wt config shell install
Or with Pixi: pixi global install worktrunk && wt config shell install.
Quick start
Create a worktree for a new feature:
$ wt switch --create feature-auth
✓ Created branch feature-auth from main and worktree @ ~/repo.feature-auth
This creates a new branch and worktree, then switches to it. Do your work, then check all worktrees with wt list:
$ wt list
Branch Status HEAD± main↕ main…± Remote⇅ Commit Age Message
@ feature-auth + ↑ +27 -8 ↑1 +31 4bc72dc 2h Add authenticati…
^ main ^⇡ ⇡1 0e631ad 1d Initial commit
○ Showing 2 worktrees, 1 with changes, 1 ahead, hidden: Path
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:
wt step commit # commit staged changes
gh pr create # or glab mr create
wt remove # after PR is merged
Local merge — squash, rebase onto main, fast-forward merge, clean up:
$ wt merge main
◎ Generating commit message and committing changes... (2 files, +53, no squashing needed)
Add authentication module
✓ Committed changes @ a1b2c3d
◎ Merging 1 commit to main @ a1b2c3d (no rebase needed)
* a1b2c3d Add authentication module
auth.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
lib.rs | 2 ++
2 files changed, 53 insertions(+)
✓ Merged to main (1 commit, 2 files, +53)
◎ Removing feature-auth worktree & branch in background (same commit as main, _)
○ Switched to worktree for main @ ~/repo
For parallel agents, create multiple worktrees and launch an agent in each:
wt switch -x claude -c feature-a -- 'Add user authentication'
wt switch -x claude -c feature-b -- 'Fix the pagination bug'
wt switch -x claude -c feature-c -- 'Write tests for the API'
The -x flag runs a command after switching; arguments after -- are passed to it. Configure post-start hooks to automate setup (install deps, start dev servers).
Next steps
- Learn the core commands:
wt switch,wt list,wt merge,wt remove - Set up hooks for automated setup
- Explore LLM commit messages, interactive picker, Claude Code integration, CI status & PR links
- Browse tips & patterns for recipes: aliases, dev servers, databases, agent handoffs, and more
- Extending Worktrunk — customize workflows with hooks & aliases
- Run
wt --helporwt <command> --helpfor quick CLI reference
Further reading
- Claude Code: Best practices for agentic coding — Anthropic's official guide, including the worktree pattern
- Shipping faster with Claude Code and Git Worktrees — incident.io's workflow for parallel agents
- Git worktree pattern discussion — Community discussion in the Claude Code repo
- @DevOpsToolbox's video on Worktrunk
- git-worktree documentation — Official git reference
Contributing
- ⭐ Star the repo
- Tell a friend about Worktrunk
- Open an issue — feedback, feature requests, even a small friction or imperfect user message, or a worktree pain not yet solved
- Share: X · Reddit · LinkedIn
Running the tests
cargo test
The shell integration tests need bash, zsh, fish, nushell, and pwsh, plus jq:
cargo test --test integration --features shell-integration-tests
📚 Full documentation at worktrunk.dev 📚

