[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-max-sixty--worktrunk":3,"tool-max-sixty--worktrunk":61},[4,18,26,36,44,52],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",141543,2,"2026-04-06T11:32:54",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107888,"2026-04-06T11:32:50",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":10,"last_commit_at":50,"category_tags":51,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":53,"name":54,"github_repo":55,"description_zh":56,"stars":57,"difficulty_score":10,"last_commit_at":58,"category_tags":59,"status":17},4292,"Deep-Live-Cam","hacksider\u002FDeep-Live-Cam","Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具，用户仅需一张静态照片，即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点，让高质量的数字内容创作变得触手可及。\n\n这款工具不仅适合开发者和技术研究人员探索算法边界，更因其极简的操作逻辑（仅需三步：选脸、选摄像头、启动），广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换，还是制作趣味短视频和直播互动，Deep-Live-Cam 都能提供流畅的支持。\n\n其核心技术亮点在于强大的实时处理能力，支持口型遮罩（Mouth Mask）以保留使用者原始的嘴部动作，确保表情自然精准；同时具备“人脸映射”功能，可同时对画面中的多个主体应用不同面孔。此外，项目内置了严格的内容安全过滤机制，自动拦截涉及裸露、暴力等不当素材，并倡导用户在获得授权及明确标注的前提下合规使用，体现了技术发展与伦理责任的平衡。",88924,"2026-04-06T03:28:53",[14,15,13,60],"视频",{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":78,"owner_email":77,"owner_twitter":79,"owner_website":77,"owner_url":80,"languages":81,"stars":104,"forks":105,"last_commit_at":106,"license":107,"difficulty_score":32,"env_os":108,"env_gpu":109,"env_ram":109,"env_deps":110,"category_tags":115,"github_topics":116,"view_count":32,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":123,"updated_at":124,"faqs":125,"releases":154},4567,"max-sixty\u002Fworktrunk","worktrunk","Worktrunk is a CLI for Git worktree management, designed for parallel AI agent workflows","Worktrunk 是一款专为并行 AI 代理工作流设计的命令行工具，旨在简化 Git Worktree（多工作树）的管理。随着 Claude Code、Codex 等 AI 编程助手能够独立处理长时间任务，开发者往往需要同时运行多个代理。Git 原生的 Worktree 功能虽能为每个代理提供独立的工作目录以避免冲突，但其操作命令繁琐、路径管理复杂，极大地影响了使用体验。\n\nWorktrunk 的核心价值在于让管理 Worktree 像切换普通分支一样简单。它通过直观的指令（如 `wt switch`）替代了冗长的原生 Git 命令，自动处理目录创建、跳转及清理工作。其独特亮点包括支持基于分支名的快捷寻址、可配置的路径模板，以及强大的自动化钩子（Hooks），能够在创建或合并时自动触发预设命令。此外，它还集成了由大模型生成提交消息等实用功能，显著提升了多任务并行的效率。\n\n这款工具非常适合需要同时调度多个 AI 代理进行开发、测试或代码重构的软件工程师与研究人员。如果你正致力于扩展 AI 辅助开发的规模，希望在不牺牲工作流整洁度的前提下高效管理数十个并行任务，Worktrunk 将是","Worktrunk 是一款专为并行 AI 代理工作流设计的命令行工具，旨在简化 Git Worktree（多工作树）的管理。随着 Claude Code、Codex 等 AI 编程助手能够独立处理长时间任务，开发者往往需要同时运行多个代理。Git 原生的 Worktree 功能虽能为每个代理提供独立的工作目录以避免冲突，但其操作命令繁琐、路径管理复杂，极大地影响了使用体验。\n\nWorktrunk 的核心价值在于让管理 Worktree 像切换普通分支一样简单。它通过直观的指令（如 `wt switch`）替代了冗长的原生 Git 命令，自动处理目录创建、跳转及清理工作。其独特亮点包括支持基于分支名的快捷寻址、可配置的路径模板，以及强大的自动化钩子（Hooks），能够在创建或合并时自动触发预设命令。此外，它还集成了由大模型生成提交消息等实用功能，显著提升了多任务并行的效率。\n\n这款工具非常适合需要同时调度多个 AI 代理进行开发、测试或代码重构的软件工程师与研究人员。如果你正致力于扩展 AI 辅助开发的规模，希望在不牺牲工作流整洁度的前提下高效管理数十个并行任务，Worktrunk 将是一个得力的助手。","\u003C!-- markdownlint-disable MD033 -->\n\n\u003Ch1>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmax-sixty_worktrunk_readme_063ea028c266.png\" alt=\"Worktrunk logo\" width=\"50\" align=\"absmiddle\">&nbsp;&nbsp;Worktrunk\u003C\u002Fh1>\n\n[![Docs](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdocs-worktrunk.dev-blue?style=for-the-badge&logo=gitbook)](https:\u002F\u002Fworktrunk.dev)\n[![Crates.io](https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fworktrunk?style=for-the-badge&logo=rust)](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fworktrunk)\n[![License: MIT OR Apache-2.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT%20OR%20Apache--2.0-blue?style=for-the-badge)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![CI](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fmax-sixty\u002Fworktrunk\u002Fci.yaml?event=push&branch=main&style=for-the-badge&logo=github)](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Factions?query=branch%3Amain+workflow%3Aci)\n[![Codecov](https:\u002F\u002Fimg.shields.io\u002Fcodecov\u002Fc\u002Fgithub\u002Fmax-sixty\u002Fworktrunk?style=for-the-badge&logo=codecov)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fmax-sixty\u002Fworktrunk)\n[![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fmax-sixty\u002Fworktrunk?style=for-the-badge&logo=github)](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fstargazers)\n\n> **March 2026**: Worktrunk was [released](https:\u002F\u002Fx.com\u002Fmax_sixty\u002Fstatus\u002F2006077845391724739?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:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmax-sixty_worktrunk_readme_212b52d81eff.gif)\n\n> ### 📚 Full documentation at [worktrunk.dev](https:\u002F\u002Fworktrunk.dev) 📚\n\n\u003C!-- ⚠️ AUTO-GENERATED from docs\u002Fcontent\u002Fworktrunk.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..\u002Frepo.feat`, then `cd ..\u002Frepo.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> Start with the core commands\n\n**Core commands:**\n\n\u003Ctable class=\"cmd-compare\">\n  \u003Cthead>\n    \u003Ctr>\n      \u003Cth>Task\u003C\u002Fth>\n      \u003Cth>Worktrunk\u003C\u002Fth>\n      \u003Cth>Plain git\u003C\u002Fth>\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\n      \u003Ctd>Switch worktrees\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>wt switch feat\u003C\u002Fpre>\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>cd ..\u002Frepo.feat\u003C\u002Fpre>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>Create + start Claude\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>wt switch -c -x claude feat\u003C\u002Fpre>\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>git worktree add -b feat ..\u002Frepo.feat && \\\ncd ..\u002Frepo.feat && \\\nclaude\u003C\u002Fpre>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>Clean up\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>wt remove\u003C\u002Fpre>\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>cd ..\u002Frepo && \\\ngit worktree remove ..\u002Frepo.feat && \\\ngit branch -d feat\u003C\u002Fpre>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>List with status\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>wt list\u003C\u002Fpre>\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>git worktree list\u003C\u002Fpre> (paths only)\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n> Expand into the more advanced commands as needed\n\n**Workflow automation:**\n\n- **[Hooks](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F)** — run commands on create, pre-merge, post-merge, etc\n- **[LLM commit messages](https:\u002F\u002Fworktrunk.dev\u002Fllm-commits\u002F)** — generate commit messages from diffs\n- **[Merge workflow](https:\u002F\u002Fworktrunk.dev\u002Fmerge\u002F)** — squash, rebase, merge, clean up in one command\n- **[Interactive picker](https:\u002F\u002Fworktrunk.dev\u002Fswitch\u002F#interactive-picker)** — browse worktrees with live diff and log previews\n- **[Copy build caches](https:\u002F\u002Fworktrunk.dev\u002Fstep\u002F)** — skip cold starts by sharing `target\u002F`, `node_modules\u002F`, etc between worktrees\n- **[`wt list --full`](https:\u002F\u002Fworktrunk.dev\u002Flist\u002F#full-mode)** — [CI status](https:\u002F\u002Fworktrunk.dev\u002Flist\u002F#ci-status) and [AI-generated summaries](https:\u002F\u002Fworktrunk.dev\u002Flist\u002F#llm-summaries) per branch\n- **[PR checkout](https:\u002F\u002Fworktrunk.dev\u002Fswitch\u002F#pull-requests-and-merge-requests)** — `wt switch pr:123` to jump straight to a PR's branch\n- **[Dev server per worktree](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F#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:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmax-sixty_worktrunk_readme_ea832be4b47d.gif)\n\n\u003C!-- END AUTO-GENERATED -->\n\n\u003C!-- ⚠️ AUTO-GENERATED from docs\u002Fcontent\u002Fworktrunk.md#install..further-reading — edit source to update -->\n\n## Install\n\n**Homebrew (macOS & Linux):**\n\n```bash\n$ brew install worktrunk && wt config shell install\n```\n\nShell integration allows commands to change directories.\n\n**Cargo:**\n\n```bash\n$ cargo install worktrunk && wt config shell install\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Windows\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nOn Windows, `wt` defaults to Windows Terminal's command. Winget additionally installs Worktrunk as `git-wt` to avoid the conflict:\n\n```bash\n$ winget install max-sixty.worktrunk\n$ git-wt config shell install\n```\n\nAlternatively, disable Windows Terminal's alias (Settings → Privacy & security → For developers → App Execution Aliases → disable \"Windows Terminal\") to use `wt` directly.\n\n\u003C\u002Fdetails>\n\n**Arch Linux:**\n\n```bash\n$ sudo pacman -S worktrunk && 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:\u002F\u002Fworktrunk.dev\u002Flist\u002F):\n\n```console\n$ wt list\n  Branch        Status        HEAD±    main↕  Remote⇅  Commit    Age   Message\n@ feature-auth  +   ↑      +27   -8   ↑1               4bc72dc9  2h    Add authentication module\n^ main              ^⇡                         ⇡1      0e631add  1d    Initial commit\n\n○ Showing 2 worktrees, 1 with changes, 1 ahead, 1 column hidden\n\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\u002FGitLab, then clean up:\n\n```bash\n$ wt step commit                    # commit staged changes\n$ gh pr create                      # or glab mr create\n$ wt 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```\n\nFor parallel agents, create multiple worktrees and launch an agent in each:\n\n```bash\n$ wt switch -x claude -c feature-a -- 'Add user authentication'\n$ wt switch -x claude -c feature-b -- 'Fix the pagination bug'\n$ wt 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:\u002F\u002Fworktrunk.dev\u002Fhook\u002F) to automate setup (install deps, start dev servers).\n\n## Next steps\n\n- Learn the core commands: [`wt switch`](https:\u002F\u002Fworktrunk.dev\u002Fswitch\u002F), [`wt list`](https:\u002F\u002Fworktrunk.dev\u002Flist\u002F), [`wt merge`](https:\u002F\u002Fworktrunk.dev\u002Fmerge\u002F), [`wt remove`](https:\u002F\u002Fworktrunk.dev\u002Fremove\u002F)\n- Set up [project hooks](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F) for automated setup\n- Explore [LLM commit messages](https:\u002F\u002Fworktrunk.dev\u002Fllm-commits\u002F), [interactive\n  picker](https:\u002F\u002Fworktrunk.dev\u002Fswitch\u002F#interactive-picker), [Claude Code integration](https:\u002F\u002Fworktrunk.dev\u002Fclaude-code\u002F), [CI\n  status & PR links](https:\u002F\u002Fworktrunk.dev\u002Flist\u002F#ci-status)\n- Browse [tips & patterns](https:\u002F\u002Fworktrunk.dev\u002Ftips-patterns\u002F) for recipes: aliases, dev servers, databases, agent handoffs, and more\n- Run `wt --help` or `wt \u003Ccommand> --help` for quick CLI reference\n\n## Further reading\n\n- [Claude Code: Best practices for agentic coding](https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fclaude-code-best-practices) — Anthropic's official guide, including the worktree pattern\n- [Shipping faster with Claude Code and Git Worktrees](https:\u002F\u002Fincident.io\u002Fblog\u002Fshipping-faster-with-claude-code-and-git-worktrees) — incident.io's workflow for parallel agents\n- [Git worktree pattern discussion](https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-code\u002Fissues\u002F1052) — Community discussion in the Claude Code repo\n- [@DevOpsToolbox's video on Worktrunk](https:\u002F\u002Fyoutu.be\u002FWBQiqr6LevQ?t=345)\n- [git-worktree documentation](https:\u002F\u002Fgit-scm.com\u002Fdocs\u002Fgit-worktree) — Official git reference\n\n\u003C!-- END AUTO-GENERATED -->\n\n## Contributing\n\n- ⭐ Star the repo\n- Tell a friend about Worktrunk\n- [Open an issue](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002Fnew?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:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002Fnew?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:\u002F\u002Ftwitter.com\u002Fintent\u002Ftweet?text=Worktrunk%20%E2%80%94%20CLI%20for%20git%20worktree%20management&url=https%3A%2F%2Fworktrunk.dev) · [Reddit](https:\u002F\u002Fwww.reddit.com\u002Fsubmit?url=https%3A%2F%2Fworktrunk.dev&title=Worktrunk%20%E2%80%94%20CLI%20for%20git%20worktree%20management) · [LinkedIn](https:\u002F\u002Fwww.linkedin.com\u002Fsharing\u002Fshare-offsite\u002F?url=https%3A%2F%2Fworktrunk.dev)\n\n> ### 📚 Full documentation at [worktrunk.dev](https:\u002F\u002Fworktrunk.dev) 📚\n\n### Star history\n\n\u003Ca href=\"https:\u002F\u002Fstar-history.com\u002F#max-sixty\u002Fworktrunk&Date\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmax-sixty_worktrunk_readme_1f744c862a78.png\" width=\"500\" alt=\"Star History Chart\">\n\u003C\u002Fa>\n","\u003C!-- markdownlint-disable MD033 -->\n\n\u003Ch1>\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmax-sixty_worktrunk_readme_063ea028c266.png\" alt=\"Worktrunk logo\" width=\"50\" align=\"absmiddle\">&nbsp;&nbsp;Worktrunk\u003C\u002Fh1>\n\n[![文档](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdocs-worktrunk.dev-blue?style=for-the-badge&logo=gitbook)](https:\u002F\u002Fworktrunk.dev)\n[![Crates.io](https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fworktrunk?style=for-the-badge&logo=rust)](https:\u002F\u002Fcrates.io\u002Fcrates\u002Fworktrunk)\n[![许可证：MIT 或 Apache-2.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT%20OR%20Apache--2.0-blue?style=for-the-badge)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)\n[![CI](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fmax-sixty\u002Fworktrunk\u002Fci.yaml?event=push&branch=main&style=for-the-badge&logo=github)](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Factions?query=branch%3Amain+workflow%3Aci)\n[![Codecov](https:\u002F\u002Fimg.shields.io\u002Fcodecov\u002Fc\u002Fgithub\u002Fmax-sixty\u002Fworktrunk?style=for-the-badge&logo=codecov)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fmax-sixty\u002Fworktrunk)\n[![星标](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fmax-sixty\u002Fworktrunk?style=for-the-badge&logo=github)](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fstargazers)\n\n> **2026年3月**：Worktrunk于年初[发布](https:\u002F\u002Fx.com\u002Fmax_sixty\u002Fstatus\u002F2006077845391724739?s=20)，并迅速成为最受欢迎的 Git 工作树管理工具。它以热爱打造而成（绝不含糊！）。如果您遇到任何问题，请随时告知我；我正全力以赴让 Worktrunk 更加出色，而您反馈的问题正是对我最大的帮助。\n\nWorktrunk 是一款用于 Git 工作树管理的命令行工具，专为并行运行 AI 代理而设计。\n\nWorktrunk 的三个核心命令让工作树的操作如同分支一样简单。此外，Worktrunk 还提供了一系列提升开发体验的功能，以简化对多个并行更改的处理，包括用于自动化本地工作流的钩子。\n\n这样一来，扩展 AI 代理的数量就变得轻而易举。以下是一个快速演示：\n\n![Worktrunk 演示](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmax-sixty_worktrunk_readme_212b52d81eff.gif)\n\n> ### 📚 完整文档请访问 [worktrunk.dev](https:\u002F\u002Fworktrunk.dev) 📚\n\n\u003C!-- ⚠️ 自动生成自 docs\u002Fcontent\u002Fworktrunk.md#context-git-worktrees..worktrunk-makes-git-worktrees-as-easy-as-branches — 编辑源文件以更新 -->\n\n## 背景：Git 工作树\n\n像 Claude Code 和 Codex 这样的 AI 代理能够无需监督地处理较长的任务，因此可以同时管理 5 到 10 个甚至更多的代理。Git 原生的工作树功能为每个代理提供了独立的工作目录，从而避免了彼此之间的变更相互干扰。\n\n然而，Git 工作树的用户体验并不友好。即使只是启动一个新的工作树这样的小任务，也需要三次输入分支名称：`git worktree add -b feat ..\u002Frepo.feat`，然后 `cd ..\u002Frepo.feat`。\n\n## Worktrunk 让 Git 工作树的操作如同分支一样简单\n\n工作树通过分支名称来标识；路径则根据可配置的模板自动生成。\n\n> 从核心命令开始\n\n**核心命令：**\n\n\u003Ctable class=\"cmd-compare\">\n  \u003Cthead>\n    \u003Ctr>\n      \u003Cth>任务 \u003C\u002Fth>\n      \u003Cth> Worktrunk \u003C\u002Fth>\n      \u003Cth> 原生 Git \u003C\u002Fth>\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\n      \u003Ctd>切换工作树\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>wt switch feat\u003C\u002Fpre>\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>cd ..\u002Frepo.feat\u003C\u002Fpre>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>创建并启动 Claude\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>wt switch -c -x claude feat\u003C\u002Fpre>\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>git worktree add -b feat ..\u002Frepo.feat && \\\ncd ..\u002Frepo.feat && \\\nclaude\u003C\u002Fpre>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>清理\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>wt remove\u003C\u002Fpre>\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>cd ..\u002Frepo && \\\ngit worktree remove ..\u002Frepo.feat && \\\ngit branch -d feat\u003C\u002Fpre>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd>列出并显示状态\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>wt list\u003C\u002Fpre>\u003C\u002Ftd>\n      \u003Ctd>\u003Cpre>git worktree list\u003C\u002Fpre>（仅显示路径）\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n> 根据需要扩展到更高级的命令\n\n**工作流自动化：**\n\n- **[钩子](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F)** — 在创建、合并前、合并后等阶段运行命令\n- **[LLM 提交信息](https:\u002F\u002Fworktrunk.dev\u002Fllm-commits\u002F)** — 根据差异生成提交信息\n- **[合并工作流](https:\u002F\u002Fworktrunk.dev\u002Fmerge\u002F)** — 可以在一条命令中完成压缩、变基、合并和清理\n- **[交互式选择器](https:\u002F\u002Fworktrunk.dev\u002Fswitch\u002F#interactive-picker)** — 通过实时差异和日志预览浏览工作树\n- **[复制构建缓存](https:\u002F\u002Fworktrunk.dev\u002Fstep\u002F)** — 通过在工作树之间共享 `target\u002F`、`node_modules\u002F` 等内容，避免冷启动\n- **[`wt list --full`](https:\u002F\u002Fworktrunk.dev\u002Flist\u002F#full-mode)** — 按分支显示 [CI 状态](https:\u002F\u002Fworktrunk.dev\u002Flist\u002F#ci-status) 和 [AI 生成的摘要](https:\u002F\u002Fworktrunk.dev\u002Flist\u002F#llm-summaries)\n- **[PR 检出](https:\u002F\u002Fworktrunk.dev\u002Fswitch\u002F#pull-requests-and-merge-requests)** — 使用 `wt switch pr:123` 直接跳转到 PR 的分支\n- **[每个工作树的开发服务器](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F#dev-servers)** — 通过 `hash_port` 模板过滤器为每个工作树分配唯一的端口\n- …以及 **[更多功能](#next-steps)**\n\n下面是一个包含一些高级功能的演示：\n\n![Worktrunk 综合演示：在 Zellij 标签页中运行多个 Claude 代理，使用钩子、LLM 提交信息和合并工作流](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmax-sixty_worktrunk_readme_ea832be4b47d.gif)\n\n\u003C!-- 自动生成结束 -->\n\n\u003C!-- ⚠️ 自动生成自 docs\u002Fcontent\u002Fworktrunk.md#install..further-reading — 编辑源文件以更新 -->\n\n## 安装\n\n**Homebrew（macOS 和 Linux）：**\n\n```bash\n$ brew install worktrunk && wt config shell install\n```\n\n启用 Shell 集成后，命令可以直接切换目录。\n\n**Cargo：**\n\n```bash\n$ cargo install worktrunk && wt config shell install\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Windows\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n在 Windows 上，`wt` 默认指向 Windows Terminal 的命令。Winget 还会额外安装 Worktrunk 为 `git-wt`，以避免冲突：\n\n```bash\n$ winget install max-sixty.worktrunk\n$ git-wt config shell install\n```\n\n或者，您也可以禁用 Windows Terminal 的别名（设置 → 隐私与安全 → 开发人员选项 → 应用执行别名 → 关闭“Windows Terminal”），以便直接使用 `wt`。\n\n\u003C\u002Fdetails>\n\n**Arch Linux：**\n\n```bash\n$ sudo pacman -S worktrunk && wt config shell install\n```\n\n## 快速入门\n\n为新功能创建一个工作树：\n\n```console\n$ wt switch --create feature-auth\n✓ 从 main 分支创建了 feature-auth 分支，并在 repo.feature-auth 上设置了工作树\n\n```\n\n这会创建一个新的分支和工作树，然后切换到该分支。完成工作后，使用 [`wt list`](https:\u002F\u002Fworktrunk.dev\u002Flist\u002F) 查看所有工作树：\n\n```console\n$ wt list\n  分支        状态        HEAD±    main↕  远程⇅  提交    年龄   信息\n@ feature-auth  +   ↑      +27   -8   ↑1               4bc72dc9  2h    添加认证模块\n^ main              ^⇡                         ⇡1      0e631add  1d    初始提交\n\n○ 显示 2 个工作树，其中 1 个有更改，1 个领先，1 列已隐藏\n\n```\n\n`@` 标记当前的工作树。`+` 表示暂存的更改，`↑1` 表示比 main 分支领先 1 次提交，`⇡` 表示未推送的提交。\n\n完成后，可以选择以下两种方式之一：\n\n**PR 工作流** — 提交、推送、打开 PR、通过 GitHub\u002FGitLab 合并，然后清理：\n\n```bash\n$ wt step commit                    # 提交暂存的更改\n$ gh pr create                      # 或 glab mr create\n$ wt remove                         # 在 PR 合并后\n```\n\n**本地合并** — 压缩提交、变基到 main 分支、快进合并、清理：\n\n```console\n$ wt merge main\n◎ 生成提交信息并提交更改... (2 个文件，+53，无需压缩)\n  添加认证模块\n✓ 已提交更改 @ a1b2c3d\n◎ 将 1 次提交合并到 main 分支 @ a1b2c3d（无需变基）\n  * a1b2c3d 添加认证模块\n   auth.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++\n   lib.rs  |  2 ++\n   2 个文件改变了，新增 53 行\n✓ 已合并到 main 分支（1 次提交，2 个文件，+53）\n◎ 在后台移除 feature-auth 工作树和分支（与 main 分支相同提交，_）\n○ 已切换到 main 分支的工作树 @ repo\n\n```\n\n对于并行代理，可以创建多个工作树，并在每个工作树中启动一个代理：\n\n```bash\n$ wt switch -x claude -c feature-a -- '添加用户认证'\n$ wt switch -x claude -c feature-b -- '修复分页 bug'\n$ wt switch -x claude -c feature-c -- '为 API 编写测试'\n```\n\n`-x` 标志会在切换后运行命令；`--` 之后的参数会传递给该命令。配置 [启动后钩子](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F) 来自动化设置（安装依赖、启动开发服务器）。\n\n## 下一步\n\n- 学习核心命令：[`wt switch`](https:\u002F\u002Fworktrunk.dev\u002Fswitch\u002F)、[`wt list`](https:\u002F\u002Fworktrunk.dev\u002Flist\u002F)、[`wt merge`](https:\u002F\u002Fworktrunk.dev\u002Fmerge\u002F)、[`wt remove`](https:\u002F\u002Fworktrunk.dev\u002Fremove\u002F)\n- 设置 [项目钩子](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F) 以实现自动化设置\n- 探索 [LLM 提交信息](https:\u002F\u002Fworktrunk.dev\u002Fllm-commits\u002F)、[交互式选择器](https:\u002F\u002Fworktrunk.dev\u002Fswitch\u002F#interactive-picker)、[Claude Code 集成](https:\u002F\u002Fworktrunk.dev\u002Fclaude-code\u002F)、[CI 状态和 PR 链接](https:\u002F\u002Fworktrunk.dev\u002Flist\u002F#ci-status)\n- 浏览 [技巧与模式](https:\u002F\u002Fworktrunk.dev\u002Ftips-patterns\u002F) 获取配方：别名、开发服务器、数据库、代理交接等\n- 运行 `wt --help` 或 `wt \u003C命令> --help` 以获取快速 CLI 参考\n\n## 更多阅读\n\n- [Claude Code：代理式编码的最佳实践](https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fclaude-code-best-practices) — Anthropic 的官方指南，包括工作树模式\n- [使用 Claude Code 和 Git 工作树更快地交付](https:\u002F\u002Fincident.io\u002Fblog\u002Fshipping-faster-with-claude-code-and-git-worktrees) — incident.io 的并行代理工作流程\n- [Git 工作树模式讨论](https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-code\u002Fissues\u002F1052) — Claude Code 仓库中的社区讨论\n- [@DevOpsToolbox 关于 Worktrunk 的视频](https:\u002F\u002Fyoutu.be\u002FWBQiqr6LevQ?t=345)\n- [git-worktree 文档](https:\u002F\u002Fgit-scm.com\u002Fdocs\u002Fgit-worktree) — 官方 git 参考\n\n\u003C!-- END AUTO-GENERATED -->\n\n## 贡献\n\n- ⭐ 给这个仓库加星\n- 告诉朋友关于 Worktrunk 的事情\n- [提交一个问题](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002Fnew?title=&body=%23%23%20Description%0A%0A%3C!--%20描述错误或功能请求 --%3E%0A%0A%23%23%20Context%0A%0A%3C!--%20任何相关背景：你的工作流程、你试图做的事情等 --%3E) — 反馈、功能请求，甚至一个小摩擦或不完美的用户提示，或者 [尚未解决的工作树痛点](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002Fnew?title=Worktree%20friction%3A%20&body=%23%23%20The%20friction%0A%0A%3C!--%20什么与工作树相关的任务仍然让人感到痛苦？ --%3E%0A%0A%23%23%20Current%20workaround%0A%0A%3C!--%20你今天是如何处理这个问题的？ --%3E%0A%0A%23%23%20Ideal%20solution%0A%0A%3C!--%20什么会让这件事更容易呢？ --%3E)\n- 分享：[X](https:\u002F\u002Ftwitter.com\u002Fintent\u002Ftweet?text=Worktrunk%20%E2%80%94%20CLI%20for%20git%20worktree%20management&url=https%3A%2F%2Fworktrunk.dev) · [Reddit](https:\u002F\u002Fwww.reddit.com\u002Fsubmit?url=https%3A%2F%2Fworktrunk.dev&title=Worktrunk%20%E2%80%94%20CLI%20for%20git%20worktree%20management) · [LinkedIn](https:\u002F\u002Fwww.linkedin.com\u002Fsharing\u002Fshare-offsite\u002F?url=https%3A%2F%2Fworktrunk.dev)\n\n> ### 📚 完整文档请访问 [worktrunk.dev](https:\u002F\u002Fworktrunk.dev) 📚\n\n### 星标历史\n\n\u003Ca href=\"https:\u002F\u002Fstar-history.com\u002F#max-sixty\u002Fworktrunk&Date\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmax-sixty_worktrunk_readme_1f744c862a78.png\" width=\"500\" alt=\"星标历史图表\">\n\u003C\u002Fa>","# Worktrunk 快速上手指南\n\nWorktrunk 是一个专为并行运行 AI 智能体（如 Claude Code、Codex）设计的 Git Worktree 管理 CLI 工具。它将复杂的 Git Worktree 操作简化为类似分支管理的简单命令，极大提升了多任务并行开发的效率。\n\n## 环境准备\n\n- **操作系统**：macOS、Linux 或 Windows\n- **前置依赖**：\n  - 已安装 `git` (建议版本 2.5+)\n  - 已安装 `curl` 或 `wget` (用于部分安装方式)\n  - (可选) AI 编码助手，如 `claude` (Claude Code) 或其他 LLM CLI 工具\n- **网络要求**：需能访问 GitHub 及对应包管理器源。国内用户若遇到连接问题，建议配置相应的网络代理或使用镜像源。\n\n## 安装步骤\n\n根据你的系统选择以下一种安装方式。**安装后务必执行 shell 集成命令**，以支持自动切换目录功能。\n\n### macOS & Linux (推荐 Homebrew)\n\n```bash\nbrew install worktrunk && wt config shell install\n```\n\n### Rust 用户 (Cargo)\n\n```bash\ncargo install worktrunk && wt config shell install\n```\n\n### Arch Linux\n\n```bash\nsudo pacman -S worktrunk && wt config shell install\n```\n\n### Windows\n\nWindows Terminal 默认占用 `wt` 命令，推荐使用 `winget` 安装（命令别名为 `git-wt`），或手动关闭 Windows Terminal 的别名设置。\n\n**方式一：使用 Winget (保留 git-wt 命令)**\n```bash\nwinget install max-sixty.worktrunk\ngit-wt config shell install\n```\n\n**方式二：直接使用 wt 命令**\n需在 Windows 设置中禁用 \"Windows Terminal\" 的应用执行别名 (设置 → 隐私和安全 → 对于开发人员 → 应用执行别名)，然后运行：\n```bash\nwinget install max-sixty.worktrunk\nwt config shell install\n```\n\n## 基本使用\n\n### 1. 创建并切换到新工作区\n\n创建一个名为 `feature-auth` 的新分支和工作区，并自动切换进去：\n\n```console\n$ wt switch --create feature-auth\n✓ Created branch feature-auth from main and worktree @ repo.feature-auth\n```\n\n### 2. 查看工作状态\n\n列出所有工作区及其状态（当前所在标记为 `@`，包含未提交变更标记为 `+`）：\n\n```console\n$ wt list\n  Branch        Status        HEAD±    main↕  Remote⇅  Commit    Age   Message\n@ feature-auth  +   ↑      +27   -8   ↑1               4bc72dc9  2h    Add authentication module\n^ main              ^⇡                         ⇡1      0e631add  1d    Initial commit\n\n○ Showing 2 worktrees, 1 with changes, 1 ahead, 1 column hidden\n```\n\n### 3. 并行启动 AI 智能体\n\n这是 Worktrunk 的核心场景。你可以一键创建多个工作区并分别启动 AI 智能体进行并行开发：\n\n```bash\n# 创建工作区 A 并启动 Claude 处理认证功能\n$ wt switch -x claude -c feature-a -- 'Add user authentication'\n\n# 创建工作区 B 并启动 Claude 修复分页 Bug\n$ wt switch -x claude -c feature-b -- 'Fix the pagination bug'\n\n# 创建工作区 C 并启动 Claude 编写测试\n$ wt switch -x claude -c feature-c -- 'Write tests for the API'\n```\n*注：`-x` 表示切换后执行命令，`-c` 表示创建新分支，`--` 后的内容传递给 AI 工具。*\n\n### 4. 合并与清理\n\n完成开发后，可以使用简化的命令合并代码并清理工作区。\n\n**本地合并模式（变基 + 快进合并 + 清理）：**\n```console\n$ wt merge main\n◎ Generating commit message and committing changes...\n✓ Committed changes @ a1b2c3d\n◎ Merging 1 commit to main @ a1b2c3d\n✓ Merged to main (1 commit, 2 files, +53)\n◎ Removing feature-auth worktree & branch in background\n○ Switched to worktree for main @ repo\n```\n\n**PR 流程模式：**\n```bash\n$ wt step commit       # 提交暂存更改\n$ gh pr create         # 创建 Pull Request (需安装 gh)\n$ wt remove            # PR 合并后清理当前工作区\n```","某全栈开发团队正在利用多个 AI 代理（如 Claude Code）并行重构一个大型微服务架构，需要同时处理数据库迁移、API 网关升级和前端组件优化。\n\n### 没有 worktrunk 时\n- **命令繁琐易错**：每次为新的 AI 任务创建隔离环境，都需要手动输入冗长的 `git worktree add` 命令并重复三次分支名，极易拼写错误。\n- **上下文切换混乱**：开发者需要在不同物理路径的文件夹间频繁 `cd` 跳转，难以直观判断当前处于哪个任务的上下文中。\n- **清理工作耗时**：任务完成后，必须手动返回主目录、删除工作树文件夹再删除分支，三步操作缺一不可，稍有不慎就会残留垃圾文件。\n- **状态感知缺失**：原生命令仅列出路径，无法一眼看出哪些工作树正在运行、哪些已完成合并，协作效率低下。\n- **自动化断层**：无法在创建环境时自动触发初始化脚本或让 AI 代理直接介入，每次都要人工干预启动流程。\n\n### 使用 worktrunk 后\n- **指令极简高效**：仅需 `wt switch -c -x claude feat-db` 一行命令，即可自动创建分支、生成工作树并直接启动 AI 代理开始工作。\n- **基于分支的导航**：直接使用 `wt switch feat-api` 即可通过分支名瞬间切换上下文，无需记忆复杂的文件系统路径。\n- **一键无损清理**：执行 `wt remove` 自动安全地移除当前工作树及其关联分支，彻底杜绝残留文件风险。\n- **全景状态可视**：通过 `wt list` 清晰展示所有并行任务的状态、分支名及路径，团队对进度一目了然。\n- **流程自动闭环**：利用 Hooks 功能，在创建工作树时自动安装依赖，或在合并前自动运行 LLM 生成规范的 Commit 信息。\n\nworktrunk 将原本割裂且繁琐的 Git 多线操作转化为流畅的并行开发流，让管理 10+ 个并发 AI 代理变得像切换普通分支一样简单自然。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fmax-sixty_worktrunk_0bb2b99c.png","max-sixty","Maximilian Roos","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fmax-sixty_9abf4863.jpg","Developer of worktrunk, prql, xarray & insta.\r\n\r\nAlso pytest-accept and numbagg.\r\n\r\n\r\nYou can give me feedback at feedback.maxroos.com",null,"Los Angeles","max_sixty","https:\u002F\u002Fgithub.com\u002Fmax-sixty",[82,86,90,93,97,100],{"name":83,"color":84,"percentage":85},"Rust","#dea584",99.4,{"name":87,"color":88,"percentage":89},"Shell","#89e051",0.2,{"name":91,"color":92,"percentage":89},"Nix","#7e7eff",{"name":94,"color":95,"percentage":96},"Nushell","#4E9906",0.1,{"name":98,"color":99,"percentage":96},"PowerShell","#012456",{"name":101,"color":102,"percentage":103},"TypeScript","#3178c6",0,4209,137,"2026-04-06T13:43:08","NOASSERTION","Linux, macOS, Windows","未说明",{"notes":111,"python":109,"dependencies":112},"该工具是一个基于 Rust 开发的命令行界面 (CLI)，用于管理 Git worktree，旨在并行运行 AI 代理。它不是 AI 模型本身，因此没有特定的 GPU、显存或 Python 版本要求。主要依赖是系统已安装 Git。在 macOS\u002FLinux 上可通过 Homebrew 或 Cargo 安装，在 Windows 上可通过 Winget 安装（默认命令为 git-wt 以避免冲突）。建议配置 Shell 集成以支持目录自动切换功能。",[113,114],"Rust (通过 Cargo 安装)","Git",[13],[117,118,119,120,121,122],"agents","claude-code","codex","developer-tools","git","worktrees","2026-03-27T02:49:30.150509","2026-04-07T02:34:37.209736",[126,131,136,141,146,150],{"id":127,"question_zh":128,"answer_zh":129,"source_url":130},20782,"如何在切换工作树时同步删除已移除的 gitignore 文件（而不仅仅是复制新增文件）？","默认的 `copy-ignored` 或 `cp -r` 方法仅执行追加操作，不会删除目标工作树中源工作树已不存在的文件。如果需要同步删除操作，有以下两种解决方案：\n1. 在钩子中使用 `rsync --delete` 代替 `cp`。例如在配置文件中添加：\n   [pre-switch]\n   copy-config = \"rsync -a --delete {{ base_worktree_path }}\u002F.claude\u002F {{ worktree_path }}\u002F.claude\u002F 2>\u002Fdev\u002Fnull || true\"\n   注意：`--delete` 标志会删除目标中存在但源中不存在的文件，且目录路径后必须加斜杠。\n2. 使用符号链接（Symlink）指向共享位置，这样所有工作树都指向同一份文件，无需同步。","https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1617",{"id":132,"question_zh":133,"answer_zh":134,"source_url":135},20783,"工作树钩子（Hooks）的执行顺序和命名规则是什么？post-create 和 post-start 有什么区别？","项目已对钩子进行了合理化重构（参考 #1679）：\n1. 原有的 `post-create` 已重命名为 `pre-start`，解决了之前“创建后阻塞”的逻辑矛盾。\n2. 现在的命名遵循对称网格规则：`pre-` 前缀表示阻塞式执行（blocking），`post-` 前缀表示后台执行（background），适用于所有生命周期事件（start, switch, commit, merge, remove）。\n3. 旧名称 `post-create` 已进入弃用周期，建议迁移到新名称。","https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1571",{"id":137,"question_zh":138,"answer_zh":139,"source_url":140},20784,"为什么在大型仓库中 `wt switch` 或 `wt remove` 的标签补全功能无法使用或非常缓慢？","这是因为默认的标签补全包含了所有远程分支（remote branches）。在拥有数千个远程分支的大型仓库中，这会导致 shell 提示是否显示所有可能性，从而使得补全功能不可用。\n预期行为是标签补全应默认仅包含“工作树 + 本地分支”，这与交互式选择器的默认行为一致。如果遇到此问题，通常是因为配置未限制补全范围，需等待官方修复或通过配置排除远程分支。","https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1415",{"id":142,"question_zh":143,"answer_zh":144,"source_url":145},20785,"在 Windows PowerShell 中安装 Shell 集成后，为什么切换工作树时仍然提示“无法更改目录”或集成未激活？","如果 `git-wt config shell install` 显示已配置但切换时仍报错，可能是由于包装函数（wrapper function）未正确设置环境变量或解析二进制文件。请尝试以下诊断步骤：\n1. 检查包装函数是否设置了正确的环境变量：\n   (Get-Command git-wt -CommandType Function).ScriptBlock | Select-String WORKTRUNK\n2. 检查包装函数解析到的二进制文件路径：\n   Get-Command git-wt -CommandType Application | Select-Object Source\n3. 执行切换命令后检查指令文件变量：\n   git-wt switch \u003Cbranch-name>\n   echo $env:WORKTRUNK_DIRECTIVE_FILE\n此外，确保没有多个版本的 git-wt 冲突，且配置文件路径正确。","https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F885",{"id":147,"question_zh":148,"answer_zh":149,"source_url":135},20786,"我想在每次切换回工作树时自动重启开发服务器或 Claude 进程，应该使用哪个钩子？","这取决于你的具体需求，但通常不建议将长期运行的进程（如开发服务器）紧密耦合到 `switch` 事件中，因为频繁切换会导致进程反复启停，影响效率。\n1. 如果确实需要在每次切换时重启：可以使用 `post-switch` 钩子，但需注意这可能会减慢切换速度。\n2. 更推荐的方案是使用守护进程（daemon process）来保持服务运行，或者仅在 `pre-start`（原 post-create，仅运行一次）中初始化依赖。\n3. 对于依赖安装：应在阻塞式的 `pre-start` 钩子中先安装依赖，然后再启动非阻塞的服务，以确保环境就绪。",{"id":151,"question_zh":152,"answer_zh":153,"source_url":130},20787,"Worktrunk 是否支持在切换工作树时自动清理或删除文件？","Worktrunk 对自动删除文件持非常谨慎的态度，默认的 `copy-ignored` 等功能 purely additive（纯追加），绝不会删除目标工作树中的任何文件，即使源工作树中该文件已被删除。\n如果业务逻辑强依赖删除同步，官方建议用户先编写自定义钩子（custom hooks）来实现（如使用 `rsync --delete`）。只有当某种自定义钩子模式被证明广泛有用且安全后，团队才会考虑将其作为内置功能添加。",[155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250],{"id":156,"version":157,"summary_zh":158,"released_at":159},126743,"v0.34.1","## 发行说明\n\n### 改进\n\n- **`step prune` 性能优化**：集成检查现在并行运行，大幅缩短了分支数量较多的仓库的 `prune` 时间（从 3 分钟以上缩短至几秒钟，适用于 100 多个分支）。修复 [#1888](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1888)。([#1890](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1890)，感谢 @ortonomy 的报告）\n\n### 修复\n\n- **复制操作期间 CPU 饱和问题**：恢复了在 v0.34.0 中被意外移除的专用 4 线程复制池，从而避免了在 `step copy-ignored` 等大量复制操作中出现约 1000% 的 CPU 使用率。([#1905](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1905))\n\n- **后台流水线模板变量问题**：当执行 `wt switch --create` 同时触发切换后钩子和启动后钩子时，流水线步骤会被错误地合并到同一个后台进程中，导致 `{{ hook_type }}` 展开为错误的值。现在每个钩子类型会独立启动自己的流水线。([#1904](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1904))\n\n### 内部\n\n- 提取了共享的 `classify_unknown_key` 函数，以去重配置警告逻辑。([#1902](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1902))\n\n## 安装 worktrunk 0.34.1\n\n### 通过 Shell 脚本安装预编译二进制文件\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.34.1\u002Fworktrunk-installer.sh | sh && wt config shell install\n```\n\n### 通过 PowerShell 脚本安装预编译二进制文件\n\n```powershell\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.34.1\u002Fworktrunk-installer.ps1 | iex\"; git-wt config shell install\n```\n\n### 通过 Homebrew 安装预编译二进制文件\n\n```sh\nbrew install worktrunk && wt config shell install\n```\n\n## 下载 worktrunk 0.34.1\n\n| 文件 | 平台 | 校验和 |\n|--------|----------|----------|\n| [worktrunk-aarch64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.34.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [校验和](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.34.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.34.1\u002Fworktrunk-x86_64-apple-darwin.tar.xz) | Intel macOS | [校验和](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.34.1\u002Fworktrunk-x86_64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.34.1\u002Fworktrunk-x86_64-pc-windows-msvc.zip) | x64 Windows | [校验和](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.34.1\u002Fworktrunk-x86_64-pc-windows-msvc.zip.sha256) |\n| [worktrunk-aarch64-unknown-linux-musl.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.34.1\u002Fworktrunk-aarch64-unknown-linux-musl.tar.xz) | ARM64 MUSL Linux | [校验和](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.34.1\u002Fworktrunk-aarch64-unknown-linux-musl.tar.xz.sha25","2026-04-04T05:11:19",{"id":161,"version":162,"summary_zh":163,"released_at":164},126744,"v0.34.0","## 发行说明\n\n### 改进\n\n- **按分支的自定义变量**：新增 `wt config state vars set\u002Fget\u002Flist\u002Fclear` 命令，可为每个分支存储自定义键值对，在钩子模板和 `wt step eval` 中可通过 `{{ vars.key }}` 访问。这些变量会持久化到 Git 配置中，并显示在 `wt list --format=json` 中。（[#1006](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1006)）\n\n- **流水线中的惰性模板展开**：流水线步骤现在会在执行时而非构建时展开 `{{ vars.* }}`，因此步骤 N 设置的变量可以在步骤 N+1 中使用。（[#1840](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1840)）\n\n- **`wt config plugins claude` 命令**：新增 `install`、`uninstall` 和 `install-statusline` 子命令，用于管理 Claude Code 集成。`install` 通过 Claude 市场注册 worktrunk 插件，`install-statusline` 配置 Claude Code 状态栏，而 `wt config show` 会建议使用这些命令，而非直接提供原始 CLI 指令。（[#1830](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1830)，[#1834](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1834)）\n\n- **`[forge]` 配置节**：新增明确的 `[forge]` 节，包含 `platform` 和 `hostname` 字段，用于 SSH 主机别名和非标准远程仓库。`ci.platform` 已弃用，并支持自动迁移。（[#1826](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1826)）\n\n- **使用 `url.insteadOf` 进行 Forge 平台检测**：Forge 平台检测现在会回退到实际 URL（经过 git `url.insteadOf` 重写之后），从而修复了 CI 状态、PR\u002FMR 检测以及推送远程等功能，适用于使用 SSH 别名或企业镜像的用户。（[#1771](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1771)，感谢 @amodelaweb；感谢 @roytouw 报告 [#1790](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1790)）\n\n- **`wt step commit` 的 `--branch` 标志**：可在不切换分支的情况下提交到指定分支——这在自动化和脚本中非常有用。（[#1750](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1750)）\n\n- **分支未找到提示中的上次拉取时间**：当 `wt switch` 找不到某个分支时，提示信息现在会显示远程仓库上次拉取的时间（例如“上次拉取于 3 小时前”），以帮助识别过时的本地引用。（[#1877](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1877)）\n\n- **配置字段重命名**：将 `merge.no-ff` 重命名为 `merge.ff`，将 `switch.no-cd` 重命名为 `switch.cd`，采用肯定式命名方式。旧名称仍可继续使用，但会发出弃用警告，并通过 `wt config update` 自动迁移。（[#1856](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1856)，[#1860](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1860)）\n\n- **模板块的语法高亮**：文档站点现在会以语法高亮的方式渲染 `{{ }}` 模板表达式。（[#1792](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1792)）\n\n- **CLI 不可用时隐藏 Claude Code 部分**：如果找不到 `claude` CLI，`wt config show` 将不再显示 Claude Code 集成部分。（[#1827](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1827)）\n\n### 修复\n\n- **","2026-04-03T14:27:38",{"id":166,"version":167,"summary_zh":168,"released_at":169},126745,"v0.33.0","## 发行说明\n\n### 改进\n\n- **钩子执行管道**：`post-*` 钩子支持 TOML 数组语法来定义串行依赖关系——步骤按顺序执行，而步骤内的映射则并行运行。例如：`post-start = [{ install = \"npm install\" }, { build = \"npm run build\", lint = \"npm run lint\" }]` 会先执行 `install`，然后再并行执行 `build` 和 `lint`。[文档](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F) ([#1713](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1713))\n\n- **忽略文件的复制排除模式**：`wt step copy-ignored` 现在默认会跳过内置的 VCS 元数据和工具状态目录（`.bzr\u002F`、`.conductor\u002F`、`.entire\u002F`、`.hg\u002F`、`.jj\u002F`、`.pi\u002F`、`.pijul\u002F`、`.sl\u002F`、`.svn\u002F`、`.worktrees\u002F`）。此外，还可以通过用户或项目配置中的 `[step.copy-ignored] exclude = [...]` 来自定义额外的排除规则。([#1667](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1667)，感谢 @shunkakinoki 提出的 [#1653](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1653))\n\n- **并行化忽略文件复制**：`wt step copy-ignored` 的目录遍历现在使用一个专门的 4 线程池并行执行，从而在多核系统上提升性能。([#1721](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1721))\n\n- **别名追加语义**：别名现在在所有配置层中都采用追加语义，与钩子合并行为保持一致。在用户配置中，当与全局别名发生冲突时，项目别名会追加到全局别名之后（全局优先）。跨配置时，项目配置中的别名也会与用户别名同时运行（用户优先，随后是经批准的项目别名）——此前用户版本会静默覆盖项目版本。([#1724](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1724)、[#1727](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1727))\n\n- **代理技能发现**：网站现在提供 `.well-known\u002Fagent-skills\u002F` 路径，供基于 Web 的 AI 代理进行技能发现。([#1751](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1751))\n\n### 修复\n\n- **选择器中 Alt+R 跳过移除钩子**：在选择器中通过 `Alt+R` 删除工作树时，会绕过预移除和后移除钩子。现在，预移除钩子会同步执行（非零退出码将中止删除操作），而后移除钩子则会在后台异步启动。([#1710](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1710))\n\n- **Shell 集成警告误报**：`wt config show` 曾报告“在 … 中找到 wt，但未检测为集成”，针对那些本身就是集成的 Nushell 和 Fish 包装脚本文件。修复了 [#1735](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1735)。([#1736](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1736)，感谢 @saschabratton)\n\n- **裸仓库配置路径被忽略**：`wt hook approvals add` 等配置命令无法在裸仓库中找到 `.config\u002Fwt.toml` 文件，因为它们是相对于当前工作树而非主工作树来查找路径的。修复了 [#1744](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1744)。([#1745](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1745)，感谢 @jrdncstr)\n\n### 文档\n\n- 清理了 `wt step` 子命令的帮助文本——移除了冗余的开头语句。([#1737](https","2026-03-26T19:46:17",{"id":171,"version":172,"summary_zh":173,"released_at":174},126746,"v0.32.0","## 发行说明\n\n### 改进\n\n- **钩子逻辑优化**：每个生命周期事件现在都有一对对称的 `pre-`（阻塞）和 `post-`（后台）钩子。为此进行了一次重命名：`post-create` → `pre-start`，以反映它作为阻塞依赖步骤，会在 `post-start` 之前执行。新增了一个 `post-commit` 钩子，在提交（包括合并时的压缩提交）完成后在后台触发。`post-merge` 现在改为后台执行，与其他所有 `post-*` 钩子保持一致。使用 `post-create` 的配置在任何 `wt` 命令中都会收到弃用警告；运行 `wt config update` 可自动完成重命名。旧名称在弃用期内仍可继续使用。[文档](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F) ([#1679](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1679)，关闭了 [#1670](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1670)，感谢 @ortonomy 报告了 [#1571](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1571))\n\n- **分离工作树支持**：现在可以通过 `wt remove \u002Fpath\u002Fto\u002Fworktree` 删除分离 HEAD 的工作树，并通过 `wt switch \u002Fpath\u002Fto\u002Fworktree` 切换到该工作树。交互式选择器在这两种操作中也支持处理分离的工作树。([#1665](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1665)，[#1680](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1680)，感谢 @mjakl 报告了 [#1661](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1661))\n\n- **选择器中就地移除工作树**：在 `wt switch` 选择器中按下 `alt-r` 键，即可在不退出选择器的情况下移除选中的工作树。目前该功能尚未显示在选择器图例和帮助文本中，等待解决光标重置问题（[#1695](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1695)）。([#1677](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1677)，[#1696](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1696))\n\n- **`wt list` 中更智能的列隐藏**：当摘要需要更多空间时，低优先级的列（消息、时间、提交）现在会根据优先级距离逐步隐藏。这一改进扩展了 v0.31.0 中已有的无数据时列隐藏功能。([#1678](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1678))\n\n### 修复\n\n- **裸仓库项目配置被忽略**：当从裸仓库根目录运行命令时，放置在裸仓库主工作树中的 `.config\u002Fwt.toml` 文件无法被找到。现在会回退到从主工作树加载配置，而位于裸仓库根目录本身的意外配置将被跳过。修复了 [#1691](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1691)。([#1692](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1692)，[#1697](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1697)，感谢 @seakayone)\n\n- **`pre-start` 钩子失败未导致中断**：`pre-start` 是唯一一个在失败时仅发出警告而不中断执行的 `pre-*` 钩子。现在所有 `pre-*` 钩子都统一采用 FailFast 模式。（破坏性变更：此前仅发出警告的 `pre-start` 钩子失败现在会导致操作中断。）([#1708](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1708))\n\n- **切换分离工作树时出现误报的不匹配警告**：切换 t","2026-03-25T17:07:06",{"id":176,"version":177,"summary_zh":178,"released_at":179},126747,"v0.31.0","## 发行说明\n\n### 改进\n\n- **钩子模板变量整合**：裸变量（`branch`、`worktree_path`、`commit`）现在一致指向活动工作树——即 `switch`\u002F`create` 的目标，以及 `merge`\u002F`remove` 的源。新增的定向变量（`{{ base }}`、`{{ base_worktree_path }}`、`{{ target_worktree_path }}`、`{{ cwd }}`）使钩子能够显式访问双工作树操作的两侧。 （破坏性变更：对于现有工作树的预切换阶段和合并后阶段，`{{ worktree_path }}` 已更改；如需保留原有行为，请使用 `{{ cwd }}` 或 `{{ base_worktree_path }}`。）[文档](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F) ([#1655](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1655)、[#1660](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1660)、[#1663](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1663))\n\n- **裸仓库的工作树路径提示**：当裸仓库位于 `.git` 或 `.bare` 等隐藏路径时，`wt switch` 现在会检测到工作树可能会被赋予不友好的名称（例如 `project\u002F.git.feature`），并提供配置 `worktree-path` 覆盖的选项。非交互式环境中则会显示需要手动添加的配置项。([#1656](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1656)，感谢 @seakayone 报告 [#1279](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1279))\n\n- **步骤别名的 Shell 补全**：在输入 `wt step \u003CTAB>` 时，Tab 补全现在会同时显示已配置的别名和内置步骤命令，并附带 `--dry-run`、`--yes` 和 `--var` 标志。([#1641](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1641))\n\n- **`wt list` 从冗余列中回收空间**：当“路径”列不包含有用信息（所有工作树路径均可根据分支名称预测）时，其占用的空间将被重新分配给“摘要”和“消息”列。([#1634](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1634))\n\n- **别名干运行的语法高亮**：`wt step \u003C别名> --dry-run` 现在采用与钩子干运行输出一致的 Bash 语法高亮。([#1635](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1635))\n\n### 修复\n\n- **`wt list` 因 fsmonitor 守护进程而卡住**：在启用原生 fsmonitor 的 macOS 上，`wt list` 可能在“(加载中...)”阶段卡住，原因是 `git fsmonitor--daemon start` 继承了管道文件描述符并无限期地保持打开状态。([#1648](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1648))\n\n- **移除后钩子在错误目录下执行**：移除后钩子原本会在用户的当前工作目录（可能正是即将被移除的工作树）下执行，而非主工作树。([#1645](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1645))\n\n- **选择器对不可用数据显示加载指示符**：交互式选择器曾对永远不会出现的字段显示 `⋯`（加载中），现改为显示 `·`（不可用）。([#1651](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1651))\n\n- **`wt hook --dry-run` 缺少定向变量**：针对切换、创建和移除钩子的干运行以及 `--show --expanded` 输出中，缺少 `base`、`target` 和 `target_worktree_path` 变量。([#1669](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpu","2026-03-23T04:12:16",{"id":181,"version":182,"summary_zh":183,"released_at":184},126748,"v0.30.1","## 发行说明\n\n### 修复\n\n- **终端宽度较窄时的布局**：当终端宽度小于80列时，`wt switch` 选择器现在使用垂直（向下）布局，并且“分支”列会缩小而不是被隐藏——分支名称始终可见。([#1564](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1564), [#1626](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1626)，感谢 @armstrjare 报告了 [#1563](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1563))\n\n- **Bash 的 Tab 补全显示所有分支**：执行 `wt switch feat\u003CTAB>` 时，原本会显示所有分支而非按前缀过滤，还会提示用户是否显示全部 N 个候选分支，这在分支数量较多的情况下非常不便。Fish 和 zsh 仍然使用其原生的子字符串\u002F模糊匹配功能。([#1622](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1622)，感谢 @altruic 报告了 [#1621](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1621))\n\n- **所有 Shell 中的钩子命令补全均已预过滤**：`HookCommandCompleter` 在返回候选列表之前已按前缀进行过滤，从而避免了 Fish\u002Fzsh 对钩子命令名称进行子字符串匹配的情况。([#1627](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1627))\n\n- **`wt merge` 在 `submodule.recurse=true` 时失败**：如果用户的 Git 配置中设置了 `submodule.recurse=true`，在合并过程中会出现推送错误。现在本地推送会传递 `--recurse-submodules=no` 参数。([#1619](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1619)，感谢 @viicslen 报告了 [#1604](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1604))\n\n- **工作树同步采用安全的 `read-tree` 命令**：在执行 `--no-ff` 推送后，目标工作树的同步操作将使用 `read-tree -m -u` 而不是 `reset --hard`，这与项目的规范保持一致。([#1623](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1623))\n\n### 内部改进\n\n- 将 `complete_branches` 和 `complete_hook_commands` 函数内联到各自的补全程序中。([#1628](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1628), [#1627](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1627))\n\n## 安装 worktrunk 0.30.1\n\n### 通过 Shell 脚本安装预编译二进制文件\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.30.1\u002Fworktrunk-installer.sh | sh && wt config shell install\n```\n\n### 通过 PowerShell 脚本安装预编译二进制文件\n\n```powershell\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.30.1\u002Fworktrunk-installer.ps1 | iex\"; git-wt config shell install\n```\n\n### 通过 Homebrew 安装预编译二进制文件\n\n```sh\nbrew install worktrunk && wt config shell install\n```\n\n## 下载 worktrunk 0.30.1\n\n| 文件 | 平台 | 校验和 |\n|------|------|--------|\n| [worktrunk-aarch64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.30.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [校验和](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.30.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.30.1\u002Fwork","2026-03-20T21:15:29",{"id":186,"version":187,"summary_zh":188,"released_at":189},126749,"v0.30.0","## 发行说明\n\n### 改进\n\n- **`wt merge --no-ff`**：创建合并提交而非快进，以实现半线性历史（包含变基提交和一个合并提交）。也可在用户配置中通过 `merge.no-ff = true` 启用。[文档](https:\u002F\u002Fworktrunk.dev\u002Fmerge\u002F) ([#1438](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1438)，感谢 @siriobalmelli)\n\n- **`wt step eval`** [实验性]：从命令行评估模板表达式。所有钩子变量（`branch`、`repo`、`worktree_path`）以及过滤器（`hash_port`、`sanitize`、`sanitize_db`）均可使用。专为脚本编写设计：`curl http:\u002F\u002Flocalhost:$(wt step eval '{{ branch | hash_port }}')\u002Fhealth`。[文档](https:\u002F\u002Fworktrunk.dev\u002Fstep\u002F) ([#1004](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1004)，感谢 @EduardoSimon 在 [#947](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F947) 中提出的功能需求)\n\n- **`wt step push --no-ff`**：与 `wt merge --no-ff` 对应，适用于手动分步工作流：`wt step commit && wt step rebase && wt step push --no-ff`。([#1587](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1587))\n\n- **工作树移除现隐藏处理**：已移除的工作树不再放置于可见的 `.wt-removing-*` 同级目录中，而是暂存至 `.git\u002Fwt\u002Ftrash\u002F`。所有 Worktrunk 状态现已统一归入 `.git\u002Fwt\u002F` 目录下。([#1583](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1583)，感谢 @ortonomy 报告 [#1572](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1572))\n\n### 修复\n\n- **`wt merge` 可能会移除裸仓库中的默认分支工作树**：在裸仓库布局中，从默认分支工作树进行合并时，可能会将其移除而非保留。([#1620](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1620)，感谢 @viicslen 报告 [#1618](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1618))\n\n- **`wt switch` 在交互式选择器中未选中任何分支时会 panic**：在交互式选择器中输入不存在的分支名称会导致程序崩溃。现改为优雅地返回错误信息。([#1566](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1566)，感谢 @dlnilsson 报告 [#1565](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1565))\n\n- **`copy-ignored` 会丢失目录权限**：源目录的权限（例如 Postgres 数据目录的 0700 权限）会被替换为默认的 0755。([#1590](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1590)，感谢 @RileyMathews 报告 [#1589](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1589))\n\n- **`copy-ignored` 在目标位置存在损坏的符号链接时会失败**：如果被 Git 忽略的文件的目标路径已是一个无效的符号链接，则复制操作会因“没有这样的文件或目录”而失败。([#1549](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1549)，感谢 @armstrjare 报告 [#1547](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1547))\n\n- **Nushell 在执行 `wt remove` 后 `$env.PWD` 出错**：从工作树内部移除该工作树时，Nushell 会反复出现 `$env.PWD 指向一个不存在的目录` 的错误提示。([#1508](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1508)，感谢 @mystilleef 提出的问题)","2026-03-19T18:22:27",{"id":191,"version":192,"summary_zh":193,"released_at":194},126750,"v0.29.4","## 发行说明\n\n### 改进\n\n- **预切换钩子中的目标分支**：预切换钩子中的 `{{ branch }}` 现在会扩展为用户输入的**目标**分支，而不是源工作树的分支。此前，预切换钩子只能看到当前所在分支，而无法得知将要切换到的分支。[文档](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F) ([#1497](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1497)，感谢 @mayureshwaykole 在 [#1494](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1494) 中的讨论)\n\n- **示例配置中的 LLM 工具命令**：`wt config create` 现在包含了针对 Claude、Codex、opencode、llm 和 aichat 命令的双注释条目，使得这些命令无需阅读文档即可被发现。[文档](https:\u002F\u002Fworktrunk.dev\u002Fllm-commits\u002F) ([#1531](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1531), [#1533](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1533))\n\n### 修复\n\n- **`config create` 输出中的多余空行**：成功路径会在成功消息和提示行之间多打印一行空行，这与“已存在”的路径不一致。([#1525](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1525))\n\n### 文档\n\n- **切换文档**：精简了上游跟踪相关段落，将缺失的 `pre-switch`\u002F`post-switch` 钩子补充到创建生命周期中，并合并了 GitHub 和 GitLab 的相关内容。([#1521](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1521))\n\n- **列表文档**：恢复了 LLM 摘要的 `--full` 参数前置说明。([#1517](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1517))\n\n- **标题中的实验性标记**：为了使目录条目更清晰，将实验性标记从描述段落移至网页文档的标题中。([#1523](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1523))\n\n### 内部\n\n- **CI 改进**：防止跨周期出现重复的内联评审评论，禁止使用 `gh pr checks --watch` 来阻塞流程，修复了并发取消运行时的验证步骤，停止了每小时审计对 CI 轮询的误报，并在夜间清理脚本中添加了滚动文件调查功能。([#1514](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1514), [#1498](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1498), [#1519](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1519), [#1520](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1520), [#1522](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1522))\n\n- **简化 review-pr 技能**：去除了元认知辅导部分，并合并了信心等级；代码行数从 504 行减少到 369 行（减少了 27%）。([#1530](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1530))\n\n## 安装 worktrunk 0.29.4\n\n### 通过 Shell 脚本安装预编译二进制文件\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.29.4\u002Fworktrunk-installer.sh | sh && wt config shell install\n```\n\n### 通过 PowerShell 脚本安装预编译二进制文件\n\n```powershell\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.29.4\u002Fworktrunk-installer.ps1 | iex\"; git-wt config shell install\n```\n\n### 通过 Homebrew 安装预编译二进制文件\n\n```sh\nbrew install work","2026-03-15T02:02:17",{"id":196,"version":197,"summary_zh":198,"released_at":199},126751,"v0.29.3","## 发行说明\n\n### 改进\n\n- **统一的列表与选择器超时模型**：将选择器的每条命令超时和列表的实验性 `timeout-ms` 合并为一个共享配置，包括 `[list] task-timeout-ms`（按任务设置，两者共享）以及按上下文的挂钟预算（`[list] timeout-ms`、`[switch.picker] timeout-ms`）。选择器的默认预算从每条命令 200 毫秒提升至 500 毫秒挂钟时间。（[#1515](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1515)、[#1487](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1487)）\n\n- **`wt switch` 的预飞行模板验证**：现在在创建工作树之前会先验证切换模板（`--execute` 和钩子命令），从而防止因语法错误（如 `{{ unclosed`）而导致孤立的工作树。（[#1500](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1500)）\n\n### 修复\n\n- **`wt remove` 允许移除默认分支工作树**：由于默认分支工作树（例如 main）可以被视为“集成”到自身，因此曾允许被移除。现在除非使用 `-D` 参数，否则将被阻止。（[#1460](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1460)，感谢 @cperalt 报告 [#1448](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1448)）\n\n- **`copy-ignored` 中符号链接被复制为普通文件**：顶级被 Git 忽略的符号链接本应保留为符号链接，但实际却被复制为普通文件，导致 Yarn 单体仓库等设置出现故障。（[#1489](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1489)，感谢 @karmeleon 报告 [#1488](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1488)）\n\n- **WorkingDiff 和 Upstream 列缺少占位符**：当数据未加载时，这些列会显示空白而不是 `⋯` 或 `·` 占位符，从而破坏了视觉上的加载提示。（[#1503](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1503)）\n\n### 文档\n\n- **Step 命令文档**：添加了 promote 子文档，改进了 swap 的描述，将 Operations 索引链接到各子命令部分，在子命令之后移动了别名部分，并修复了跨文件系统回退的描述。（[#1505](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1505)、[#1495](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1495)、[#1502](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1502)、[#1513](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1513)）\n\n- **List 文档**：在帮助文本中记录了占位符符号（`⋯`、`·`），并重写了 LLM 摘要部分。（[#1496](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1496)、[#1506](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1506)）\n\n- **首页**：新增了主要功能（CI 状态、PR 检出、hash_port）和提示链接。（[#1501](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1501)）\n\n- **实验性标记胶囊**：在网页文档中将 `[experimental]` 标记样式化为胶囊式徽章。（[#1499](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1499)）\n\n### 内部\n\n- **去重的钩子配置解析**：提取了共享的钩子类型列表，并将 `lookup_hook_configs` 设置为 pub(crate)。（[#1512](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1512)）\n\n- **Agent Skills 元数据**：添加了 `metadata.internal: true` 至","2026-03-14T09:18:32",{"id":201,"version":202,"summary_zh":203,"released_at":204},126752,"v0.29.2","## 发行说明\n\n### 改进\n\n- **`[switch] no-cd` 配置选项**：在 `[switch]` 部分将 `no-cd = true` 设置为默认值，以禁用目录切换。如有需要，可使用 `--cd` 标志覆盖此设置。这对于由会话管理导航的 tmux 工作流非常有用。[文档](https:\u002F\u002Fworktrunk.dev\u002Fconfig\u002F) ([#1401](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1401)，感谢 @jradtilbrook)\n\n### 修复\n\n- **GPG 签名输出破坏 `wt list`**：当 Git 配置中设置了 `log.showSignature` 时，GPG 验证行会污染 `git log` 调用的标准输出，导致解析失败。现在所有 `git log` 调用都会传递 `--no-show-signature` 参数。([#1465](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1465)，感谢 @apre)\n\n- **Tab 补全忽略 Shell 的子字符串匹配**：二进制文件会在将分支候选返回给 Shell 之前先进行前缀过滤，从而阻止 fish 的子字符串匹配（`auth\u003CTAB>` → `feature\u002Fuser-auth`）和 zsh 的模糊匹配。现在补全会返回所有候选，并由 Shell 自行应用匹配规则。([#1471](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1471)，感谢 @benjaminbauer 报告 [#1468](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1468))\n\n- **大型仓库中的 Tab 补全不可用**：包含大量远程分支的仓库会触发“是否要查看全部 N 种可能性？”的提示。当总数超过 100 时，仅远程分支将被排除在外。([#1442](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1442)，感谢 @cperalt 报告 [#1415](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1415))\n\n- **Nushell Shell 集成在 Home Manager 模块中损坏**：Nix Home Manager 模块对 Nushell 初始化脚本使用了 `use` 而不是 `source`，并且模板定义未导出，导致无法加载 `wt` 包装函数。([#1476](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1476)，感谢 @mystilleef 报告 [#1475](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1475))\n\n### 文档\n\n- **手动提交信息配方**：在“技巧与模式”部分添加了配方，介绍如何使用 `commit.generation.command` 配置，通过 `$EDITOR` 手动编写提交信息，而非依赖 LLM。([#1469](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1469)，感谢 @viicslen 在 [#1467](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1467) 中提出的功能请求）\n\n### 内部\n\n- **技能\u002FCI 指导**：改进了 Claude 机器人在分类、代码审查和 CI 监控方面的技能。([#1485](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1485)，[#1477](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1477)，[#1474](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1474)，[#1472](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1472)，[#1470](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1470)，[#1458](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1458)，[#1447](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1447))\n\n## 安装 worktrunk 0.29.2\n\n### 通过 Shell 脚本安装预编译二进制文件\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownlo","2026-03-13T17:48:02",{"id":206,"version":207,"summary_zh":208,"released_at":209},126753,"v0.29.1","## Release Notes\n\n### Improved\n\n- **GitHub Enterprise support for `wt switch`**: `wt switch pr:\u003Cnumber>` now works with GitHub Enterprise instances by extracting the hostname from the remote URL and passing `--hostname` to `gh`. ([#1408](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1408), thanks @TomRomeo)\n\n- **`wt switch --no-cd` print mode**: When `wt switch --no-cd` opens the interactive picker (no branch argument), selecting a branch prints its name to stdout and exits — useful for scripting. ([#1445](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1445), thanks @ruudk for the feature request in [#1404](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1404))\n\n- **Shadow warning for step aliases**: `wt step` now warns when a user-defined alias has the same name as a built-in step command (e.g., `commit`, `rebase`), since clap intercepts the built-in before the alias runs. ([#1389](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1389))\n\n### Fixed\n\n- **Post-switch hooks on `wt remove`**: When removing the current worktree, post-switch hooks now fire correctly as the user is implicitly switched to the primary worktree. Previously, project hooks were silently skipped because config lookup failed from the removed CWD. ([#1452](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1452), thanks @mjakl for reporting [#1450](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1450))\n\n- **LLM commit session isolation**: The recommended Claude command for commit generation now includes `--no-session-persistence`, preventing commit conversations from polluting `claude --continue`. ([#1454](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1454))\n\n- **Color formatting in error messages**: `DetachedHead` and `NotInWorktree` error messages now support color-print styling, matching other error variants. ([#1387](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1387))\n\n- **Windows error handling**: Replaced `std::process::exit()` with proper error returns in Windows-specific code paths, so destructors and cleanup run correctly. ([#1456](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1456))\n\n### Documentation\n\n- **Hook JSON context section**: Fixed documentation that incorrectly described `hook_type` and `hook_name` as extras; added the TOML hook definition showing how JSON stdin is wired. ([#1360](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1360))\n\n- **`wt remove` help text**: Updated example heading to clarify that `wt remove` works on both worktrees and branches. ([#1449](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1449))\n\n- **Xcode DerivedData cleanup recipe**: Added recipe for cleaning Xcode build artifacts across worktrees. ([#1423](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1423), thanks @RickeyBoy)\n\n### Internal\n\n- **Refactoring**: Extracted handler functions from `main()` dispatch, replaced negated boolean variables with positive-polarity names (`no_verify` → `verify`, `no_delete_branch` → `keep_branch`). ([#1394](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1394), [#1388](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1388), [#1393](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1393))\n\n- **Test reliability**: Resolved flaky PTY\u002Ftiming issues in integration tests, consolidated trivial tests into inline snapshots. ([#1459](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1459), [#1392](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1392), [#1382](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1382), [#1390](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1390))\n\n- **CI**: Added Zola docs validation to PR checks, catching broken internal anchor links before merge. ([#1396](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1396))\n\n## Install worktrunk 0.29.1\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.29.1\u002Fworktrunk-installer.sh | sh && wt config shell install\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.29.1\u002Fworktrunk-installer.ps1 | iex\"; git-wt config shell install\n```\n\n### Install prebuilt binaries via Homebrew\n\n```sh\nbrew install worktrunk && wt config shell install\n```\n\n## Download worktrunk 0.29.1\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [worktrunk-aarch64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.29.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.29.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.29.1\u002Fworktrunk-x86_64-apple-darwin.tar.xz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.29.1\u002Fworktrunk-x86_64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.29.1\u002Fworktrunk-x86_64-","2026-03-12T09:07:47",{"id":211,"version":212,"summary_zh":213,"released_at":214},126754,"v0.29.0","## Release Notes\n\n### Improved\n\n- **`wt step \u003Calias>` command**: User-defined command templates with template variables (`{{ branch }}`, `{{ worktree }}`, custom `--var KEY=VALUE`). Project-config aliases require approval; user-config aliases are trusted. [Docs](https:\u002F\u002Fworktrunk.dev\u002Fstep\u002F) ([#1348](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1348), thanks @cavanaug for the feature request in [#1214](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1214))\n\n- **Remove worktrees from switch picker**: `alt-r` in `wt switch` interactive picker removes the highlighted worktree directly (no force flags — matches safety defaults). ([#1253](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1253), thanks @alfredomtx for the feature request in [#1251](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1251))\n\n- **`wt hook \u003Ctype> --dry-run`**: Preview hook expansion with template variables resolved, without executing. ([#1361](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1361))\n\n- **Hook template variables**: `{{ hook_type }}` and `{{ hook_name }}` are now available in hook command templates. ([#1364](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1364))\n\n- **Typo suggestions for step commands**: Unknown step commands and aliases now suggest the closest match. ([#1363](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1363))\n\n- **Syntax-highlighted `--help`**: Code blocks in `--help` output now render with language-aware syntax highlighting (TOML, bash) instead of plain dimmed text. Help options are grouped under navigational headings (Picker Options, Automation). ([#1365](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1365), [#1355](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1355), [#1359](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1359))\n\n- **Nix Home Manager module**: Install worktrunk via Nix Home Manager. ([#1287](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1287), thanks @DuskyElf; thanks @meicale for reporting [#1257](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1257))\n\n- **Output styling**: Bold names replace quoted names in error messages, underlined references replace bright-black in hints, `@ path` convention unified in section headings, and branch-worktree mismatch warnings now show both actual and expected paths. ([#1375](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1375), [#1380](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1380), [#1285](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1285), [#1376](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1376), [#1377](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1377), thanks @jhigh2000 for reporting [#1184](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1184))\n\n### Fixed\n\n- **`--no-cd` with interactive picker**: The `--no-cd` flag is now passed through when using `wt switch` with the interactive picker. ([#1331](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1331), thanks @cperalt for reporting [#1330](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1330))\n\n- **Remote branches with `\u002F` in picker**: `wt switch --remotes` now correctly handles remote branches with `\u002F` in the name (e.g., `origin\u002Fuser\u002Ffeature`). ([#1266](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1266), thanks @curtbushko for reporting [#1260](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1260))\n\n- **Nushell config path on Windows**: `wt config shell install` now uses the platform-appropriate config directory for nushell on Windows. ([#1294](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1294), thanks @deltoss for reporting [#1293](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1293))\n\n- **Git for Windows per-user install**: Detect per-user Git for Windows installations and show a clean error message instead of panicking when Git Bash is not found. ([#1261](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1261), [#1262](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1262), thanks @JefMasereel for reporting [#1259](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1259))\n\n- **JSON output `summary` field**: `wt list --format=json` now includes the `summary` field. ([#1339](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1339))\n\n- **Squash merge message**: Uses source branch name instead of target branch in the merge commit message. ([#1319](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1319), thanks @ricafeal)\n\n- **Alias approval errors**: Propagate the real error (e.g., \"no remote URL found\") instead of a vague \"Cannot determine project identifier\". ([#1374](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1374))\n\n- **`wt step prune` output**: Summary uses cleaner paired format (\"Pruned 1 worktree & branch\") and fixes post-remove hook display path for non-current worktrees. ([#1344](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1344))\n\n- **VCS metadata in `copy-ignored`**: Exclude `.git`, `.hg`, `.svn`, `_darcs` directories from `wt step copy-ignored`. ([#1250](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1250))\n\n- **Nix evaluation warning**: Use `stdenv.hostPlatform.system` instead of deprecated `system`. ([#1336](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1336), t","2026-03-09T00:50:11",{"id":216,"version":217,"summary_zh":218,"released_at":219},126755,"v0.28.2","## Release Notes\n\n### Improved\n\n- **`wt step prune` output**: Dirty or locked worktrees are silently skipped instead of printing warnings, and \"No worktree found for branch\" info messages are suppressed — prune output now shows only what was actually removed. ([#1236](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1236))\n\n### Fixed\n\n- **CWD removal hint**: After a worktree is removed while a shell is in that directory, the hint now checks whether `wt switch ^` would actually work before suggesting it — falls back to suggesting `wt list` when the default branch worktree doesn't exist (e.g., bare repos). ([#1238](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1238), thanks @davidbeesley for reporting [#1168](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1168))\n\n- **Submodule detection in worktree removal**: Submodule detection now uses `git submodule status` output instead of parsing error messages, avoiding locale-dependent and version-dependent string matching. ([#1247](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1247))\n\n### Internal\n\n- **Hook dispatch**: Introduced `HookCommandSpec` struct and extracted helper functions to deduplicate hook dispatch code (~50 lines net reduction). ([#1248](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1248))\n\n- **CI skills**: Fixed jq escaping in ad-hoc CI polling queries and improved Step 5 dismissal ordering in pr-review skill. ([#1241](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1241), [#1246](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1246))\n\n## Install worktrunk 0.28.2\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-installer.sh | sh && wt config shell install\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-installer.ps1 | iex\"; git-wt config shell install\n```\n\n### Install prebuilt binaries via Homebrew\n\n```sh\nbrew install worktrunk && wt config shell install\n```\n\n## Download worktrunk 0.28.2\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [worktrunk-aarch64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-aarch64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-x86_64-apple-darwin.tar.xz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-x86_64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-x86_64-pc-windows-msvc.zip.sha256) |\n| [worktrunk-aarch64-unknown-linux-musl.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-aarch64-unknown-linux-musl.tar.xz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-aarch64-unknown-linux-musl.tar.xz.sha256) |\n| [worktrunk-x86_64-unknown-linux-musl.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-x86_64-unknown-linux-musl.tar.xz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.2\u002Fworktrunk-x86_64-unknown-linux-musl.tar.xz.sha256) |\n\n\n\n### Install via Cargo\n\n```sh\ncargo install worktrunk && wt config shell install\n```\n\n### Install via Winget (Windows)\n\n```sh\nwinget install max-sixty.worktrunk && git-wt config shell install\n```\n\n### Install via AUR (Arch Linux)\n\n```sh\nparu worktrunk-bin && wt config shell install\n```\n","2026-03-03T05:32:51",{"id":221,"version":222,"summary_zh":223,"released_at":224},126756,"v0.28.1","## Release Notes\n\n### Improved\n\n- **Nushell tab completions**: `wt switch \u003CTAB>` and subcommand completions now work in nushell. ([#1220](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1220), thanks @omerxx for reporting [#1215](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1215))\n\n- **`wt step prune` reliability**: Candidates are now removed inline as they're discovered instead of scan-then-remove, with per-candidate error handling (dirty worktrees are warned and skipped). Dry-run and execution summaries now distinguish worktrees, branches, and detached worktrees. Command marked `[experimental]`. ([#1234](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1234), [#1232](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1232), [#1223](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1223))\n\n- **`wt step diff` performance**: Copies the real git index instead of creating an empty one, preserving git's stat cache so unchanged tracked files are skipped. ([#1230](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1230))\n\n### Fixed\n\n- **Branch delete race on fast-path remove**: `wt remove` now deletes merged branches synchronously on the fast path instead of deferring to the background process, fixing a race where `wt switch --create \u003Cbranch>` fails with \"branch already exists\". ([#1216](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1216))\n\n- **Panic in `is_bare()` on unusual repositories**: `is_bare()` now propagates errors instead of panicking. ([#1221](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1221), @bendrucker)\n\n- **Help text table coloring**: Status symbols and backtick-enclosed text in `--help` tables now render with proper ANSI colors. ([#1231](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1231))\n\n### Internal\n\n- **CI workflow**: Added concurrency group to claude-mention workflow, fixed external contributor PR review permissions. ([#1233](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1233), [#1226](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1226))\n\n## Install worktrunk 0.28.1\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-installer.sh | sh && wt config shell install\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-installer.ps1 | iex\"; git-wt config shell install\n```\n\n### Install prebuilt binaries via Homebrew\n\n```sh\nbrew install worktrunk && wt config shell install\n```\n\n## Download worktrunk 0.28.1\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [worktrunk-aarch64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-x86_64-apple-darwin.tar.xz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-x86_64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-x86_64-pc-windows-msvc.zip.sha256) |\n| [worktrunk-aarch64-unknown-linux-musl.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-aarch64-unknown-linux-musl.tar.xz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-aarch64-unknown-linux-musl.tar.xz.sha256) |\n| [worktrunk-x86_64-unknown-linux-musl.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-x86_64-unknown-linux-musl.tar.xz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.1\u002Fworktrunk-x86_64-unknown-linux-musl.tar.xz.sha256) |\n\n\n\n### Install via Cargo\n\n```sh\ncargo install worktrunk && wt config shell install\n```\n\n### Install via Winget (Windows)\n\n```sh\nwinget install max-sixty.worktrunk && git-wt config shell install\n```\n\n### Install via AUR (Arch Linux)\n\n```sh\nparu worktrunk-bin && wt config shell install\n```\n","2026-02-28T09:28:30",{"id":226,"version":227,"summary_zh":228,"released_at":229},126757,"v0.28.0","## Release Notes\n\n### Improved\n\n- **`wt step prune` command**: Remove worktrees whose branches are already merged into the default branch. Skips unmerged and recently created worktrees, with `--min-age` to control the staleness threshold. [Docs](https:\u002F\u002Fworktrunk.dev\u002Fstep\u002F) ([#1191](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1191))\n\n- **Color palette in `wt config shell show-theme`**: Shows each color and style rendered in itself — base colors, modifiers, bold+color and dim+color variants — for diagnosing legibility issues on different terminal themes. ([#1185](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1185), thanks @jhigh2000 for reporting [#1184](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1184))\n\n- **Smarter column layout in `wt list`**: The Message column is hidden when the terminal is too narrow for Summary to reach 40 characters, preventing both columns from being truncated to unreadable widths. ([#1166](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1166))\n\n### Fixed\n\n- **Submodules in worktree removal**: `wt remove` now handles worktrees containing initialized git submodules, which previously failed with \"working trees containing submodules cannot be moved or removed\". ([#1196](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1196), thanks @dlecan for reporting [#1194](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1194))\n\n- **CWD recovery validation**: Recovery from a deleted worktree directory now validates that candidate repositories actually contain the deleted path as a worktree, preventing false matches when multiple repos share a parent directory. ([#1193](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1193))\n\n- **Shell-escape paths in `-C` flag hints**: Paths containing spaces or special characters in `-C` hints are now properly shell-escaped. ([#1173](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1173))\n\n- **ANSI handling in CWD recovery**: Recovery messages now use `anstream` for proper ANSI handling on terminals that don't support color. ([#1183](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1183))\n\n- **Worktree path in detached HEAD removal messages**: Removal output for detached HEAD worktrees now includes the worktree path for clarity. ([#1210](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1210))\n\n- **Pruned worktree output**: Worktree and branch deletion for pruned worktrees are combined into a single output line instead of two separate messages. ([#1211](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1211))\n\n### Documentation\n\n- **Page metadata and SEO**: All doc pages now have `\u003Cmeta name=\"description\">`, canonical URLs, and structured data (JSON-LD) for better search engine visibility. ([#1167](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1167))\n\n### Internal\n\n- **CI bot improvements**: Inline suggestions, confidence-based review scrutiny, consolidated review+CI analysis, self-poll prevention, verified-facts guideline for triage, and explicit issue-closing in nightly cleaner. ([#1172](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1172), [#1181](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1181), [#1199](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1199), [#1204](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1204), [#1212](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1212), [#1198](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1198), [#1209](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1209))\n\n## Install worktrunk 0.28.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.0\u002Fworktrunk-installer.sh | sh && wt config shell install\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.0\u002Fworktrunk-installer.ps1 | iex\"; git-wt config shell install\n```\n\n### Install prebuilt binaries via Homebrew\n\n```sh\nbrew install worktrunk && wt config shell install\n```\n\n## Download worktrunk 0.28.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [worktrunk-aarch64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.0\u002Fworktrunk-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.0\u002Fworktrunk-aarch64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.0\u002Fworktrunk-x86_64-apple-darwin.tar.xz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.0\u002Fworktrunk-x86_64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.0\u002Fworktrunk-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.28.0\u002Fworktrunk-x86_64-pc-windows-msvc.zip.sha256) |\n| [worktrunk-aarch64-unknown-linux-musl.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.","2026-02-26T18:50:16",{"id":231,"version":232,"summary_zh":233,"released_at":234},126758,"v0.27.0","## Release Notes\n\n### Improved\n\n- **`wt step promote` command (experimental)**: Exchange branches between the main worktree and any linked worktree, including swapping gitignored files (build artifacts, `.env`, `node_modules\u002F`). Shows mismatch state in `wt list` with ⚑ indicator; restore with no arguments from main worktree. [Docs](https:\u002F\u002Fworktrunk.dev\u002Fstep\u002F) ([#789](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F789), thanks @zpeleg for the feature request in [#738](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F738))\n\n- **Instant worktree removal**: `wt remove` now renames the worktree to a staging path before spawning the background cleanup, making the path unavailable immediately instead of after a 1-second sleep. Falls back to legacy removal if rename fails (cross-filesystem, permissions). ([#773](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F773))\n\n- **Graceful recovery from deleted worktree directory**: When a worktree is removed while a shell is still in that directory, `wt switch` and `wt list` now recover automatically — find the parent repository from `$PWD` and proceed without pre-switch hooks. ([#1146](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1146), thanks @davidbeesley for reporting [#1109](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1109))\n\n- **PR\u002FMR support promoted out of experimental**: GitHub PR (`pr:\u003Cnumber>`) and GitLab MR (`mr:\u003Cnumber>`) targets in `wt switch` are now considered stable — 11 minor releases with no interface changes since v0.15.0. ([#1114](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1114))\n\n### Fixed\n\n- **SSH URLs with ports**: Remote matching now handles `ssh:\u002F\u002Fgit@host:2222\u002Fowner\u002Frepo.git` — ports are stripped during URL parsing instead of rejecting the URL. ([#1151](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1151))\n\n- **Config path resolution**: `wt config create` now resolves the same path as config loading, fixing a mismatch when using XDG directories. ([#1135](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1135), thanks @christopher-buss for reporting [#1134](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1134))\n\n- **PTY prompt echo interleaving**: Approval prompts no longer intermix with echoed input on slower systems. Uses quiescence detection instead of a fixed sleep. ([#1133](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1133))\n\n- **Better diagnostics when foreground removal fails**: When `wt remove --foreground` fails with \"Directory not empty\", now shows the remaining top-level entries (capped at 10) and suggests trying background removal. ([#1150](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1150))\n\n- **Output formatting consistency**: Hints use canonical \"To X, run Y\" phrasing, config update hints render in gutter blocks with correct `-C` flag for linked worktrees, and ANSI color nesting fixed in hint messages. ([#1138](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1138), [#1137](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1137))\n\n- **Panic-safe error propagation**: Replaced `.unwrap()` and `.expect()` calls in functions returning `Result` with proper `?` and `bail!` error propagation. ([#1127](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1127))\n\n### Documentation\n\n- **Bot trigger renamed**: CI bot responds to `@worktrunk-bot` instead of `@claude`, matching the actual GitHub username. ([#1149](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1149))\n\n- **`wt step promote` documented in worktree model**: The branch-exchange operation is noted as the sole exception to the \"never retarget a worktree\" rule. ([#1154](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1154))\n\n### Internal\n\n- **CI security model**: Rulesets, token consolidation, and environment protection hardened for GitHub Actions workflows. ([#1118](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1118))\n\n- **Nightly CI workflows**: Automated review of Claude CI session logs and 24-hour code quality sweep for bugs, missing tests, and stale docs. ([#1111](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1111))\n\n- **CI reviewer and bot improvements**: Better failure tracing, Dependabot PR reviews, thread resolution ordering, LGTM dedup, actionable feedback, automatic response to bot PR comments, and graceful handling of mentions on merged\u002Fclosed PRs. ([#1117](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1117), [#1128](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1128), [#1129](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1129), [#1131](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1131), [#1141](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1141), [#1142](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1142), [#1145](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1145), [#1147](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1147), [#1153](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1153), [#1158](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1158), [#1164](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1164))\n\n## Install worktrunk 0.27.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fm","2026-02-22T21:17:07",{"id":236,"version":237,"summary_zh":238,"released_at":239},126759,"v0.26.1","## Release Notes\n\n### Fixed\n\n- **Statusline panic without LLM config**: `wt list statusline` panicked when no LLM command was configured. Now skips summary generation gracefully. ([#1107](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1107))\n\n### Internal\n\n- Demo GIFs now show the Summary column in `wt list --full` output. ([#1104](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1104), [#1106](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1106))\n- CI session log uploads fixed to use correct path. ([#1103](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1103))\n\n## Install worktrunk 0.26.1\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-installer.sh | sh && wt config shell install\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-installer.ps1 | iex\"; git-wt config shell install\n```\n\n### Install prebuilt binaries via Homebrew\n\n```sh\nbrew install worktrunk && wt config shell install\n```\n\n## Download worktrunk 0.26.1\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [worktrunk-aarch64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-x86_64-apple-darwin.tar.xz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-x86_64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-x86_64-pc-windows-msvc.zip.sha256) |\n| [worktrunk-aarch64-unknown-linux-musl.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-aarch64-unknown-linux-musl.tar.xz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-aarch64-unknown-linux-musl.tar.xz.sha256) |\n| [worktrunk-x86_64-unknown-linux-musl.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-x86_64-unknown-linux-musl.tar.xz) | x64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.1\u002Fworktrunk-x86_64-unknown-linux-musl.tar.xz.sha256) |\n\n\n\n### Install via Cargo\n\n```sh\ncargo install worktrunk && wt config shell install\n```\n\n### Install via Winget (Windows)\n\n```sh\nwinget install max-sixty.worktrunk && git-wt config shell install\n```\n\n### Install via AUR (Arch Linux)\n\n```sh\nparu worktrunk-bin && wt config shell install\n```\n","2026-02-19T04:46:13",{"id":241,"version":242,"summary_zh":243,"released_at":244},126760,"v0.26.0","## Release Notes\n\n### Improved\n\n- **Summary column in `wt list --full`**: LLM-generated one-line branch descriptions. Opt-in via `[list] summary = true` in config (experimental). Requires `[commit.generation]` config. ([#1100](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1100))\n\n- **`wt step diff` command**: Show all uncommitted and untracked changes that `wt merge` would include as a unified diff against the merge base. Pass `-- --stat` for a summary. [Docs](https:\u002F\u002Fworktrunk.dev\u002Fstep\u002F) Closes [#1043](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1043). ([#1074](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1074), thanks @davidbeesley for the feature discussion)\n\n- **`pre-switch` hook**: New hook that runs before `wt switch` validation. Use it to fetch-if-stale or run pre-flight checks before switching. Respects `--no-verify`. [Docs](https:\u002F\u002Fworktrunk.dev\u002Fhook\u002F) ([#1094](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1094), thanks @jdb8 for the use case in [#1085](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1085))\n\n- **`wt config update` command**: Automatically apply config migrations — detects deprecated patterns (template variables, `[commit-generation]`, `approved-commands`), shows a diff preview, and applies with confirmation. Use `--yes` to skip the prompt. ([#1083](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1083))\n\n- **Configurable picker timeout**: New `[switch.picker] timeout-ms` setting (default: 200ms, `0` to disable). The `[select]` config section is deprecated in favor of `[switch.picker]` — run `wt config update` to migrate. ([#1087](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1087))\n\n- **Command audit log**: All hook executions and LLM commands are logged to `.git\u002Fwt-logs\u002Fcommands.jsonl` with timestamps, exit codes, and duration. Auto-rotates at 1MB. View with `wt config state logs get` or query with `jq`. ([#1088](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1088))\n\n### Fixed\n\n- **Hook CWD wrong from subdirectories**: Hooks invoked from a subdirectory within a worktree ran with incorrect CWD and `{{ worktree_path }}`\u002F`{{ worktree_name }}` template variables resolved incorrectly. ([#1097](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1097))\n\n- **`copy-ignored` verbose output and error handling**: `-v` flag was silently ignored, error messages lacked file paths, and broken symlinks from interrupted copies caused failures. Also skips non-regular files (sockets, FIFOs) instead of failing. Fixes [#1084](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1084). ([#1090](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1090), thanks @jdb8 for reporting)\n\n- **Nushell `wt list` piping**: `wt list --format json | from json` failed in nushell because the wrapper's stdout capture prevented piping. Fixes [#1062](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1062). ([#1081](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1081), thanks @omerxx for reporting)\n\n- **Approved-commands lost during config migration**: Running the config migration could silently discard existing approval data. Now copies `approved-commands` entries to `approvals.toml` before migration. ([#1079](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1079))\n\n- **Deprecation messages reference `wt config update`**: Deprecation warnings now point to the new `wt config update` command for one-step migration instead of manual `mv` instructions. ([#1089](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1089))\n\n### Documentation\n\n- **`wt switch` help text**: Updated description to \"Switch to a worktree; create if needed\" to surface auto-create behavior. ([#1082](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1082))\n\n- **Docs syntax highlighting**: Migrated to giallo engine with a warm theme. ([#1080](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1080))\n\n### Internal\n\n- **CI reviewer improvements**: File-based GraphQL queries, centralized shell quoting guidance, artifact upload path fixes. ([#1091](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1091), [#1098](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1098), [#1099](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1099))\n\n- **Issue triage for external contributors**: CI triage workflow now runs for all external contributor issues. ([#1086](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1086))\n\n## Install worktrunk 0.26.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.0\u002Fworktrunk-installer.sh | sh && wt config shell install\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.26.0\u002Fworktrunk-installer.ps1 | iex\"; git-wt config shell install\n```\n\n### Install prebuilt binaries via Homebrew\n\n```sh\nbrew install worktrunk && wt config shell install\n```\n\n## Download worktrunk 0.26.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [worktrunk-aarch64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrun","2026-02-19T02:06:13",{"id":246,"version":247,"summary_zh":248,"released_at":249},126761,"v0.25.0","## Release Notes\n\n### Improved\n\n- **System-wide config file**: Load organization-wide defaults from a system config file (`\u002Fetc\u002Fxdg\u002Fworktrunk\u002Fconfig.toml` on Linux, `\u002FLibrary\u002FApplication Support\u002Fworktrunk\u002Fconfig.toml` on macOS) before user config. Override the path with `$WORKTRUNK_SYSTEM_CONFIG_PATH`. Visible in `wt config show`. ([#963](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F963), thanks @goodtune)\n\n- **AI summary preview in `wt switch`**: New 5th tab shows AI-generated branch summaries using your configured `[commit.generation]` LLM command. Opt-in via `[list] summary = true` in config. Summaries are cached in `.git\u002Fwt-cache\u002Fsummaries\u002F` with hash-based invalidation. [Docs](https:\u002F\u002Fworktrunk.dev\u002Fllm-commits\u002F) ([#1049](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1049))\n\n- **Approvals stored in dedicated file**: Approved commands moved from `config.toml` to `approvals.toml`, enabling dotfile management of config without exposing machine-local trust state. Existing approvals in `config.toml` are read automatically with a deprecation warning and migration instructions in `wt config show`. ([#1042](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1042))\n\n- **Error hints include `--execute` context**: When `wt switch --execute=\u003Ccmd>` fails, suggested commands now include the full `--execute` and trailing args so you can copy-paste the fix directly. ([#1064](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1064))\n\n- **`wt list` startup performance**: Config resolution moved into the parallel phase, running concurrently with other git commands instead of sequentially on the critical path. ([#1054](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1054))\n\n### Fixed\n\n- **Submodule worktree path resolution**: `wt switch` resolved to `.git\u002Fmodules\u002F` instead of the working directory inside git submodules. Fixes [#1069](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1069). ([#1070](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1070), thanks @SokiKawashima for reporting)\n\n- **Per-project `[list] timeout` ignored**: The timeout setting from per-project config (`[projects.\"name\".list]`) was not applied — only the global config value was used. ([#1063](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1063))\n\n- **Empty repos crash `wt list`**: Repositories with no commits (unborn HEAD) caused errors. Now renders empty cells for commit-dependent fields. ([#1058](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1058))\n\n- **Stray blank lines before hints in error output**: Error messages with hints (↳) had an extra blank line separating the hint from its subject. ([#1072](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1072))\n\n### Internal\n\n- **Shell escaping consolidation**: Dropped `shlex` crate, consolidated on `shell_escape` across the codebase. ([#1065](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1065))\n\n- **CI reviewer improvements**: Resolve review threads, skip trivial re-approvals, default to suggestions. ([#1068](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1068))\n\n## Install worktrunk 0.25.0\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.25.0\u002Fworktrunk-installer.sh | sh && wt config shell install\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.25.0\u002Fworktrunk-installer.ps1 | iex\"; git-wt config shell install\n```\n\n### Install prebuilt binaries via Homebrew\n\n```sh\nbrew install worktrunk && wt config shell install\n```\n\n## Download worktrunk 0.25.0\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [worktrunk-aarch64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.25.0\u002Fworktrunk-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.25.0\u002Fworktrunk-aarch64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.25.0\u002Fworktrunk-x86_64-apple-darwin.tar.xz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.25.0\u002Fworktrunk-x86_64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.25.0\u002Fworktrunk-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.25.0\u002Fworktrunk-x86_64-pc-windows-msvc.zip.sha256) |\n| [worktrunk-aarch64-unknown-linux-musl.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.25.0\u002Fworktrunk-aarch64-unknown-linux-musl.tar.xz) | ARM64 MUSL Linux | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.25.0\u002Fworktrunk-aarch64-unknown-linux-musl.tar.xz.sha256) |\n| [worktrunk-x86_64-unknown-linux-musl.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.25.0\u002Fworktrunk-x86_64-unknown-linux-musl.tar.xz) | x64 MUSL Linu","2026-02-17T18:57:47",{"id":251,"version":252,"summary_zh":253,"released_at":254},126762,"v0.24.1","## Release Notes\n\n### Improved\n\n- **Template error messages**: Template expansion errors now show what failed, the failing template line, and available variables for undefined variable errors. ([#1041](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1041))\n\n- **Interactive picker preview speed**: Preview pre-computation is parallelized via rayon, reducing the chance of a blocking cache miss when switching preview tabs. ([#1048](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1048))\n\n- **`wt switch` performance**: Switching to existing worktrees defers path computation, reducing startup latency. ([#1029](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1029), [#1030](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1030), [#1031](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1031))\n\n### Fixed\n\n- **PowerShell wrapper swallows `-D` flag**: The wrapper's `[Parameter(ValueFromRemainingArguments)]` promoted it to an \"advanced function\", causing PowerShell to consume `-D` as `-Debug` instead of passing it to `wt.exe`. Fixes [#885](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F885). ([#1057](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1057), thanks @DiTo97 for reporting)\n\n- **Nushell shell integration**: Multiple fixes for nushell — auto-detect for install even without vendor\u002Fautoload directory ([#1032](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1032)), detection checks multiple config paths ([#1038](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1038)), uninstall cleans all candidate locations ([#1050](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1050)), wrapper hardening and improved diagnostics ([#1059](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1059)). (thanks @arnaudlimbourg for [#1032](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1032), [#1038](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1038), and @omerxx for reporting in [#964](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F964))\n\n- **Interactive picker leaves screen artifacts**: The picker left visual artifacts after exiting. Fixes [#1027](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fissues\u002F1027). ([#1028](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1028), [#1044](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1044), thanks @davidbeesley)\n\n- **Statusline counts files outside sparse checkout cone**: Branch diff statistics in the statusline included files outside the sparse checkout cone, inflating counts. ([#1024](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1024), thanks @bendrucker)\n\n- **Template placeholders leak into displayed commands**: `{{ }}` delimiters in hook commands were incorrectly syntax-highlighted, showing ANSI artifacts instead of the template text. ([#1022](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1022))\n\n- **Hook announcement trailing colon**: Hook announcements like \"Running post-merge project:sync:\" had a trailing colon that created visual noise. ([#1025](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1025))\n\n- **Blank line after approval prompts**: Approval prompts showed an extra blank line after the user pressed Enter. ([#1040](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1040))\n\n### Internal\n\n- **Automated Claude PR review**: Added workflow for automated code review on PRs. ([#1037](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1037))\n\n- **Time-to-first-output benchmarks**: Added benchmarks for `remove`, `switch`, and `list` startup latency. ([#1023](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Fpull\u002F1023))\n\n## Install worktrunk 0.24.1\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.24.1\u002Fworktrunk-installer.sh | sh && wt config shell install\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.24.1\u002Fworktrunk-installer.ps1 | iex\"; git-wt config shell install\n```\n\n### Install prebuilt binaries via Homebrew\n\n```sh\nbrew install worktrunk && wt config shell install\n```\n\n## Download worktrunk 0.24.1\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [worktrunk-aarch64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.24.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz) | Apple Silicon macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.24.1\u002Fworktrunk-aarch64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-apple-darwin.tar.xz](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.24.1\u002Fworktrunk-x86_64-apple-darwin.tar.xz) | Intel macOS | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.24.1\u002Fworktrunk-x86_64-apple-darwin.tar.xz.sha256) |\n| [worktrunk-x86_64-pc-windows-msvc.zip](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.24.1\u002Fworktrunk-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https:\u002F\u002Fgithub.com\u002Fmax-sixty\u002Fworktrunk\u002Freleases\u002Fdownload\u002Fv0.24.1\u002Fworktrunk-x86_64-pc-windows-msvc.zip.sha256) |\n| [worktrunk-aarch64-unknown-linux-musl.tar.xz](https:\u002F\u002Fgithu","2026-02-16T20:29:15"]