{"id":34683267,"url":"https://github.com/max-sixty/worktrunk","last_synced_at":"2026-03-15T05:47:26.958Z","repository":{"id":326732346,"uuid":"1078528927","full_name":"max-sixty/worktrunk","owner":"max-sixty","description":"Worktrunk is a CLI for Git worktree management, designed for parallel AI agent workflows","archived":false,"fork":false,"pushed_at":"2026-01-14T23:30:25.000Z","size":32582,"stargazers_count":1118,"open_issues_count":15,"forks_count":40,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-14T23:31:29.898Z","etag":null,"topics":["agents","claude-code","codex","developer-tools","git","worktrees"],"latest_commit_sha":null,"homepage":"https://worktrunk.dev","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/max-sixty.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-10-17T22:13:14.000Z","updated_at":"2026-01-14T23:30:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/max-sixty/worktrunk","commit_stats":null,"previous_names":["max-sixty/worktrunk"],"tags_count":52,"template":false,"template_full_name":null,"purl":"pkg:github/max-sixty/worktrunk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/max-sixty%2Fworktrunk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/max-sixty%2Fworktrunk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/max-sixty%2Fworktrunk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/max-sixty%2Fworktrunk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/max-sixty","download_url":"https://codeload.github.com/max-sixty/worktrunk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/max-sixty%2Fworktrunk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28482215,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","claude-code","codex","developer-tools","git","worktrees"],"created_at":"2025-12-24T21:35:53.506Z","updated_at":"2026-03-15T05:47:26.952Z","avatar_url":"https://github.com/max-sixty.png","language":"Rust","readme":"\u003c!-- markdownlint-disable MD033 --\u003e\n\n\u003ch1\u003e\u003cimg src=\"docs/static/logo.png\" alt=\"Worktrunk logo\" width=\"50\" align=\"absmiddle\"\u003e\u0026nbsp;\u0026nbsp;Worktrunk\u003c/h1\u003e\n\n[![Docs](https://img.shields.io/badge/docs-worktrunk.dev-blue?style=for-the-badge\u0026logo=gitbook)](https://worktrunk.dev)\n[![Crates.io](https://img.shields.io/crates/v/worktrunk?style=for-the-badge\u0026logo=rust)](https://crates.io/crates/worktrunk)\n[![License: MIT](https://img.shields.io/badge/license-MIT-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\u0026branch=main\u0026style=for-the-badge\u0026logo=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\u0026logo=codecov)](https://codecov.io/gh/max-sixty/worktrunk)\n[![Stars](https://img.shields.io/github/stars/max-sixty/worktrunk?style=for-the-badge\u0026logo=github)](https://github.com/max-sixty/worktrunk/stargazers)\n\n\u003e **March 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\nScaling agents becomes trivial. A quick demo:\n\n![Worktrunk Demo](https://cdn.jsdelivr.net/gh/max-sixty/worktrunk-assets@main/assets/docs/light/wt-core.gif)\n\n\u003e ### 📚 Full documentation at [worktrunk.dev](https://worktrunk.dev) 📚\n\n\u003c!-- ⚠️ AUTO-GENERATED from docs/content/worktrunk.md#context-git-worktrees..worktrunk-makes-git-worktrees-as-easy-as-branches — edit source to update --\u003e\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.\n\n\u003e Start with the core commands\n\n**Core commands:**\n\n\u003ctable class=\"cmd-compare\"\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eTask\u003c/th\u003e\n      \u003cth\u003eWorktrunk\u003c/th\u003e\n      \u003cth\u003ePlain git\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003eSwitch worktrees\u003c/td\u003e\n      \u003ctd\u003e\u003cpre\u003ewt switch feat\u003c/pre\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cpre\u003ecd ../repo.feat\u003c/pre\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003eCreate + start Claude\u003c/td\u003e\n      \u003ctd\u003e\u003cpre\u003ewt switch -c -x claude feat\u003c/pre\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cpre\u003egit worktree add -b feat ../repo.feat \u0026\u0026 \\\ncd ../repo.feat \u0026\u0026 \\\nclaude\u003c/pre\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003eClean up\u003c/td\u003e\n      \u003ctd\u003e\u003cpre\u003ewt remove\u003c/pre\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cpre\u003ecd ../repo \u0026\u0026 \\\ngit worktree remove ../repo.feat \u0026\u0026 \\\ngit branch -d feat\u003c/pre\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003eList with status\u003c/td\u003e\n      \u003ctd\u003e\u003cpre\u003ewt list\u003c/pre\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003cpre\u003egit worktree list\u003c/pre\u003e (paths only)\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003e Expand into the more advanced commands as needed\n\n**Workflow automation:**\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/)** — 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/hook/#dev-servers)** — `hash_port` template filter gives each worktree a unique port\n- ...and **[lots more](#next-steps)**\n\nA demo with some advanced features:\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\u003c!-- END AUTO-GENERATED --\u003e\n\n\u003c!-- ⚠️ AUTO-GENERATED from docs/content/worktrunk.md#install..further-reading — edit source to update --\u003e\n\n## Install\n\n**Homebrew (macOS \u0026 Linux):**\n\n```bash\nbrew install worktrunk \u0026\u0026 wt config shell install\n```\n\nShell integration allows commands to change directories.\n\n**Cargo:**\n\n```bash\ncargo install worktrunk \u0026\u0026 wt config shell install\n```\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWindows\u003c/strong\u003e\u003c/summary\u003e\n\nOn Windows, `wt` defaults to Windows Terminal's command. 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 → Privacy \u0026 security → For developers → App Execution Aliases → disable \"Windows Terminal\") to use `wt` directly.\n\n\u003c/details\u003e\n\n**Arch Linux:**\n\n```bash\nparu worktrunk-bin \u0026\u0026 wt config shell install\n```\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```\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↕  Remote⇅  Commit    Age   Message\n@ feature-auth  +   –      +53                         0e631add  1d    Initial commit\n^ main              ^⇡                         ⇡1      0e631add  1d    Initial commit\n\n○ Showing 2 worktrees, 1 with changes, 1 column hidden\n\n```\n\nThe `@` marks the current worktree. `+` means staged changes, `⇡` 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 \u0026 branch in background (same commit as main, _)\n○ Switched to worktree for main @ repo\n\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/) 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 [project 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 \u0026 PR links](https://worktrunk.dev/list/#ci-status)\n- Browse [tips \u0026 patterns](https://worktrunk.dev/tips-patterns/) for recipes: aliases, dev servers, databases, agent handoffs, and more\n- Run `wt --help` or `wt \u003ccommand\u003e --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\u003c!-- END AUTO-GENERATED --\u003e\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=\u0026body=%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\u0026body=%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\u0026url=https%3A%2F%2Fworktrunk.dev) · [Reddit](https://www.reddit.com/submit?url=https%3A%2F%2Fworktrunk.dev\u0026title=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\u003e ### 📚 Full documentation at [worktrunk.dev](https://worktrunk.dev) 📚\n\n### Star history\n\n\u003ca href=\"https://star-history.com/#max-sixty/worktrunk\u0026Date\"\u003e\n  \u003cimg src=\"https://api.star-history.com/svg?repos=max-sixty/worktrunk\u0026type=Date\" width=\"500\" alt=\"Star History Chart\"\u003e\n\u003c/a\u003e\n","funding_links":[],"categories":["Applications","Rust","Agent Orchestration","Developer \u0026 Coding Assistants"],"sub_categories":["Productivity","Code Generation \u0026 Refactoring"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmax-sixty%2Fworktrunk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmax-sixty%2Fworktrunk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmax-sixty%2Fworktrunk/lists"}