[{"data":1,"prerenderedAt":229},["ShallowReactive",2],{"en-post-96":3},{"id":4,"title":5,"body":6,"description":210,"extension":222,"meta":223,"navigation":224,"path":225,"seo":226,"stem":227,"__hash__":228},"content/post/96.md","96",{"type":7,"value":8,"toc":209},"minimark",[9,14,43,47,64,68,106,110,113,117,120,124,134,138,160,164,167,171,187,199],[10,11,13],"h2",{"id":12},"what-this-project-does","What This Project Does",[15,16,17,18,22,23,26,27,30,31,34,35,38,39,42],"p",{},"Worktrunk is a command line tool for managing Git worktrees. Its core goal is to make worktrees as easy to use as switching branches. It shortens a worktree's address to its branch name, with the real path derived from a configurable template, so you no longer need to remember a long directory string. It has only a handful of core commands: ",[19,20,21],"code",{},"wt switch feat"," switches, ",[19,24,25],{},"wt switch -c -x claude feat"," creates a worktree and launches Claude to work in it, and ",[19,28,29],{},"wt remove"," cleans up. On top of those there is ",[19,32,33],{},"wt list"," to show every worktree with its status, ",[19,36,37],{},"wt merge main"," to do squash, rebase, merge, and cleanup in one step, and ",[19,40,41],{},"wt step commit"," to record changes. Each agent gets its own working directory, so they never step on each other. It is built specifically for the case where several AI agents work on the same repository at the same time, which is why the commands stay so small and addressable by branch alone.",[10,44,46],{"id":45},"what-problem-it-solves","What Problem It Solves",[15,48,49,50,53,54,57,58,63],{},"Agents like Claude Code and Codex can now take on longer tasks that need less human supervision, so many teams run 5 to 10 or more of them at once. Native Git worktrees do give each agent a separate directory, but the UX is clumsy. Creating a single worktree means typing the branch name three times. Once you have seven or eight worktrees open, just remembering which folder each one lives in becomes a burden. Worktrunk shortens that flow to branch name addressing. You say the branch name and let the template figure out the directory. It also fills the gaps in parallel workflows. You get hook automation, LLM generated commit messages, an interactive picker for CI status and AI summaries, and shared build caches like ",[19,51,52],{},"target/"," and ",[19,55,56],{},"node_modules/"," across worktrees. On filesystems such as APFS, btrfs, and XFS it uses copy on write, which removes the wait of rebuilding from scratch. For a project where a build can take ten-plus minutes, rerunning it in every worktree is real wasted time, and this cache layer cuts that wait out. If you are building multi agent setups, see ",[59,60,62],"a",{"href":61},"/post/70/","What Is Claude-Code-Game-Studios and How to Use It",", since the thinking overlaps a lot.",[10,65,67],{"id":66},"language-and-architecture","Language and Architecture",[69,70,71,75,86,89,100],"ul",{},[72,73,74],"li",{},"Main language is Rust.",[72,76,77,78,81,82,85],{},"Install channels cover Homebrew, Cargo, and Winget. One catch to watch: on Windows it is installed as ",[19,79,80],{},"git-wt"," to avoid a name clash with the Windows Terminal's ",[19,83,84],{},"wt",". Arch Linux, Conda, and Pixi also carry it.",[72,87,88],{},"The core commands follow the worktree lifecycle, and an interactive picker streams CI status, diff, log, PR, and comment previews in one place.",[72,90,91,92,95,96,99],{},"Quality features are thorough. Hooks fire commands at create, pre-merge, and post-merge moments. LLM commit messages generate the message straight from the diff. The ",[19,93,94],{},"hash_port"," template filter gives each worktree its own dev server port. ",[19,97,98],{},"wt switch pr:123"," jumps straight to the branch behind a PR. Aliases and branch scoped variables are supported.",[72,101,102,103,105],{},"The project launched in early 2026, authored by max-sixty (Maximilian Roos), and has quickly become the most popular git worktree manager. The template system lets you build the on disk path from variables, and together with filters like ",[19,104,94],{}," the same config grows different ports and variables per worktree, so you skip editing the environment by hand.",[10,107,109],{"id":108},"license","License",[15,111,112],{},"MIT OR Apache-2.0 (dual license, pick either)",[10,114,116],{"id":115},"why-it-is-trending-now","Why It Is Trending Now",[15,118,119],{},"In 2026, running AI agents in parallel became the mainstream way of working, and worktree management is a real pain point you cannot avoid. Worktrunk ships a clean CLI and then stacks on hooks, CoW caching, LLM commits, and a CI aware picker, which quickly put it at the top of this niche. It has about 11.6k stars in total, with roughly 546 stars added that day.",[10,121,123],{"id":122},"where-to-find-it","Where to Find It",[15,125,126,129,130,133],{},[19,127,128],{},"https://github.com/max-sixty/worktrunk"," (docs ",[19,131,132],{},"https://worktrunk.dev",")",[10,135,137],{"id":136},"getting-started","Getting Started",[15,139,140,141,144,145,147,148,150,151,153,154,156,157,159],{},"Start by spinning up a worktree with ",[19,142,143],{},"wt switch -c feat"," to feel the flow, then run ",[19,146,33],{}," to see whether the status display matches what you expect. To run agents in parallel, open one worktree per task and use ",[19,149,94],{}," to spread the dev server ports so they do not fight over the same address. When it comes to commits, turn on LLM commit messages to keep the messages coherent and make it easier to review later what each worktree changed. In production, set Hooks on pre-merge to validate, which lowers the risk of merging half done work back to the main branch. For cleanup, use ",[19,152,29],{}," consistently instead of deleting directories by hand and leaving dangling references. As you settle in, look at aliases and branch scoped variables to trim the commands you type most, since those also help keep each agent's environment consistent. Windows users should remember the command name ",[19,155,80],{}," and not confuse it with the Windows Terminal's ",[19,158,84],{},", or the command will open the terminal instead.",[10,161,163],{"id":162},"summary","Summary",[15,165,166],{},"Worktrunk moves Git worktrees from \"usable but awkward\" to \"handy enough to use every day\". For teams that want several AI agents working in parallel without being slowed by directories and build caches, it removes the chore of hand writing scripts to stitch worktrees together, and that makes it a low level tool worth installing.",[10,168,170],{"id":169},"faq","FAQ",[15,172,173,177,178,180,181,183,184,186],{},[174,175,176],"strong",{},"wt or git-wt, which one is correct?","\nOn Windows the command is ",[19,179,80],{},", installed that way to avoid clashing with the Windows Terminal's built in ",[19,182,84],{},". On macOS and Linux it is normally just ",[19,185,84],{},". Check the platform note at install time and you are fine.",[15,188,189,192,193,195,196,198],{},[174,190,191],{},"Which projects benefit most from the copy on write cache?","\nProjects with large directories like ",[19,194,52],{}," in Rust or ",[19,197,56],{}," in Node gain the most. Worktrunk shares those directories with CoW on APFS, btrfs, and XFS, so each worktree skips the repeated build.",[15,200,201,204,205,208],{},[174,202,203],{},"Can multiple agents edit the same repo at once?","\nYes, and that is exactly what it is built for. Each agent takes its own worktree and they stay out of each other's way. When done, use ",[19,206,207],{},"wt merge"," to bring the results back. The key is giving each worktree a different port so the dev servers do not grab the same address.",{"title":210,"searchDepth":211,"depth":211,"links":212},"",2,[213,214,215,216,217,218,219,220,221],{"id":12,"depth":211,"text":13},{"id":45,"depth":211,"text":46},{"id":66,"depth":211,"text":67},{"id":108,"depth":211,"text":109},{"id":115,"depth":211,"text":116},{"id":122,"depth":211,"text":123},{"id":136,"depth":211,"text":137},{"id":162,"depth":211,"text":163},{"id":169,"depth":211,"text":170},"md",{},true,"/post/96",{"description":210},"post/96","p0ZibqGirGaNi5HRLxL99f6RaAuokv9h-IElUFos9is",1794378304445]