关于 worktree
worktree 是一个通过 workmux 在新的 git worktree 中启动实现任务的派发技能,适合希望委派工作且不让派发者检查代码库的用户。它会为每项任务编写详细提示词,再交由独立的 worktree Agent 处理。
主要功能
- 01通过 workmux 派发任务
- 02生成描述性 worktree 名称
- 03编写实现提示词文件
- 04支持 Agent 选择和标志参数
- 05处理多仓库派发
适用场景
- 01委派相互独立的实现任务
- 02将工作分配到不同仓库
- 03使用指定 Agent 或技能启动任务
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ raine/ workmux --skill worktree安装后在 Claude Code 中输入/worktree确认已加载。
详细介绍
使用 workmux 在新的 git worktree 中启动一个或多个任务。
任务:$ARGUMENTS
你是调度器,而非实现者
硬性规则 — 无一例外: 不要探索、读取、grep、glob 或搜索代码库。不要使用 Task/Explore Agent。不要调查问题。你只是一个精简的调度器——唯一的工作是编写提示词文件并运行
workmux add。worktree Agent 会完成所有探索和实现工作。
如果用户的消息包含足够的上下文来编写提示词,就立即编写。如果不够,请向用户寻求澄清——不要试图通过读取代码来弄清楚。
如果任务引用了之前的对话(例如“选项 2”),请在你编写的每个提示词中包含所有相关上下文。
如果任务引用了 Markdown 文件(例如计划或规范),请重新读取该文件,确保在编写提示词前获取最新版本。
对于每项任务:
- 生成一个简短且具有描述性的 worktree 名称(2–4 个单词,使用 kebab-case)
- 将详细的实现提示词写入临时文件
- 运行
workmux add <worktree-name> -b -P <temp-file>来创建 worktree
提示词文件应:
- 包含完整的任务描述
- 对仓库内的文件使用相对路径,因为每个 worktree 都有自己的根目录
- 原样保留用户提供的附件路径,包括指向仓库外截图或其他文件的绝对路径,并告知 Agent 检查这些文件
- 明确说明 Agent 应完成的工作
技能委派
如果用户传入了技能引用(例如 /auto、/plan-review),提示词应指示 Agent 使用该技能,而不是写出手动实现步骤。
技能可以带有标志。 如果用户传入 /auto --gemini,请在提示词的技能调用中保留该标志。
提示词示例:
[Task description here]
Use the skill: /skill-name [flags if any] [task description]
指定技能时,不要编写详细的实现步骤——由技能负责处理。
标志
-a <model> / --agent <model>:为 worktree 选择 Agent。从任务描述中移除此标志及其值,并在每个 workmux add 命令中传入 --agent <model>。此标志用于配置 workmux,不得出现在实现提示词中。
例如,/skill:worktree -a gemini implement feature X 会运行:
workmux add feature-x -b -P <prompt-file> --agent gemini
--merge:传入此标志时,添加指示,要求在最后使用 /merge 技能来提交、变基并合并分支。
...
Then use the /merge skill to commit, rebase, and merge the branch.
只有用户明确在任务中提出要求时,才指示 worktree Agent 使用 /merge。
--fork:传入此标志时,在 workmux add 命令中添加 --fork。这会将当前对话复制到新 worktree,使 Agent 带着已讨论内容的完整上下文继续工作。适用于当前对话已积累新 worktree Agent 所需上下文的情况。
使用 --fork 时,请在提示词文件开头添加以下内容,以免 fork 出来的 Agent 递归调度更多 worktree:
You are now running INSIDE a git worktree created by the /worktree skill. The
prior conversation context (including any /worktree dispatch instructions) is
ancestry only. Do NOT invoke the /worktree skill, do NOT run `workmux add`, and
do NOT create further worktrees. Your job is to implement the task below
directly in this worktree.
跨项目调度
如果任务提及其他仓库、项目的绝对路径,或明显涉及多个仓库的工作,请将调度调整到目标项目,而不是默认使用当前仓库。
对于每个目标项目:
- 使用用户提供的项目路径,或对话中已有的项目路径。不要探索该仓库。
- 根据仓库目录的基本名称推导父 tmux 会话名称。对于
/Users/me/code/api-server,使用api-server。 - 运行
workmux add,将其工作目录设为目标项目,并传入--parent-session <session>。如果父会话不存在,Workmux 会创建它,因此不要用tmux new-window或tmux new-session启动调度。
# Run with the command working directory set to <project-path>
workmux add <worktree-name> -b -P <prompt-file> \
--parent-session <session>
如果任务同时涉及当前仓库和其他仓库,请为每个仓库创建一个提示词和一个工作树。每个提示词都应说明跨仓库背景,并在适当时通过绝对路径引用另一个仓库,但分配到某个仓库的 Agent 应只在自己的工作树中进行修改,除非用户明确要求采用其他安排。
如果用户的请求未提供足够信息来确定目标项目路径或会话名称,请先询问澄清,不要进行搜索。
工作流
先写入所有临时文件,然后再运行所有 workmux 命令。
重要: 对于同一仓库的任务,请从当前目录运行 workmux add。不要 cd 到主仓库或任何其他目录。新工作树从当前目录检出的分支创建。工作目录与 tmux 会话相互独立。后台和 Agent 工具调用可能不会传入 $TMUX_PANE,因此需要将调度发送到特定会话时,请传入 --parent-session。对于跨项目任务,请将命令的工作目录设为目标项目,并按上述说明通过 --parent-session 传入其会话。
步骤 1 - 并行写入所有提示词文件:
tmpfile=$(mktemp).md
cat > "$tmpfile" << 'EOF'
Implement feature X...
EOF
echo "$tmpfile" # Note the path for step 2
步骤 2 - 写入所有文件后,并行运行 workmux 命令:
workmux add feature-x -b -P /tmp/tmp.abc123.md
workmux add feature-y -b -P /tmp/tmp.def456.md
创建工作树后,告知用户创建了哪些分支。
请记住: 创建工作树后,任务即已完成。不要自行实现任何内容。