{
  "markdown": "<!-- markdownlint-disable MD033 -->\n\n<h1><img src=\"docs/public/logo.png\" alt=\"Worktrunk logo\" width=\"50\" align=\"absmiddle\">&nbsp;&nbsp;Worktrunk</h1>\n\n<!-- Crates.io badge below disabled while shields.io is rate-limited by crates.io\n     (renders \"CRATES.IO: INVALID\"). Tracking: badges/shields#11879. Restore once fixed.\n     [![Crates.io](https://img.shields.io/crates/v/worktrunk?style=for-the-badge&logo=rust)](https://crates.io/crates/worktrunk)\n-->\n[![Docs](https://img.shields.io/badge/docs-worktrunk.dev-blue?style=for-the-badge&logo=gitbook)](https://worktrunk.dev)\n[![License: MIT OR Apache-2.0](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue?style=for-the-badge)](https://opensource.org/licenses/MIT)\n[![CI](https://img.shields.io/github/actions/workflow/status/max-sixty/worktrunk/ci.yaml?event=push&branch=main&style=for-the-badge&logo=github)](https://github.com/max-sixty/worktrunk/actions?query=branch%3Amain+workflow%3Aci)\n[![Codecov](https://img.shields.io/codecov/c/github/max-sixty/worktrunk?style=for-the-badge&logo=codecov)](https://codecov.io/gh/max-sixty/worktrunk)\n[![Stars](https://img.shields.io/github/stars/max-sixty/worktrunk?style=for-the-badge&logo=github)](https://github.com/max-sixty/worktrunk/stargazers)\n[![maintained with tend](https://img.shields.io/badge/maintained_with-tend-bba580?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxNikgc2NhbGUoMC4wMTI1LC0wLjAxMjUpIiBmaWxsPSIjZmZmIiBzdHJva2U9Im5vbmUiPjxwYXRoIGQ9Ik02ODAgMTEyOCBjNjIgLTk2IDY5IC0xNzggMjAgLTI0MSAtMTcgLTIyIC0yMCAtNDAgLTIwIC0xMzQgbDEgLTEwOCAyMSAyOCBjMTEgMTYgMzAgNDcgNDIgNzAgMTIgMjIgMzIgNDkgNDYgNTkgMzcgMjcgMTE0IDM4IDE4NCAyNyA5MyAtMTUgOTQgLTE4IDQ0IC03OSAtNzIgLTg4IC0xMDkgLTExMyAtMTc2IC0xMTcgLTMxIC0yIC02NCAxIC03MiA2IC0yMyAxNSAyMSA1NiAxMDcgOTggNDAgMjAgNzEgMzggNjkgNDAgLTYgNyAtODggLTE3IC0xMjYgLTM3IC00OSAtMjUgLTEwMCAtNzggLTEyMSAtMTI1IC0xNSAtMzMgLTE5IC02NiAtMTkgLTE4OCAwIC0xNTcgOCAtMTk1IDUwIC0yMzIgMTcgLTE2IDM2IC0yMCA4NSAtMTkgNjIgMSA2MyAxIDczIC0zMiA5IC0zMiA5IC0zMyAtMjIgLTQwIC01MCAtMTIgLTEzMiAtNyAtMTY0IDEwIC00MCAyMSAtNzkgNjkgLTkyIDExNCAtNSAyMCAtMTAgMTAyIC0xMCAxODIgMCA4MCAtNSAxNjIgLTExIDE4NCAtMjIgNzkgLTEzNSAxNjYgLTIzNCAxODEgLTM3IDYgLTM1IDMgMzAgLTI4IDc4IC0zOSAxNDQgLTkxIDEzMiAtMTA0IC01IC00IC0zNyAtOCAtNzEgLTggLTc3IDAgLTExNyAyNCAtMTgyIDEwOSAtNTIgNjggLTUxIDcwIDQyIDg1IDcxIDExIDE0MyAwIDE4MyAtMjkgMTYgLTExIDQwIC00MyA1NCAtNzMgMTMgLTI5IDMyIC01OSA0MSAtNjYgMTQgLTEyIDE2IC03IDE2IDU4IDAgNTkgNCA3NyAyMyAxMDIgMTkgMjYgMjMgNDYgMjUgMTMwIDMgNjcgMCA5OSAtNyA5OSAtNyAwIC0xMSAtMjMgLTEyIC01NyAwIC0zMiAtNiAtNzYgLTEyIC05NyBsLTEyIC00MCAtMjcgMzIgYy0zNCA0MSAtNDMgOTYgLTI0IDE1MSAxNCA0MSA3NSAxNDEgODYgMTQxIDMgMCAyMSAtMjQgNDAgLTUyeiIvPjwvZz48L3N2Zz4K)](https://github.com/max-sixty/tend)\n\n> **September 2026**: Worktrunk was [released](https://x.com/max_sixty/status/2006077845391724739?s=20) 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.\n\nWorktrunk is a CLI for git worktree management, designed for running AI agents in parallel.\n\nWorktrunk'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.\n\nA quick demo:\n\n![Worktrunk Demo](https://cdn.jsdelivr.net/gh/max-sixty/worktrunk-assets@main/assets/docs/light/wt-core.gif)\n\n> ### 📚 Full documentation at [worktrunk.dev](https://worktrunk.dev) 📚\n\n<!-- ⚠️ AUTO-GENERATED from docs/src/content/docs/worktrunk.md#context-git-worktrees..worktrunk-makes-git-worktrees-as-easy-as-branches — edit source to update -->\n\n## Context: git worktrees\n\nAI agents like Claude Code and Codex can handle longer tasks without\nsupervision, such that it's possible to manage 5-10+ in parallel. Git's native\nworktree feature give each agent its own working directory, so they don't step\non each other's changes.\n\nBut the git worktree UX is clunky. Even a task as small as starting a new\nworktree requires typing the branch name three times: `git worktree add -b feat\n../repo.feat`, then `cd ../repo.feat`.\n\n## Worktrunk makes git worktrees as easy as branches\n\nWorktrees 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.\n\n<p class=\"workflow-stage\">Start with the core commands</p>\n\n**Core commands:**\n\n<table class=\"cmd-compare\">\n  <thead>\n    <tr>\n      <th>Task</th>\n      <th>Worktrunk</th>\n      <th>Plain git</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>Switch worktrees</td>\n      <td data-label=\"Worktrunk\"><code>wt switch feat</code></td>\n      <td data-label=\"Plain git\"><code>cd ../repo.feat</code></td>\n    </tr>\n    <tr>\n      <td>Create + start Claude</td>\n      <td data-label=\"Worktrunk\"><code>wt switch -c -x claude feat</code></td>\n      <td data-label=\"Plain git\"><pre><code>git worktree add -b feat ../repo.feat && \\\ncd ../repo.feat && \\\nclaude</code></pre></td>\n    </tr>\n    <tr>\n      <td>Clean up</td>\n      <td data-label=\"Worktrunk\"><code>wt remove</code></td>\n      <td data-label=\"Plain git\"><pre><code>cd ../repo && \\\ngit worktree remove ../repo.feat && \\\ngit branch -d feat</code></pre></td>\n    </tr>\n    <tr>\n      <td>List with status</td>\n      <td data-label=\"Worktrunk\"><code>wt list</code></td>\n      <td data-label=\"Plain git\"><span class=\"cmd-compare-value\"><code>git worktree list</code> (paths only)</span></td>\n    </tr>\n  </tbody>\n</table>\n\n<p class=\"workflow-stage\">Expand into the more advanced commands as needed</p>\n\n<p class=\"workflow-heading\"><strong>Workflow automation:</strong></p>\n\n- **[Hooks](https://worktrunk.dev/hook/)** — run commands on create, pre-merge, post-merge, etc\n- **[LLM commit messages](https://worktrunk.dev/llm-commits/)** — generate commit messages from diffs\n- **[Merge workflow](https://worktrunk.dev/merge/)** — squash, rebase, merge, clean up in one command\n- **[Interactive picker](https://worktrunk.dev/switch/#interactive-picker)** — browse worktrees with live diff and log previews\n- **[Copy build caches](https://worktrunk.dev/step/#wt-step-copy-ignored)** — skip cold starts by sharing `target/`, `node_modules/`, etc between worktrees\n- **[`wt list --full`](https://worktrunk.dev/list/#full-mode)** — [CI status](https://worktrunk.dev/list/#ci-status) and [AI-generated summaries](https://worktrunk.dev/list/#llm-summaries) per branch\n- **[PR checkout](https://worktrunk.dev/switch/#pull-requests-and-merge-requests)** — `wt switch pr:123` to jump straight to a PR's branch\n- **[Dev server per worktree](https://worktrunk.dev/tips-patterns/#dev-server-per-worktree)** — `hash_port` template filter gives each worktree a unique port\n- **[Aliases](https://worktrunk.dev/extending/#aliases) & [per-branch variables](https://worktrunk.dev/config/#wt-config-state-vars)** — custom `wt <name>` commands and branch-scoped state for hook templates\n- ...and **[lots more](#next-steps)**\n\nMultiple parallel agents, same simple commands:\n\n![Worktrunk omnibus demo: multiple Claude agents in Zellij tabs with hooks, LLM commits, and merge workflow](https://raw.githubusercontent.com/max-sixty/worktrunk-assets/main/assets/docs/light/wt-zellij-omnibus.gif)\n\n<!-- END AUTO-GENERATED -->\n\n<!-- ⚠️ AUTO-GENERATED from docs/src/content/docs/worktrunk.md#install..further-reading — edit source to update -->\n\n## Install\n\n**Homebrew (macOS & Linux):**\n\n```bash\nbrew install worktrunk && wt config shell install\n```\n\nShell integration allows commands to change directories.\n\n**Cargo:**\n\n```bash\ncargo install worktrunk && wt config shell install\n```\n\n<details>\n<summary><strong>Windows & other</strong></summary>\n\n**Windows.** `wt` defaults to Windows Terminal's command, so Winget additionally installs Worktrunk as `git-wt` to avoid the conflict:\n\n```bash\nwinget install max-sixty.worktrunk\ngit-wt config shell install\n```\n\nAlternatively, disable Windows Terminal's alias (Settings → Apps → Advanced app settings → App execution aliases → \"Terminal\"/\"Terminal Preview\") to use `wt` directly.\n\n> Free code signing provided by [SignPath.io](https://signpath.io/), certificate by [SignPath Foundation](https://signpath.org/) — [policy](https://worktrunk.dev/code-signing/).\n\n**Arch Linux:**\n\n```bash\nsudo pacman -S worktrunk && wt config shell install\n```\n\n**Conda / Pixi** (community-maintained [feedstock](https://github.com/conda-forge/worktrunk-feedstock)):\n\n```bash\nconda install -c conda-forge worktrunk && wt config shell install\n```\n\nOr with [Pixi](https://pixi.sh): `pixi global install worktrunk && wt config shell install`.\n\n</details>\n\n## Quick start\n\nCreate a worktree for a new feature:\n\n```console\n$ wt switch --create feature-auth\n✓ Created branch feature-auth from main and worktree @ ~/repo.feature-auth\n```\n\nThis creates a new branch and worktree, then switches to it. Do your work, then check all worktrees with [`wt list`](https://worktrunk.dev/list/):\n\n```console\n$ wt list\n  Branch        Status        HEAD±    main↕     main…±  Remote⇅  Commit   Age   Message\n@ feature-auth  +   ↑      +27   -8   ↑1       +31                4bc72dc  2h    Add authenticati…\n^ main              ^⇡                                    ⇡1      0e631ad  1d    Initial commit\n\n○ Showing 2 worktrees, 1 with changes, 1 ahead, 1 column hidden\n```\n\nThe `@` marks the current worktree. `+` means staged changes, `↑1` means 1 commit ahead of main, `⇡` means unpushed commits.\n\nWhen done, either:\n\n**PR workflow** — commit, push, open a PR, merge via GitHub/GitLab, then clean up:\n\n```bash\nwt step commit                    # commit staged changes\ngh pr create                      # or glab mr create\nwt remove                         # after PR is merged\n```\n\n**Local merge** — squash, rebase onto main, fast-forward merge, clean up:\n\n```console\n$ wt merge main\n◎ Generating commit message and committing changes... (2 files, +53, no squashing needed)\n  Add authentication module\n✓ Committed changes @ a1b2c3d\n◎ Merging 1 commit to main @ a1b2c3d (no rebase needed)\n  * a1b2c3d Add authentication module\n   auth.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++\n   lib.rs  |  2 ++\n   2 files changed, 53 insertions(+)\n✓ Merged to main (1 commit, 2 files, +53)\n◎ Removing feature-auth worktree & branch in background (same commit as main, _)\n○ Switched to worktree for main @ ~/repo\n```\n\nFor parallel agents, create multiple worktrees and launch an agent in each:\n\n```bash\nwt switch -x claude -c feature-a -- 'Add user authentication'\nwt switch -x claude -c feature-b -- 'Fix the pagination bug'\nwt switch -x claude -c feature-c -- 'Write tests for the API'\n```\n\nThe `-x` flag runs a command after switching; arguments after `--` are passed to it. Configure [post-start hooks](https://worktrunk.dev/hook/#hook-types) to automate setup (install deps, start dev servers).\n\n## Next steps\n\n- Learn the core commands: [`wt switch`](https://worktrunk.dev/switch/), [`wt list`](https://worktrunk.dev/list/), [`wt merge`](https://worktrunk.dev/merge/), [`wt remove`](https://worktrunk.dev/remove/)\n- Set up [hooks](https://worktrunk.dev/hook/) for automated setup\n- Explore [LLM commit messages](https://worktrunk.dev/llm-commits/), [interactive\n  picker](https://worktrunk.dev/switch/#interactive-picker), [Claude Code integration](https://worktrunk.dev/claude-code/), [CI\n  status & PR links](https://worktrunk.dev/list/#ci-status)\n- Browse [tips & patterns](https://worktrunk.dev/tips-patterns/) for recipes: aliases, dev servers, databases, agent handoffs, and more\n- [Extending Worktrunk](https://worktrunk.dev/extending/) — customize workflows with hooks & aliases\n- Run `wt --help` or `wt <command> --help` for quick CLI reference\n\n## Further reading\n\n- [Claude Code: Best practices for agentic coding](https://www.anthropic.com/engineering/claude-code-best-practices) — Anthropic's official guide, including the worktree pattern\n- [Shipping faster with Claude Code and Git Worktrees](https://incident.io/blog/shipping-faster-with-claude-code-and-git-worktrees) — incident.io's workflow for parallel agents\n- [Git worktree pattern discussion](https://github.com/anthropics/claude-code/issues/1052) — Community discussion in the Claude Code repo\n- [@DevOpsToolbox's video on Worktrunk](https://youtu.be/WBQiqr6LevQ?t=345)\n- [git-worktree documentation](https://git-scm.com/docs/git-worktree) — Official git reference\n\n<!-- END AUTO-GENERATED -->\n\n## Contributing\n\n- ⭐ Star the repo\n- Tell a friend about Worktrunk\n- [Open an issue](https://github.com/max-sixty/worktrunk/issues/new?title=&body=%23%23%20Description%0A%0A%3C!--%20Describe%20the%20bug%20or%20feature%20request%20--%3E%0A%0A%23%23%20Context%0A%0A%3C!--%20Any%20relevant%20context%3A%20your%20workflow%2C%20what%20you%20were%20trying%20to%20do%2C%20etc.%20--%3E) — feedback, feature requests, even a small friction or imperfect user message, or [a worktree pain not yet solved](https://github.com/max-sixty/worktrunk/issues/new?title=Worktree%20friction%3A%20&body=%23%23%20The%20friction%0A%0A%3C!--%20What%20worktree-related%20task%20is%20still%20painful%3F%20--%3E%0A%0A%23%23%20Current%20workaround%0A%0A%3C!--%20How%20do%20you%20handle%20this%20today%3F%20--%3E%0A%0A%23%23%20Ideal%20solution%0A%0A%3C!--%20What%20would%20make%20this%20easier%3F%20--%3E)\n- Share: [X](https://twitter.com/intent/tweet?text=Worktrunk%20%E2%80%94%20CLI%20for%20git%20worktree%20management&url=https%3A%2F%2Fworktrunk.dev) · [Reddit](https://www.reddit.com/submit?url=https%3A%2F%2Fworktrunk.dev&title=Worktrunk%20%E2%80%94%20CLI%20for%20git%20worktree%20management) · [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fworktrunk.dev)\n\n> ### 📚 Full documentation at [worktrunk.dev](https://worktrunk.dev) 📚\n\n### Star history\n\n<!-- `sealed_token` is a GitHub token of ours encrypted with star-history's public\n     key, from \"Generate embed code\" on star-history.com. Without one the chart\n     renders a \"GitHub restricted access to star data\" placeholder: GitHub limits\n     stargazer data to a repo's admins and collaborators, and their servers are\n     neither.\n\n     The token is fine-grained and reaches only this repo. Its Contents permission\n     has to be read *and write* — write access is what GitHub accepts as proof of\n     collaborator status, so rotating to a read-only token brings the placeholder\n     straight back. Publishing the ciphertext is safe on its own; what the scope\n     buys is a bound on star-history, which decrypts it and so holds a credential\n     that can push here until it expires 2027-08-16 — at which point the chart\n     reverts to the placeholder with nothing else to signal it. star-history\n     reports GitHub is working on restoring access, so drop this parameter once\n     the plain URL renders a chart again. -->\n<a href=\"https://star-history.com/#max-sixty/worktrunk&Date\">\n  <img src=\"https://api.star-history.com/svg?repos=max-sixty/worktrunk&type=Date&sealed_token=2ySbQiVbkVrGmwgDsJya-xr4ApbVVvR0siYI46d22Xj_1kPCcgA9X0YpUGc3__aMuZ0ZAWzG4NBhJtqepYjlkoYrVwmKbgaPmGpNZTCfSyVp8EDA_IXaOOYW2whsOXDAi6g7HD9ezsnqSl58n7AqW2_4IQ4hY2p3h7tNv_3k4am5ASq1NdpbfrOUazCl\" width=\"500\" alt=\"Star History Chart\">\n</a>\n",
  "bytes": 15459,
  "sha": "7d4ec03df4b0b3220f7afba5f31cefb97845957c11e92babcbcaff75ecf4572e",
  "repo_slug": "max-sixty/worktrunk",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_max_sixty_worktrunk_6fffcc5e/readme"
}