mcpField
W
worktree

worktree

github.com/raineAgent 工作流3.0k68 次安装6 天前更新
代码仓库

关于 worktree

worktree 是一个通过 workmux 在新的 git worktree 中启动实现任务的派发技能,适合希望委派工作且不让派发者检查代码库的用户。它会为每项任务编写详细提示词,再交由独立的 worktree Agent 处理。

主要功能

  1. 01通过 workmux 派发任务
  2. 02生成描述性 worktree 名称
  3. 03编写实现提示词文件
  4. 04支持 Agent 选择和标志参数
  5. 05处理多仓库派发

适用场景

  1. 01委派相互独立的实现任务
  2. 02将工作分配到不同仓库
  3. 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 文件(例如计划或规范),请重新读取该文件,确保在编写提示词前获取最新版本。

对于每项任务:

  1. 生成一个简短且具有描述性的 worktree 名称(2–4 个单词,使用 kebab-case)
  2. 将详细的实现提示词写入临时文件
  3. 运行 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.

跨项目调度

如果任务提及其他仓库、项目的绝对路径,或明显涉及多个仓库的工作,请将调度调整到目标项目,而不是默认使用当前仓库。

对于每个目标项目:

  1. 使用用户提供的项目路径,或对话中已有的项目路径。不要探索该仓库。
  2. 根据仓库目录的基本名称推导父 tmux 会话名称。对于 /Users/me/code/api-server,使用 api-server。
  3. 运行 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

创建工作树后,告知用户创建了哪些分支。

请记住: 创建工作树后,任务即已完成。不要自行实现任何内容。

评论

支持 Markdown