workmux: параллельные AI-агенты в tmux и git worktrees

Почему workmux?

Параллельная работа. Ведите несколько задач одновременно, каждую со своим AI-агентом. Никакого stash’а, никаких переключений веток, никаких конфликтов.

Одно окно — одна задача. Интуитивная ментальная модель. У каждой задачи своё состояние терминала, сессия редактора, dev-сервер и AI-агент. Переключить контекст — значит переключить вкладку.

Автоматическая настройка. Новые worktree’ы создаются «сломанными»: без .env, без node_modules, без dev-сервера. workmux умеет копировать конфигурационные файлы, создавать символические ссылки на зависимости и выполнять команды установки при создании.

Очистка одной командой. workmux merge охватывает полный жизненный цикл: сливает ветку, удаляет worktree, закрывает окно tmux и удаляет локальную ветку.

Терминальный рабочий процесс. Стройте поверх своей терминальной среды, а не поверх очередного агентного GUI, которого не будет через год. Если у вас ещё нет такой среды — tmux стоит освоить.

Не знакомы с worktree’ами? Читайте раздел Почему git worktrees?.

Возможности

  • Создавать git worktree’ы с соответствующими окнами tmux одной командой (add)

  • Сливать ветки и убирать всё лишнее (worktree, окно tmux, ветки) одной командой (merge)

  • Дашборд для мониторинга агентов, просмотра изменений и отправки команд

  • Боковая панель для постоянного отображения статуса всех агентов во всех окнах tmux

  • Делегировать задачи агентам worktree через навык /worktree

  • Отображать статус агента в именах окон tmux

  • Автоматически задавать предпочитаемую раскладку панелей tmux (редактор, шелл, наблюдатели и т.д.)

  • Запускать хуки после создания (установка зависимостей, настройка БД и т.д.)

  • Копировать или символически ссылаться на конфигурационные файлы (.env, node_modules) в новые worktree’ы

  • Изолировать агентов в контейнерах или виртуальных машинах для повышенной безопасности

  • Автоматически генерировать имена веток из промптов с помощью LLM

  • Автодополнение в шелле

Что говорят пользователи

  • «Я использую (и очень люблю) workmux — он объединяет tmux, git worktree’ы и CLI-агентов в продуманный рабочий процесс.»Coolin96 на Hacker News

  • «Большое спасибо за работу над workmux! Это инструмент, который я давно хотел видеть.»rstacruz на GitHub

  • «Он стал моим повседневным инструментом — идеальный уровень абстракции над tmux и git, не мешающий работе и не скрывающий базовые инструменты.»cisaacstern на GitHub

  • «Я упоминаю workmux при каждом удобном случае, потому что это идеальный клей между worktree’ами, агентами и окнами tmux.»dedbrizz на Threads

  • «С тех пор как я открыл для себя workmux, я в деле. Отличный драйвер для параллельных агентов, если вы любите tmux и хотите сохранить свой конфиг.»MatijaSosic на X

  • «Использование workmux с хорошо настроенным tmux стало глотком свежего воздуха.»sbeirakh_il на X

  • «Использую уже около месяца, и это сплошь положительные впечатления.»gabrielrockson_ на X

  • «Я по-прежнему не вижу смысла в Herdr. workmux добавляет статусы busy/question/done, сам управляет worktree’ами и многое другое. И всё это поверх уже существующей конфигурации tmux.»13hcoks на X

  • «Хотите современные возможности терминального рабочего пространства, не отказываясь от своей настройки? Вот как сохранить Tmux и ускорить рабочий процесс с помощью Workmux.»Sam Natale на YouTube

Установка

Bash YOLO

curl -fsSL https://raw.githubusercontent.com/raine/workmux/main/scripts/install.sh | bash

Homebrew (macOS/Linux)

brew install raine/workmux/workmux
Details

Cargo (требует rustup):

cargo install workmux

mise:

mise use -g cargo:raine/workmux
nix profile install github:raine/workmux

Для ручной установки смотрите готовые бинарные файлы.

Быстрый старт

Примечание

workmux требует терминального мультиплексора. Убедитесь, что у вас установлен и запущен tmux (или WezTerm / Kitty / Zellij), прежде чем начать. Смотрите My tmux setup, если вам нужна отправная точка.

  1. Инициализация конфигурации (необязательно):

    workmux init

    Создаёт файл .workmux.yaml для настройки рабочего процесса (раскладки панелей, команды настройки, файловые операции и т.д.). workmux работает из коробки с разумными значениями по умолчанию, поэтому этот шаг необязателен.

  2. Создать новый worktree и окно tmux:

    workmux add new-feature

    Это действие:

    • Создаст git worktree по пути <project_root>/../<project_name>__worktrees/new-feature

    • Скопирует конфигурационные файлы и создаст символические ссылки на зависимости (если настроено)

    • Выполнит все команды настройки post_create

    • Создаст окно tmux с именем wm-new-feature (префикс можно настроить)

    • Настроит вашу конфигурированную или стандартную раскладку панелей tmux

    • Автоматически переключит tmux-клиент на новое окно

  3. Делайте своё дело

  4. Завершение и очистка

    Локальное слияние: Выполните workmux merge, чтобы слить ветку в базовую и убрать всё лишнее за один шаг.

    Рабочий процесс с PR: Отправьте изменения и откройте PR. После слияния выполните workmux remove для очистки.

Конфигурация

workmux использует двухуровневую систему конфигурации:

  • Глобальная (~/.config/workmux/config.yaml): личные значения по умолчанию для всех проектов

  • Проектная (.workmux.yaml): переопределения, специфичные для проекта

Настройки проекта переопределяют глобальные. При запуске workmux из подкаталога он идёт вверх по дереву в поисках ближайшего .workmux.yaml, что позволяет использовать вложенные конфиги для монорепозиториев. Подробнее — в руководстве по монорепозиториям. Для списков хуков (post_create, pre_merge, pre_remove) и списков файловых операций (files.copy, files.symlink) можно использовать "<global>", чтобы включить глобальные значения вместе с проектными. Другие настройки, например panes, полностью заменяются при их определении в конфиге проекта.

Пример глобальной конфигурации

~/.config/workmux/config.yaml:

nerdfont: true # Включить иконки nerdfont (запрашивается при первом запуске)
merge_strategy: rebase # По умолчанию использовать rebase при workmux merge
merge_keep: true # По умолчанию сохранять worktree, окно и ветку после слияния
agent: claude

panes:
  - command: <agent> # Запустить настроенный агент (например, claude)
    focus: true
  - split: horizontal # Вторая панель со стандартным шеллом

Пример проектной конфигурации

.workmux.yaml:

post_create:
  - '<global>'
  - mise use

files:
  symlink:
    - '<global>' # Включить глобальные символические ссылки (node_modules)
    - .pnpm-store # Добавить символическую ссылку, специфичную для проекта

panes:
  - command: pnpm install
    focus: true
  - command: <agent>
    split: horizontal
  - command: pnpm run dev
    split: vertical

Реальный пример смотрите в собственном .workmux.yaml проекта workmux.

Параметры конфигурации

Большинство параметров имеют разумные значения по умолчанию. Настраивайте только то, что хотите изменить.

Основные параметры

Параметр Описание По умолчанию

main_branch

Ветка для слияния

Определяется автоматически

base_branch

Базовая ветка по умолчанию для новых worktree’ов, или auto для эффективной главной ветки

Текущая ветка

worktree_dir

Каталог для worktree’ов (абсолютный или относительный). Поддерживает ~ и {project}.

<project>__worktrees/

window_prefix

Префикс для имён окон/сессий tmux. Поддерживает {project}.

wm-

mode

Режим tmux (window или session)

window

window_placement

Размещение нового окна tmux (after_current или rightmost)

after_current

agent

Агент по умолчанию для заполнителя <agent>

claude

agents

Именованные команды агентов (документация, только глобальные)

{}

merge_strategy

Стратегия слияния по умолчанию (merge, rebase, squash)

merge

merge_keep

По умолчанию сохранять ресурсы после workmux merge

false

theme

Цветовая схема дашборда (пользовательские цвета)

default (авто тёмная/светлая)

Установите base_branch: auto, чтобы создавать независимые потоки работы от эффективной главной ветки каждого репозитория. workmux использует настроенный main_branch, затем локальный origin/HEAD, main или master. Определение использует локальное состояние Git и не выполняет fetch. Если base_branch не указан, ветки по-прежнему создаются от текущей ветки.

Параметры именования

Параметр Описание По умолчанию

worktree_naming

Способ формирования имён из веток

full

worktree_prefix

Префикс для каталогов worktree и окон

нет

Стратегии worktree_naming:

  • full: использовать полное имя ветки (слэши заменяются дефисами)

  • basename: использовать только часть после последнего / (например, prj-123/featurefeature)

Панели (Panes)

Задайте раскладку панелей мультиплексора с помощью массива panes. Для нескольких окон в режиме сессии используйте вместо этого windows (они взаимоисключающие).

panes:
  - command: <agent>
    name: agent
    focus: true
  - command: npm run dev
    name: dev
    split: horizontal
    size: 15

Каждая панель поддерживает:

Параметр Описание По умолчанию

name

Отображаемое имя панели (в настоящее время применяется бэкендом Zellij)

command

Команда для выполнения (см. заполнители агентов)

Шелл

focus

Получает ли эта панель фокус

false

zoom

Развернуть панель на весь экран (подразумевает focus: true)

false

split

Направление разделения (horizontal или vertical)

size

Абсолютный размер в строках/ячейках

50%

percentage

Размер в процентах (1–100)

50%

Заполнители агентов
  • <agent>: подставляет настроенного агента (из конфига agent или флага --agent)

Встроенные агенты (claude, gemini, agy, codex, opencode, kiro-cli, vibe, pi, omp, grok) автоматически определяются при использовании в качестве буквальных команд и автоматически получают инъекцию промпта, без необходимости использовать заполнитель <agent> или соответствующую настройку agent:

panes:
  - command: 'claude --dangerously-skip-permissions'
    focus: true
  - command: 'codex --yolo'
    split: vertical

Каждый агент получает промпт (через -p/-P/-e) в правильном формате для этого агента. Автоопределение сопоставляет имя исполняемого файла независимо от флагов или пути.

Поддержка Antigravity CLI охватывает определение команд, инъекцию промпта и отслеживание статуса через хуки жизненного цикла, устанавливаемые командой workmux setup.

Именованные раскладки

Определите переиспользуемые раскладки панелей в словаре layouts и выбирайте нужную при создании worktree с помощью флага -l/--layout:

layouts:
  design:
    panes:
      - command: <agent>
        focus: true
      - command: <agent:codex>
        split: vertical
  review:
    panes:
      - command: <agent>
workmux add my-feature -l design

При использовании -l панели раскладки заменяют верхнеуровневые panes для данного worktree. Все остальные настройки (хуки, файлы, агент и т.д.) берутся из верхнего уровня как обычно. Флаг -l нельзя комбинировать с --agent.

Файловые операции

Новые worktree’ы — это чистые копии без игнорируемых git’ом файлов (.env, node_modules и т.д.). Используйте files, чтобы автоматически копировать или создавать символические ссылки на всё необходимое для каждого worktree:

files:
  copy:
    - .env
  symlink:
    - .next/cache # Общий кэш сборки для всех worktree'ов

И copy, и symlink принимают glob-паттерны.

Чтобы повторно применить файловые операции к существующему worktree (например, после обновления конфига), выполните workmux sync-files из его каталога. Используйте --all для синхронизации всех worktree’ов сразу.

Хуки жизненного цикла

Выполняйте команды в определённых точках жизненного цикла worktree, например для установки зависимостей или запуска миграций БД. Все хуки запускаются из каталога worktree в качестве рабочего каталога (или каталога вложенного конфига для вложенных конфигов) и получают переменные окружения: WM_HANDLE, WM_WORKTREE_PATH, WM_PROJECT_ROOT, WM_CONFIG_DIR.

hook_shell — это список argv, содержащий исполняемый файл и его аргументы. workmux добавляет каждую команду хука в качестве последнего аргумента. По умолчанию используется ["bash", "-c"] для совместимости. Пути, специфичные для машины, следует помещать в глобальную конфигурацию:

hook_shell: ["/opt/homebrew/bin/bash", "-c"]

Проект может переопределить полный список argv или унаследовать глобальное значение, не указывая hook_shell. Список argv должен содержать непустой исполняемый файл. Флаги шелла и обработка ошибок применяются только при явном включении.

WM_CONFIG_DIR указывает на каталог, содержащий использованный .workmux.yaml, который может отличаться от WM_WORKTREE_PATH при использовании вложенных конфигов.

Хук Когда выполняется Дополнительные переменные окружения

post_create

После создания worktree, до открытия окна tmux

pre_merge

Перед слиянием (прерывает при ошибке)

WM_BRANCH_NAME, WM_TARGET_BRANCH

pre_remove

Перед удалением worktree (прерывает при ошибке)

Пример:

post_create:
  - direnv allow

pre_merge:
  - just check

Иконки статуса агента

Настройте иконки, отображаемые в именах окон tmux:

status_icons:
  working: '🤖' # Агент обрабатывает задачу
  waiting: '💬' # Агент ожидает ввода (автоматически сбрасывается при фокусировке)
  done: '✅' # Агент завершил задачу (автоматически сбрасывается при фокусировке)

Агенты в состоянии «working», не производящие вывода в панель в течение 10 секунд, автоматически определяются как прерванные.

Установите status_format: false, чтобы отключить автоматическое изменение формата tmux.

Поведение по умолчанию

  • По умолчанию worktree’ы создаются в каталоге <project>__worktrees, соседнем с вашим проектом

  • Если конфигурация panes не определена, workmux предоставляет собственные значения по умолчанию:

    • Для проектов с файлом CLAUDE.md: открывает настроенного агента (см. параметр agent) в первой панели, по умолчанию claude, если ничего не задано

    • Для всех остальных проектов: открывает стандартный шелл

    • Оба варианта включают вторую панель, разделённую горизонтально

  • Команды post_create необязательны и выполняются только при их настройке

Автоматическая настройка с панелями

Используйте конфигурацию panes для автоматизации настройки окружения. В отличие от хуков post_create, которые должны завершиться до открытия окна tmux, команды панелей выполняются немедленно внутри нового окна.

Это можно использовать для:

  • Установки зависимостей: запустите npm install или cargo build в активной панели для мониторинга прогресса

  • Запуска сервисов: автоматически запускайте dev-серверы, контейнеры БД или файловые наблюдатели

  • Запуска агентов: инициализируйте AI-агентов с конкретным контекстом

Поскольку они выполняются в стандартных панелях tmux, вы можете взаимодействовать с ними (проверять логи, перезапускать серверы) как в обычном терминале.

Запуск установки зависимостей (например, pnpm install) в команде панели, а не в post_create, имеет ключевое преимущество: вы сразу получаете доступ к окну tmux, пока установка выполняется в фоне. С post_create вам пришлось бы ждать завершения установки, прежде чем окно вообще откроется. Это также означает, что AI-агенты могут сразу начать работу в своей панели, пока зависимости устанавливаются параллельно.

panes:
  # Панель 1: Установить зависимости, затем запустить dev-сервер
  - command: pnpm install && pnpm run dev

  # Панель 2: AI-агент
  - command: <agent>
    split: horizontal
    focus: true

Структура каталогов

Вот как workmux организует ваши worktree’ы по умолчанию:

~/projects/
├── my-project/               <-- Основной каталог проекта
│   ├── src/
│   ├── package.json
│   └── .workmux.yaml
│
└── my-project__worktrees/    <-- Worktree'ы, созданные workmux
    ├── feature-A/            <-- Изолированное рабочее пространство для ветки 'feature-A'
    │   ├── src/
    │   └── package.json
    │
    └── bugfix-B/             <-- Изолированное рабочее пространство для ветки 'bugfix-B'
        ├── src/
        └── package.json

Каждый worktree — это отдельный рабочий каталог для разных веток, использующих одно и то же git-репозиторий. Это позволяет работать над несколькими ветками одновременно без конфликтов.

Расположение каталога worktree можно настроить с помощью параметра worktree_dir (см. Параметры конфигурации). Значение поддерживает ~ для домашнего каталога и заполнитель {project}, который заменяется именем каталога основного worktree. Это позволяет одной глобальной конфигурации хранить все worktree’ы каждого репозитория в одном корневом каталоге, например worktree_dir: ~/.workmux/{project}.

Псевдоним шелла (рекомендуется)

Для ускорения ввода создайте псевдоним workmuxwm:

alias wm='workmux'

Команды

  • add — создать новый worktree и окно tmux

  • merge — слить ветку и убрать всё лишнее

  • rebase — переместить ветку worktree на базовую ветку

  • remove (rm) — удалить worktree’ы без слияния

  • list — вывести список всех worktree’ов со статусом

  • open — открыть окно tmux для существующего worktree

  • close — закрыть окно tmux worktree (сам worktree сохраняется)

  • resurrect — восстановить окна worktree после сбоя

  • path — получить путь в файловой системе для worktree

  • dashboard — показать TUI-дашборд всех активных агентов

  • sidebar — переключить компактную боковую панель статуса агентов в tmux

  • reap-agents — завершить отслеживаемые процессы агентов старше заданного порога

  • config edit — открыть глобальный конфигурационный файл для редактирования

  • init — создать конфигурационный файл

  • sandbox — управление песочницами (контейнер/Lima)

  • claude prune — очистить устаревшие записи Claude Code

  • completions — сгенерировать автодополнение для шелла

  • docs — показать подробную документацию

workmux add <branch-name>

Создаёт новый git worktree с соответствующим окном tmux и сразу переключает вас на него. Если ветка не существует, она будет создана автоматически.

  • <branch-name>: имя создаваемой или уже существующей ветки, ссылка на удалённую ветку (например, origin/feature-branch) или ссылка на форк GitHub (например, user:branch). Удалённые ветки и форки автоматически загружаются и создают локальную ветку с производным именем. Для форков локальная ветка формируется как user-branch (например, someuser:feature создаёт локальную ветку someuser-feature). Необязателен при использовании --pr.

Параметры

  • --base <branch|commit|tag>: указать базовую ветку, коммит или тег для ветвления при создании новой ветки. Переопределяет конфиг base_branch. Значение auto в конфиге использует эффективную главную ветку. Без обоих этих параметров workmux использует текущую ветку.

  • --pr <number|url>: извлечь pull request GitHub по его номеру или полному URL в новый worktree.

    • Требует установленной и аутентифицированной утилиты gh.

    • URL имеет вид https://github.com/<owner>/<repository>/pull/<number>;.

    • Имя локальной ветки по умолчанию соответствует имени ветки в PR, но его можно переопределить (например, workmux add custom-name --pr 123).

    • Если такая локальная ветка уже существует и не имеет worktree, она будет переиспользована.

  • -A, --auto-name: сгенерировать имя ветки из промпта с помощью LLM. Смотрите Автоматическая генерация имён веток.

  • --name <name>: переопределить имя каталога worktree и окна tmux. По умолчанию они формируются из имени ветки (в виде слага). Нельзя использовать при генерации нескольких worktree’ов (--count, --foreach или несколько --agent).

  • -b, --background: создать окно tmux в фоне без переключения на него. Полезно с --prompt-editor.

  • -w, --with-changes: перенести незафиксированные изменения из текущего worktree в новый, затем сбросить исходный worktree в чистое состояние. Полезно, когда вы начали работу в main и хотите перенести изменения в новый worktree.

  • --patch: интерактивно выбрать, какие изменения перенести (требует --with-changes). Открывает интерактивный запрос для выбора фрагментов для stash.

  • -u, --include-untracked: также перенести неотслеживаемые файлы (требует --with-changes). По умолчанию переносятся только изменённые и отслеживаемые файлы.

  • -p, --prompt <text>: задать встроенный промпт, который автоматически будет передан в панели AI-агентов.

  • -P, --prompt-file <path>: указать путь к файлу, содержимое которого будет использовано как промпт.

  • -e, --prompt-editor: открыть $EDITOR (или $VISUAL) для интерактивного написания промпта.

  • --prompt-file-only: записать файл промпта в worktree без инъекции в команды агентов. Панель агента не требуется. Полезно, когда ваш редактор имеет встроенного агента, читающего .workmux/PROMPT-*.md напрямую.

  • -l, --layout <name>: использовать именованную раскладку панелей из конфига вместо стандартных панелей. Нельзя комбинировать с --agent.

  • -a, --agent <name>: агент(ы) для worktree(s). Можно указывать несколько раз для создания отдельного worktree для каждого агента. Переопределяет agent из конфигурационного файла.

  • -W, --wait: блокировать до закрытия созданного окна tmux. Полезно для скриптинга, когда нужно дождаться завершения работы агента. Агент может сигнализировать о завершении, запустив workmux remove --keep-branch.

  • -o, --open-if-exists: если worktree для ветки уже существует, открыть его вместо ошибки. Аналогично tmux new-session -A. Полезно, когда вы не знаете или не важно, существует ли worktree.

  • -s, --session: создать сессию tmux вместо окна. Подробнее — в разделе о режиме сессии.

  • --dry-run: вывести итоговый путь worktree, ветку, базу, цель мультиплексора, файловые операции и хуки после создания без фактического создания или изменения чего-либо.

  • --config <path>: использовать альтернативный конфигурационный файл для этого вызова. Всё равно объединяется с глобальным конфигом.

  • --fork: форкнуть последний разговор из текущего worktree в новый. Агент продолжит работу с контекстом форкнутого разговора. Используйте --fork=<session-id> для форка конкретной сессии (поддерживается совпадение по префиксу). Поддерживается Claude Code и Codex.

Параметры пропуска шагов

Эти параметры позволяют пропустить дорогостоящие шаги настройки, когда они не нужны (например, для изменений только в документации):

  • -H, --no-hooks: пропустить выполнение команд post_create

  • -F, --no-file-ops: пропустить операции копирования/создания ссылок (например, пропустить создание ссылки на node_modules)

  • -C, --no-pane-cmds: пропустить выполнение команд панелей (панели открываются с обычными шеллами)

Что происходит

  1. Определяется дескриптор (handle) worktree путём формирования слага из имени ветки (например, feature/auth становится feature-auth). Можно переопределить флагом --name.

  2. Создаётся git worktree по пути <worktree_dir>/<handle> (каталог worktree_dir настраивается и по умолчанию является соседним каталогом вашего проекта).

  3. Выполняются настроенные файловые операции (копирование/создание ссылок).

  4. Выполняются команды post_create, если они определены (запускаются до открытия окна tmux, поэтому держите их быстрыми).

  5. Создаётся новое окно tmux с именем <window_prefix><handle> (например, wm-feature-auth при window_prefix: wm-).

  6. Настраивается заданная раскладка панелей tmux.

  7. Tmux-клиент автоматически переключается на новое окно.

В режиме окон tmux без --parent-session $TMUX_PANE идентифицирует вызывающую панель и её родительскую сессию. Если $TMUX_PANE отсутствует или устарел, workmux использует рабочие каталоги живых панелей, если их ближайшее совпадение указывает на одну сессию. Сервер tmux с одной сессией — последний запасной вариант. При сохраняющейся неоднозначности требуется --parent-session <name>. Рабочий каталог позволяет определить git-репозиторий и даёт только косвенные данные для размещения в tmux.

Примеры

Базовое использование
# Создать новую ветку и worktree
workmux add user-auth

# Использовать существующую ветку
workmux add existing-work

# Создать новую ветку от конкретной базы
workmux add hotfix --base production

# Создать worktree из удалённой ветки (создаёт локальную ветку "user-auth-pr")
workmux add origin/user-auth-pr

# Удалённые ветки со слэшами тоже работают (создаёт локальную ветку "feature/foo")
workmux add origin/feature/foo

# Предварительный просмотр плана без фактического создания
workmux add feature/parallel-task --dry-run

# Создать 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’ов и веток форков
# Извлечь PR #123. Локальная ветка будет названа по ветке PR.
workmux add --pr 123

# Извлечь pull request по полному URL GitHub с пользовательской локальной веткой
workmux add --pr https://github.com/raine/workmux/pull/456 fix/api-bug

# Извлечь ветку форка в формате owner:branch из GitHub (скопировать из интерфейса GitHub)
# Создаёт локальную ветку "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-агентов
# Создать worktree с встроенным промптом для AI-агентов
workmux add feature/ai --prompt "Implement user authentication with OAuth"

# Переопределить агента по умолчанию для конкретного worktree
workmux add feature/testing -a gemini

# Создать worktree с промптом из файла
workmux add feature/refactor --prompt-file task-description.md

# Открыть редактор для интерактивного написания промпта
workmux add feature/new-api --prompt-editor

# Только записать файл промпта (для редакторов со встроенными агентами, например neovim)
workmux add feature/task -P task.md --prompt-file-only
Пропуск шагов настройки
# Пропустить дорогостоящую настройку для изменений только в документации
workmux add docs-update --no-hooks --no-file-ops --no-pane-cmds

# Пропустить только файловые операции (например, node_modules не нужны)
workmux add quick-fix --no-file-ops
Скриптинг с --wait
# Блокировать до завершения агента и закрытия окна
workmux add feature/api --wait -p "Implement the REST API, then run: workmux remove --keep-branch"

# Использовать в скрипте для последовательных задач агентов
for task in task1.md task2.md task3.md; do
  workmux add "task-$(basename $task .md)" --wait -P "$task"
done

Интеграция с AI-агентами

При передаче промпта через --prompt, --prompt-file или --prompt-editor workmux автоматически инжектирует промпт в панели, запускающие настроенную команду агента (например, claude, codex, opencode, gemini, agy, kiro-cli, vibe, pi, omp, grok или любой другой, заданный через конфиг agent или флаг --agent) без необходимости изменять .workmux.yaml:

  • Панели с командой, соответствующей настроенному агенту, автоматически запускаются с заданным промптом.

  • Конфигурация панелей в .workmux.yaml может быть простой (например, panes: [{ command: "<agent>" }]), а инъекцией промпта во время выполнения занимается workmux.

Это означает, что вы можете запускать AI-агентов с промптами под конкретные задачи, не изменяя конфигурацию проекта для каждой задачи.

Если ваш редактор имеет встроенного агента (например, neovim с плагином-агентом), используйте --prompt-file-only, чтобы записать промпт в .workmux/PROMPT-<branch>.md без необходимости в панели агента. Редактор сможет обнаружить и обработать файл при запуске. Это также можно постоянно настроить в конфиге с помощью prompt_file_only: true.

Автоматическая генерация имён веток

Флаг --auto-name (-A) генерирует имя ветки из вашего промпта с помощью LLM. Используемый инструмент зависит от конфигурации:

  1. Если задан auto_name.command: используется эта команда как есть

  2. Если config.agent — известный агент (claude, gemini, agy, codex, opencode, kiro-cli, vibe, pi, omp): используется CLI агента с быстрой/дешёвой моделью

  3. Ни то ни другое: используется CLI-инструмент llm

Использование
# Открывает редактор для промпта, генерирует имя ветки
workmux add -A

# С встроенным промптом
workmux add -A -p "Add OAuth authentication"

# С файлом промпта
workmux add -A -P task-spec.md
Требования

Если настроен agent (например, agent: claude), workmux автоматически использует CLI этого агента для именования веток. Никакой дополнительной настройки, кроме установленного агента, не требуется.

Если агент не настроен и не задан auto_name.command, workmux использует CLI-инструмент llm:

pipx install llm

Настройте модель (например, OpenAI):

llm keys set openai
# Или используйте локальную модель
llm install llm-ollama

Если задан auto_name.command, llm не требуется.

Значения агентов по умолчанию

При настроенном агенте автоматически используются следующие команды:

Агент Команда для авто-именования

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

kiro-cli

kiro-cli chat --no-interactive

pi

pi -p

omp

omp -p

Чтобы при настроенном агенте вернуться к llm, установите auto_name.command: "llm".

Конфигурация

При необходимости настройте поведение авто-именования в .workmux.yaml:

auto_name:
  model: 'gemini-2.5-flash-lite'
  background: true # Всегда запускать в фоне при использовании --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. Корректные имена git-веток сохраняются, включая префиксы с разделителями-слэшами, например fix/issue-123.

auto_name:
  command: 'claude -p'

# Принудительно использовать llm, даже если агент настроен
auto_name:
  command: 'llm'
Параметр Описание По умолчанию

command

Команда для генерации имени ветки (переопределяет профиль агента)

Профиль агента или CLI llm

model

Модель LLM для использования с CLI llm (игнорируется при задании command)

Стандартная модель llm

background

Всегда запускать в фоне при использовании --auto-name

false

system_prompt

Пользовательский системный промпт для генерации имён веток

Встроенный промпт

Рекомендуемые модели для быстрой и дешёвой генерации имён веток (с llm):

  • gemini-2.5-flash-lite (рекомендуется)

  • gpt-5-nano

Параллельные рабочие процессы и генерация нескольких worktree’ов

workmux может создавать несколько worktree’ов одной командой add, что идеально подходит для параллельных экспериментов или делегирования задач нескольким AI-агентам. Управляется четырьмя взаимоисключающими режимами:

  • (-a, --agent): создать worktree для каждого указанного агента

  • (-n, --count): создать указанное количество worktree’ов

  • (--foreach): создать worktree’ы на основе матрицы переменных

  • stdin: передать строки через pipe для создания worktree’ов с шаблонными промптами

При использовании любого из этих режимов имена веток генерируются по шаблону, а промпты шаблонизируются с переменными. Промпты для одиночного worktree передаются буквально, поэтому общий синтаксис вроде ${{ …​ }} из GitHub Actions не нужно экранировать.

Параметры нескольких worktree’ов
  • -a, --agent <name>: при многократном указании создаёт один worktree для каждого агента

  • -n, --count <number>: создаёт <number> экземпляров worktree. Можно комбинировать с одним флагом --agent для применения этого агента ко всем экземплярам

  • --foreach <matrix>: создаёт worktree’ы из строки матрицы переменных. Формат: "var1:valA,valB;var2:valX,valY". Все списки значений должны иметь одинаковую длину. Значения объединяются по индексу (zip, а не декартово произведение): первые значения каждой переменной идут вместе, вторые — вместе и т.д.

  • --branch-template <template>: шаблон в формате MiniJinja (совместимый с Jinja2) для генерации имён веток.

    • Доступные переменные: {{ base_name }}, {{ agent }}, {{ num }}, {{ index }}, {{ input }} (stdin) и любые переменные из --foreach

    • По умолчанию: {{ base_name }}{% if agent %}-{{ agent | slugify }}{% endif %}{% for key, value in foreach_vars %}-{{ value | slugify }}{% endfor %}{% if num %}-{{ num }}{% endif %}

  • --max-concurrent <number>: ограничивает количество одновременно работающих worktree’ов. При задании workmux создаёт до <number> worktree’ов, затем ждёт закрытия любого окна перед запуском следующего. Требует, чтобы агенты закрывали окна по завершении (например, через инструкцию в промпте запустить workmux remove --keep-branch).

Шаблонизация промптов

При создании нескольких worktree’ов любой промпт, переданный через -p, -P или -e, рассматривается как шаблон MiniJinja. Можно использовать переменные из режима генерации для создания уникальных промптов для каждого агента или экземпляра. Для обычных одиночных команд add текст промпта не шаблонизируется.

Матрицы переменных в файлах промптов

Вместо передачи --foreach в командной строке можно указать матрицу переменных прямо в файле промпта с помощью YAML-фронтматтера. Это удобнее для сложных матриц и позволяет держать переменные рядом с использующим их промптом.

Формат:

Создайте файл промпта с YAML-фронтматтером в начале, отделённым ---:

Пример 1: mobile-task.md

---
foreach:
  platform: [iOS, Android]
  lang: [swift, kotlin]
---

Build a {{ platform }} app using {{ lang }}. Implement user authentication and
data persistence.
workmux add mobile-app --prompt-file mobile-task.md
# Генерирует worktree'ы: mobile-app-ios-swift, mobile-app-android-kotlin

Пример 2: agent-task.md (использование agent как переменной foreach)

---
foreach:
  agent: [claude, gemini]
---

Implement the dashboard refactor using your preferred approach.
workmux add refactor --prompt-file agent-task.md
# Генерирует worktree'ы: refactor-claude, refactor-gemini

Поведение:

  • Переменные из фронтматтера доступны как в шаблоне промпта, так и в шаблоне имени ветки

  • Все списки значений должны иметь одинаковую длину, а значения объединяются по индексу (то же поведение zip, что и при -)

© 2026 meganuke