raine/workmux

GitHub: raine/workmux

将 git worktrees 和终端窗口整合为隔离开发环境的工作流编排工具,实现零摩擦的多任务并行开发和 AI agent 管理。

Stars: 957 | Forks: 64

workmux icon

使用 git worktrees 在 tmux* 中进行并行开发

📖 文档 · 安装 · 快速开始 · 命令 · 更新日志

超级有主见、零摩擦的工作流工具,用于管理 [git worktrees](https://git-scm.com/docs/git-worktree) 和 tmux 窗口作为 隔离的开发环境。非常适合并行运行多个 AI agent 而不发生冲突。 **理念**:构建在你已经使用的工具之上。tmux/zellij/kitty 等用于窗口管理,git 用于 worktree,你的 agent 用于编码 —— workmux 负责编排其余部分。 \* 也支持 kitty, WezTerm, 和 Zellij 作为替代 后端。 📚 请参阅 [完整文档](https://workmux.raine.dev/guide/) 获取指南和 配置参考。 📖 **workmux 新手?** 阅读 [介绍博客文章](https://raine.dev/blog/introduction-to-workmux/) 获取 快速概览。 ![workmux demo](https://raw.githubusercontent.com/raine/workmux/refs/heads/main/meta/demo.gif) ## 为什么选择 workmux? **并行工作流。** 同时处理多个功能或热修复, 每个都有自己的 AI agent。无需 stash,无需切换分支,没有冲突。 **每个任务一个窗口。** 一种自然的心理模型。每个都有自己的终端 状态、编辑器会话、开发服务器和 AI agent。上下文切换就是切换 标签页。 **自动化设置。** 新的 worktree 初始状态是破损的(没有 `.env`,没有 `node_modules`, 没有开发服务器)。workmux 可以在创建时复制配置文件、符号链接依赖项并运行 安装命令。 **一条命令清理。** `workmux merge` 处理完整的生命周期:合并 分支、删除 worktree、关闭 tmux 窗口、移除本地分支。 **终端工作流。** 基于你的终端设置构建,而不是另一个 明年就不存在的 agentic GUI。如果你还没有,tmux 可能值得 一试。 worktree 新手?请参阅 [为什么使用 git worktrees?](#why-git-worktrees) ## 功能 - 单条命令创建带有匹配 tmux 窗口的 git worktree (`add`) - 单条命令合并分支并清理所有内容(worktree、tmux 窗口、分支)(`merge`) - [仪表板](#workmux-dashboard) 用于监控 agent、审查更改和 发送命令 - 使用 `/worktree` skill [将任务委托给 worktree agent](#delegating-tasks-with-worktree) - [在 tmux 窗口名称中显示 Claude agent 状态](#agent-status-tracking) - 自动设置你偏好的 tmux 窗格布局(编辑器、shell、watchers、 等) - 运行创建后钩子(安装依赖项、设置数据库等) - 将配置文件(`.env`、`node_modules`)复制或符号链接到新的 worktree 中 - 在容器或 VM 中 [沙箱化 agent](#sandbox) 以增强安全性 - 使用 LLM [自动生成分支名称](#automatic-branch-name-generation) 从 提示词 - Shell 补全 ## Hype ## 安装 ### Bash YOLO ``` curl -fsSL https://raw.githubusercontent.com/raine/workmux/main/scripts/install.sh | bash ``` ### Homebrew (macOS/Linux) ``` brew install raine/workmux/workmux ``` ### Cargo 需要 Rust。如果你没有,请通过 [rustup](https://rustup.rs/) 安装。 ``` cargo install workmux ``` ### Nix ``` nix profile install github:raine/workmux # 或者尝试不安装直接运行 nix run github:raine/workmux -- --help ``` 请参阅 [Nix 指南](https://workmux.raine.dev/guide/nix) 了解 flake 和 home-manager 设置。 对于手动安装,请参阅 [预构建二进制文件](https://github.com/raine/workmux/releases/latest)。 ## 快速开始 1. **初始化配置(可选)**: workmux init 这将创建一个 `.workmux.yaml` 文件来自定义你的工作流(窗格布局、 设置命令、文件操作等)。workmux 开箱即用,具有 合理的默认值,因此此步骤是可选的。 2. **创建一个新的 worktree 和 tmux 窗口**: workmux add new-feature 这将: - 在 `/../__worktrees/new-feature` 创建一个 git worktree - 复制配置文件并符号链接依赖项(如果 [已配置](#file-operations)) - 运行任何 [`post_create`](#lifecycle-hooks) 设置命令 - 创建一个名为 `wm-new-feature` 的 tmux 窗口(前缀可配置) - 设置你配置的或默认的 tmux 窗格布局 - 自动将你的 tmux 客户端切换到新窗口 3. **做你的事** 4. **完成并清理** **本地合并:** 运行 `workmux merge` 以合并到基础分支并在 一步中清理。 **PR 工作流:** 推送并打开一个 PR。合并后,运行 `workmux remove` 进行清理。 ## 配置 workmux 使用双层配置系统: - **Global** (`~/.config/workmux/config.yaml`): 所有项目的个人默认值 - **Project** (`.workmux.yaml`): 项目特定的覆盖 项目设置覆盖全局设置。当你从子目录运行 workmux 时,它会 向上查找最近的 `.workmux.yaml`,允许 monorepo 的嵌套配置。请参阅 [Monorepos 指南](https://workmux.raine.dev/guide/monorepos#nested-configuration) 了解详情。对于 `post_create` 和文件操作列表(`files.copy`、 `files.symlink`),你可以使用 `""` 在 项目特定的值旁边包含全局值。其他设置如 `panes` 在 项目配置中定义时会完全替换。 ### 全局配置示例 `~/.config/workmux/config.yaml`: ``` nerdfont: true # Enable nerdfont icons (prompted on first run) merge_strategy: rebase # Make workmux merge do rebase by default agent: claude panes: - command: # Start the configured agent (e.g., claude) focus: true - split: horizontal # Second pane with default shell ``` ### 项目配置示例 `.workmux.yaml`: ``` post_create: - '' - mise use files: symlink: - '' # Include global symlinks (node_modules) - .pnpm-store # Add project-specific symlink panes: - command: pnpm install focus: true - command: split: horizontal - command: pnpm run dev split: vertical ``` 有关真实示例,请参阅 [workmux 自己的 `.workmux.yaml`](https://github.com/raine/workmux/blob/main/.workmux.yaml)。 ### 配置选项 大多数选项都有合理的默认值。你只需要配置你想要 自定义的内容。 #### 基本选项 | Option | Description | Default | | ---------------- | ---------------------------------------------------- | ----------------------- | | `main_branch` | 要合并到的分支 | Auto-detected | | `base_branch` | 新 worktree 的默认基础分支 | Current branch | | `worktree_dir` | worktree 目录(绝对或相对) | `__worktrees/` | | `window_prefix` | tmux 窗口/会话名称的前缀 | `wm-` | | `mode` | Tmux 模式(`window` 或 `session`) | `window` | | `agent` | `` 占位符的默认 agent | `claude` | | `merge_strategy` | 默认合并策略(`merge`、`rebase`、`squash`) | `merge` | | `theme` | 仪表板颜色主题(`dark`、`light`) | `dark` | #### 命名选项 | Option | Description | Default | | ----------------- | ------------------------------------------- | ------- | | `worktree_naming` | 如何从分支派生名称 | `full` | | `worktree_prefix` | worktree 目录和窗口的前缀 | none | `worktree_naming` 策略: - `full`: 使用完整的分支名称(斜杠变为破折号) - `basename`: 仅使用最后一个 `/` 之后的部分(例如,`prj-123/feature` → `feature`) #### 窗格 使用 `panes` 数组定义你的 tmux 窗格布局。对于会话模式下的多个窗口,请使用 [`windows`](#multiple-windows-per-session) 代替(它们是 互斥的)。 ``` panes: - command: focus: true - command: npm run dev split: horizontal size: 15 ``` 每个窗格支持: | Option | Description | Default | | ------------ | -------------------------------------------------------------- | ------- | | `command` | 要运行的命令(请参阅 [agent 占位符](#agent-placeholders)) | Shell | | `focus` | 此窗格是否获得焦点 | `false` | | `split` | 分割方向(`horizontal` 或 `vertical`) | — | | `size` | 以行/单元格为单位的绝对大小 | 50% | | `percentage` | 以百分比为单位的大小 (1-100) | 50% | ##### Agent 占位符 - ``: 解析为配置的 agent(来自 `agent` 配置或 `--agent` 标志) 内置 agent(`claude`、`gemini`、`codex`、`opencode`、`kiro-cli`、`vibe`) 当作为字面命令使用时会自动检测,并自动接收 prompt 注入 ,无需 `` 占位符或匹配的 `agent` 配置: ``` panes: - command: 'claude --dangerously-skip-permissions' focus: true - command: 'codex --yolo' split: vertical ``` 每个 agent 使用该 agent 的正确格式接收 prompt(通过 `-p`/`-P`/`-e`)。自动检测匹配可执行文件名称,无论标志或 路径如何。 #### 文件操作 新的 worktree 是干净的检出,没有 gitignored 文件(`.env`、 `node_modules` 等)。使用 `files` 自动复制或符号链接每个 worktree 需要的内容: ``` files: copy: - .env symlink: - .next/cache # Share build cache across worktrees ``` `copy` 和 `symlink` 都接受 glob 模式。 #### 生命周期钩子 在 worktree 生命周期的特定点运行命令,例如安装 依赖项或运行数据库迁移。所有钩子都以 **worktree 目录** 作为工作目录(或嵌套配置目录用于 [嵌套配置](https://workmux.raine.dev/guide/monorepos#nested-configuration)) 运行,并接收环境变量:`WM_HANDLE`、`WM_WORKTREE_PATH`、 `WM_PROJECT_ROOT`、`WM_CONFIG_DIR`。 `WM_CONFIG_DIR` 指向包含所使用的 `.workmux.yaml` 的目录,这在使用嵌套配置时可能不同于 `WM_WORKTREE_PATH`。 | Hook | When it runs | Additional env vars | | ------------- | ------------------------------------------------- | ------------------------------------ | | `post_create` | worktree 创建后,tmux 窗口打开前 | — | | `pre_merge` | 合并前(失败时中止) | `WM_BRANCH_NAME`, `WM_TARGET_BRANCH` | | `pre_remove` | worktree 移除前(失败时中止) | — | 示例: ``` post_create: - direnv allow pre_merge: - just check ``` #### Agent 状态图标 自定义 tmux 窗口名称中显示的图标: ``` status_icons: working: '🤖' # Agent is processing waiting: '💬' # Agent needs input (auto-clears on focus) done: '✅' # Agent finished (auto-clears on focus) ``` 设置 `status_format: false` 以禁用自动 tmux 格式修改 #### 默认行为 - 默认情况下,worktree 在 `__worktrees` 中创建,作为你项目的同级目录 - 如果没有定义 `panes` 配置,workmux 提供有主见的默认值: - 对于有 `CLAUDE.md` 文件的项目:在第一个窗格中打开配置的 agent(请参阅 `agent` 选项),如果没有设置则默认为 `claude`。 - 对于所有其他项目:打开你的默认 shell。 - 两种配置都包括水平分割的第二个窗格 - `post_create` 命令是可选的,仅在你配置它们时运行 ### 使用窗格自动设置 使用 `panes` 配置自动化环境设置。与 必须在 tmux 窗口打开之前完成的 `post_create` 钩子不同,窗格 命令在新窗口内立即执行。 这可用于: - **安装依赖项**:在聚焦的窗格中运行 `npm install` 或 `cargo build` 以监控进度。 - **启动服务**:自动启动开发服务器、数据库容器或文件 监视器。 - **运行 agent**:使用特定上下文初始化 AI agent。 由于这些在标准 tmux 窗格中运行,你可以与它们交互(检查日志、 重启服务器),就像正常的终端会话一样。 在窗格命令中而不是 `post_create` 中运行依赖项安装(如 `pnpm install`)有一个关键优势:你可以在安装于后台运行时立即访问 tmux 窗口。使用 `post_create`,你必须等待安装完成窗口才会打开。这也 意味着 AI agent 可以在依赖项并行安装时立即在其窗格中开始 工作。 ``` panes: # Pane 1: Install dependencies, then start dev server - command: pnpm install && pnpm run dev # Pane 2: AI agent - command: split: horizontal focus: true ``` ### 目录结构 以下是 workmux 默认组织你的 worktree 的方式: ``` ~/projects/ ├── my-project/ <-- Main project directory │ ├── src/ │ ├── package.json │ └── .workmux.yaml │ └── my-project__worktrees/ <-- Worktrees created by workmux ├── feature-A/ <-- Isolated workspace for 'feature-A' branch │ ├── src/ │ └── package.json │ └── bugfix-B/ <-- Isolated workspace for 'bugfix-B' branch ├── src/ └── package.json ``` 每个 worktree 是不同分支的单独工作目录,都 共享同一个 git 仓库。这允许你同时处理多个分支 而不会发生冲突。 你可以使用 `worktree_dir` 配置选项自定义 worktree 目录位置(请参阅 [配置选项](#configuration-options))。 ### Shell 别名(推荐) 为了更快地输入,将 `workmux` 别名为 `wm`: ``` alias wm='workmux' ``` ## 令 - [`add`](#workmux-add-branch-name) - 创建一个新的 worktree 和 tmux 窗口 - [`merge`](#workmux-merge-branch-name) - 合并分支并清理所有内容 - [`remove`](#workmux-remove-name-alias-rm) - 移除 worktree 而不合并 - [`list`](#workmux-list) - 列出所有带有状态的 worktree - [`open`](#workmux-open-name) - 为现有 worktree 打开 tmux 窗口 - [`close`](#workmux-close-name) - 关闭 worktree 的 tmux 窗口(保留 worktree) - [`path`](#workmux-path-name) - 获取 worktree 的文件系统路径 - [`dashboard`](#workmux-dashboard) - 显示所有活动 agent 的 TUI 仪表板 - [`config edit`](#workmux-config-edit) - 编辑全局配置文件 - [`init`](#workmux-init) - 生成配置文件 - [`sandbox`](#workmux-sandbox) - 管理 sandbox 后端(container/Lima) - [`claude prune`](#workmux-claude-prune) - 清理过时的 Claude Code 条目 - [`completions`](#workmux-completions-shell) - 生成 shell 补全 - [`docs`](#workmux-docs) - 显示详细文档 ### `workmux add ` 创建一个新的 git worktree 和匹配的 tmux 窗口,并立即切换到它。如果分支不存在,它将自动创建。 - ``: 要创建或切换到的分支名称,远程分支 引用(例如,`origin/feature-branch`),或 GitHub fork 引用(例如, `user:branch`)。远程和 fork 引用会自动获取并 创建具有派生名称的本地分支。Fork 引用将本地分支派生为 `user-branch`(例如,`someuser:feature` 创建本地分支 `someuser-feature`)。使用 `--pr` 时可选。 #### 选项 - `--base `: 指定创建新分支时要从其分支的基础分支、提交或标签。覆盖 `base_branch` 配置。默认为 配置中的 `base_branch`,然后是当前检出的分支。 - `--pr `: 通过编号将 GitHub pull request 检出到新的 worktree 中。 - 需要安装并验证 `gh` 命令行工具。 - 本地分支名称默认为 PR 的 head 分支名称,但可以 覆盖(例如,`workmux add custom-name --pr 123`)。 - `-A, --auto-name`: 使用 LLM 从提示词生成分支名称。请参阅 [自动生成分支名称](#automatic-branch-name-generation)。 - `--name `: 覆盖 worktree 目录和 tmux 窗口名称。默认情况下,这些是从分支名称派生的(slug 化)。不能与 多 worktree 生成(`--count`、`--foreach` 或多个 `--agent`)一起 使用。 - `-b, --background`: 在后台创建 tmux 窗口而不切换到它。与 `--prompt-editor` 一起使用很有用。 - `-w, --with-changes`: 将未提交的更改从当前 worktree 移动到新的 worktree,然后将原始 worktree 重置为干净状态。当你开始在 main 上工作并想将分支移动到新的 worktree 时很有用。 - `--patch`: 交互式选择要移动的更改(需要 `--with-changes`)。打开交互式提示以选择要 stash 的块。 - `-u, --include-untracked`: 同时移动未跟踪的文件(需要 `--with-changes`)。默认情况下,仅移动已暂存和已修改的跟踪文件。 - `-p, --prompt `: 提供一个将自动传递给 AI agent 窗格的内联提示词。 - `-P, --prompt-file `: 提供文件路径,其内容将用作提示词。 - `-e, --prompt-editor`: 打开你的 `$EDITOR`(或 `$VISUAL`)以交互式编写提示词。 - `-a, --agent `: 用于 worktree 的 agent。可以 多次指定以为每个 agent 生成一个 worktree。覆盖你的配置文件中的 `agent`。 - `-W, --wait`: 阻塞直到创建的 tmux 窗口关闭。用于脚本编写,当你想等待 agent 完成其工作时。agent 可以通过运行 `workmux remove --keep-branch` 发出完成信号。 - `-o, --open-if-exists`: 如果分支的 worktree 已经存在,则打开它而不是失败。类似于 `tmux new-session -A`。当你不知道或不在乎 worktree 是否已经存在时很有用。 - `-s, --session`: 创建 tmux 会话而不是窗口。请参阅 [会话模式](#session-mode) 了解详情。 #### 跳过选项 这些选项允许你在不需要时跳过昂贵的设置步骤(例如,对于仅文档更改): - `-H, --no-hooks`: 跳过运行 `post_create` 命令 - `-F, --no-file-ops`: 跳过文件复制/符号链接操作(例如,跳过链接 `node_modules`) - `-C, --no-pane-cmds`: 跳过执行窗格命令(窗格改为打开普通 shell) #### 发生什么 1. 通过 slug 化分支名称确定 worktree 的 **handle**(例如,`feature/auth` 变为 `feature-auth`)。这可以用 `--name` 标志覆盖。 2. 在 `/` 创建一个 git worktree(`worktree_dir` 是可配置的,默认为你项目的同级目录) 3. 运行任何配置的文件操作(复制/符号链接) 4. 如果已定义则执行 `post_create` 命令(在 tmux 窗口打开之前运行,所以保持它们快速) 5. 创建一个名为 `` 的新 tmux 窗口(例如,`wm-feature-auth`,`window_prefix: wm-`) 6. 设置你配置的 tmux 窗格布局 7. 自动将你的 tmux 客户端切换到新窗口 #### 示例 ##### 基本用法 ``` # 创建新分支和 worktree workmux add user-auth # 使用现有分支 workmux add existing-work # 从特定 base 创建新分支 workmux add hotfix --base production # 从远程分支创建 worktree(创建本地分支 "user-auth-pr") workmux add origin/user-auth-pr # 带斜杠的远程分支也可以(创建本地分支 "feature/foo"") workmux add origin/feature/foo # 在后台创建 worktree 而不切换到它 workmux add feature/parallel-task --background # 为 worktree 目录和 tmux 窗口使用自定义名称 workmux add feature/long-descriptive-branch-name --name short # 如果存在则打开现有 worktree,不存在则创建(幂等) workmux add my-feature -o ``` ##### 检出 Pull Request 和 Fork 分支 ``` # 检出 PR #123。本地分支将以 PR 的分支命名。 workmux add --pr 123 # 使用自定义本地分支名检出 PR #456 workmux add fix/api-bug --pr 456 # 使用 GitHub 的 owner:branch 格式检出 fork 分支(从 GitHub UI 复制) # 创建跟踪 fork 的本地分支 "someuser-feature-branch" workmux add someuser:feature-branch ``` ##### 将更改移动到新的 worktree ``` # 将未提交的更改移动到新的 worktree(包括未跟踪文件) workmux add feature/new-thing --with-changes -u # 仅移动已暂存/修改的文件(不包括未跟踪文件) workmux add fix/bug --with-changes # 交互式选择要移动的更改 workmux add feature/partial --with-changes --patch ``` ##### AI agent 提示词 ``` # 使用内联提示为 AI agents 创建 worktree workmux add feature/ai --prompt "Implement user authentication with OAuth" # 为特定 worktree 覆盖默认 agent workmux add feature/testing -a gemini # 使用文件中的提示创建 worktree workmux add feature/refactor --prompt-file task-description.md # 打开编辑器以交互式编写提示 workmux add feature/new-api --prompt-editor ``` ##### 跳过设置步骤 ``` # 跳过仅文档更改的繁重设置 workmux add docs-update --no-hooks --no-file-ops --no-pane-cmds # 仅跳过文件操作(例如,您不需要 node_modules) workmux add quick-fix --no-file-ops ``` ##### 使用 --wait 编写脚本 ``` # 阻塞直到 agent 完成并关闭窗口 workmux add feature/api --wait -p "Implement the REST API, then run: workmux remove --keep-branch" # 在脚本中用于运行连续的 agent 任务 for task in task1.md task2.md task3.md; do workmux add "task-$(basename $task .md)" --wait -P "$task" done ``` #### AI agent 集成 当你通过 `--prompt`、`--prompt-file` 或 `--prompt-editor` 提供提示词时, workmux 自动将提示词注入到运行配置的 agent 命令的窗格中(例如,`claude`、`codex`、`opencode`、`gemini`、`kiro-cli`,或任何你通过 `agent` 配置或 `--agent` 标志设置的内容),无需任何 `.workmux.yaml` 更改: - 命令与配置的 agent 匹配的窗格会自动以给定的提示词启动。 - 你可以保持你的 `.workmux.yaml` 窗格配置简单(例如,`panes: [{ command: "" }]`)并让 workmux 在运行时处理提示词注入。 这意味着你可以使用特定于任务的提示词启动 AI agent,而无需为每个任务修改你的项目配置。 #### 自动生成分支名称 `--auto-name` (`-A`) 标志使用 LLM 从你的提示词生成分支名称。使用的工具取决于你的配置: 1. `auto_name.command` 已设置:按原样使用该命令 2. `config.agent` 是已知的 agent(`claude`、`gemini`、`codex`、`opencode`、`kiro-cli`、`vibe`):使用 agent 的 CLI 和快速/廉价模型 3. 两者都不是:回退到 [`llm`](https://llm.datasette.io/) CLI 工具 ##### 用法 ``` # 打开编辑器编写提示,生成分支名 workmux add -A # 使用内联提示 workmux add -A -p "Add OAuth authentication" # 使用提示文件 workmux add -A -P task-spec.md ``` ##### 要求 当配置了 `agent` 时(例如,`agent: claude`),workmux 自动使用该 agent 的 CLI 进行分支命名。除了安装 agent 外不需要额外的设置。 如果没有配置 agent 且没有设置 `auto_name.command`,workmux 使用 `llm` CLI 工具: ``` pipx install llm ``` 配置模型(例如,OpenAI): ``` llm keys set openai # 或使用本地模型 llm install llm-ollama ``` 如果你设置 `auto_name.command`,则不需要 `llm`。 ##### Agent 配置文件默认值 当配置了 agent 时,这些命令会自动使用: | Agent | Auto-name command | | ---------- | ------------------------------------------------------------------------ | | `claude` | `claude --model haiku -p` | | `gemini` | `gemini -m gemini-2.5-flash-lite -p` | | `codex` | `codex exec --config model_reasoning_effort="low" -m gpt-5.1-codex-mini` | | `opencode` | `opencode run` | 要在配置了 agent 时覆盖回 `llm`,请设置 `auto_name.command: "llm"`。 ##### 配置 在 `.workmux.yaml` 中可选地配置自动命名行为: ``` auto_name: model: 'gemini-2.5-flash-lite' background: true # Always run in background when using --auto-name system_prompt: | Generate a concise git branch name based on the task description. Rules: - Use kebab-case (lowercase with hyphens) - Keep it short: 1-3 words, max 4 if necessary - Focus on the core task/feature, not implementation details - No prefixes like feat/, fix/, chore/ Examples of good branch names: - "Add dark mode toggle" → dark-mode - "Fix the search results not showing" → fix-search - "Refactor the authentication module" → auth-refactor - "Add CSV export to reports" → export-csv - "Shell completion is broken" → shell-completion Output ONLY the branch name, nothing else. ``` 要使用特定工具,请设置 `auto_name.command`。命令字符串被拆分为程序和参数,组合的提示词通过 stdin 管道传输。 ``` auto_name: command: 'claude -p' # 即使配置了 agent 也强制使用 llm auto_name: command: 'llm' ``` | Option | Description | Default | | --------------- | ---------------------------------------------------------------- | -------------------------- | | `command` | 用于分支名称生成的命令(覆盖 agent 配置文件) | Agent 配置文件或 `llm` CLI | | `model` | 与 `llm` CLI 一起使用的 LLM 模型(设置 `command` 时忽略) | `llm` 的默认值 | | `background` | 使用 `--auto-name` 时总是在后台运行 | `false` | | `system_prompt` | 用于分支名称生成的自定义系统提示词 | 内置提示词 | 推荐用于快速、廉价分支名称生成的模型(使用 `llm`): - `gemini-2.5-flash-lite`(推荐) - `gpt-5-nano` #### 并行工作流和多 worktree 生成 workmux 可以从单个 `add` 命令生成多个 worktree,这非常 适合运行并行实验或将任务委托给多个 AI agent。这由四个互斥模式控制: - (`-a`, `--agent`): 为每个指定的 agent 创建一个 worktree。 - (`-n`, `--count`): 创建特定数量的 worktree。 - (`--foreach`): 基于变量矩阵创建 worktree。 - **stdin**: 通过管道输入行以创建带有模板化提示词的 worktree。 使用任何这些模式时,分支名称从模板生成,提示词可以用变量模板化。 ##### 多 worktree 选项 - `-a, --agent `: 多次使用时,为每个 agent 创建一个 worktree。 - `-n, --count `: 创建 `` 个 worktree 实例。可以与单个 `--agent` 标志结合使用,将该 agent 应用于所有实例。 - `--foreach `: 从变量矩阵字符串创建 worktree。格式为 `"var1:valA,valB;var2:valX,valY"`。所有值列表必须具有相同的长度。值按索引位置配对(zip,而非笛卡尔积):每个变量的第一个值在一起,第二个与第二个在一起,等等。 - `--branch-template