Когда один агент GitHub Copilot тянет большой рефакторинг, хочется поручить параллельно ещё пару задач — например, написать несколько новых эндпоинтов. Но если просто открыть три терминала и дать каждому агенту команду, они начнут редактировать одни и те же файлы и устроят бардак с merge-конфликтами. Решение — изолировать рабочее пространство для каждого агента и аккуратно управлять процессами из одного терминала.
Что такое tmux и зачем он агентам
tmux — это терминальный мультиплексор. Он позволяет создать внутри одного экрана несколько терминалов, группировать их в окна и переключаться между ними. Главная фишка — персистентность: сессия tmux живёт отдельно от терминала. Можно отключиться, закрыть окно, перезагрузить компьютер — процессы внутри сессии продолжат работать. Потом подключаешься обратно и видишь всё на своих местах.
Для агентных рабочих процессов это спасение. GitHub Copilot CLI может выполнять длинные последовательности действий — например, большой рефакторинг. Если случайно закрыть терминал на середине, агент умрёт, и всё придётся начинать заново. С tmux такого не случится: достаточно отцепиться от сессии (detach) и при необходимости прикрепиться обратно.
Кроме того, tmux позволяет разбить окно на несколько панелей. Каждая панель — отдельный псевдотерминал, со своей историей команд и своими процессами. Это идеально для наблюдения за несколькими агентами одновременно: видно, что делает каждый, и не надо переключаться между вкладками.
Почему git worktrees
git worktrees — это функция Git, которая позволяет держать несколько рабочих копий одного репозитория. Каждая копия — отдельная папка со своим checkout определённой ветки, но все они используют один общий .git каталог. Это значит, что переключение веток в одном каталоге не трогает другой: агенты работают каждый в своей папке и не видят изменений друг друга.
Если же дать агентам один каталог на всех, они начнут править одни и те же файлы. Каждый считает, что он единственный владелец, и итогом станут конфликты. Worktrees эту проблему снимают: каждый агент изолирован в своей директории.
Для демонстрации возьмём простой пример. Есть API с тремя задачами: отдавать турнирную таблицу, результаты личных встреч и предстоящие матчи. Запустим троих агентов, каждому — свою задачу.
Подготовка окружения
Все команды ниже ориентированы на WSL2. tmux не работает нативно в Windows, но его легко поставить в подсистему Linux. Если вы не хотите заморачиваться с WSL, для Windows есть альтернатива — psmux, но в этой статье мы рассматриваем именно WSL2.
Устанавливаем необходимые пакеты:
sudo apt install -y git tmux curlGitHub Copilot CLI поставляется как npm-пакет. Если Node ещё не установлен:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt install -y nodejsЗатем ставим сам CLI:
npm install -g @github/copilotГотово. Теперь можно создавать первую tmux-сессию.
Базовые команды tmux, которые нужны
Создать новую сессию:
tmux new -s имяВсе действия в tmux начинаются с префикса — по умолчанию это Ctrl+b. Далее идёт команда. Разбить окно на две панели — Ctrl+b % (вертикально) или Ctrl+b " (горизонтально). Переключаться между панелями — Ctrl+b и стрелка.
Отцепиться от сессии — Ctrl+b d. Список сессий — tmux ls. Вернуться в существующую — tmux attach -t имя.
Чтобы не запоминать команды, полезно включить поддержку мыши и настроить свой префикс. Например, файл .tmux.conf:
set -g mouse on set -g prefix C-a unbind C-b bind C-a send-prefixПосле этого можно переключать панели кликом, а для копирования текста выделять мышью. Подобные настройки не являются обязательными, но сильно упрощают жизнь.
Раскладываем агентов по worktrees
Создадим три ветки и три отдельные директории:
git worktree add -b feature/standings ../fixtures-standings git worktree add -b feature/h2h ../fixtures-h2h git worktree add -b feature/upcoming ../fixtures-upcomingПапки ../fixtures-standings и так далее появятся рядом с основным репозиторием, каждая со своей веткой. Проверить список worktrees можно командой git worktree list.
Запускаем агентов
Создаём новую сессию tmux:
tmux new -s swarmРазбиваем окно на три панели (Ctrl+b % дважды). В каждой панели переходим в свою рабочую директорию и убеждаемся, что мы на правильной ветке:
pwd && git branch --show-currentТеперь в каждой панели запускаем агента. Например:
copilotКаждый агент получает свою песочницу. Ключевой момент: по умолчанию Copilot CLI перед каждым действием спрашивает разрешение. Если хочется, чтобы агент работал без интерактива, добавляйте флаг --allow-all-tools. Но это на ваш страх и риск: сначала лучше посмотреть, как агент себя ведёт без него.
Теперь можно наблюдать за всеми тремя агентами одновременно. Каждый сидит в своей панели, работает только со своими файлами и не знает о существовании соседей. Когда задача выполнена, можно закоммитить изменения в каждой ветке и спокойно открыть PR.
Когда это работает, а когда нет
Связка tmux и git worktrees отлично подходит, когда у вас несколько независимых задач. Например, новый функционал, который не пересекается с другими частями кодовой базы. Но если задачи затрагивают одни и те же файлы — скажем, два агента одновременно рефакторят один модуль — даже разные worktrees не спасут от конфликтов при объединении. Изоляция на уровне папок не отменяет логических пересечений.
Рассмотрим, чем git worktrees лучше, чем просто отдельные клоны репозитория.
| Критерий | Git worktrees | Отдельные клоны |
|---|---|---|
| Общий .git каталог | Да | Нет |
| Занимаемое место | Минимум (общая база объектов) | Каждый клон — полная копия истории |
| Переключение веток | Не влияет на другие worktrees | Не влияет, но нужно синхронизировать через remote |
| Простота создания | Одна команда git worktree add | git clone, настройка remote |
Если задачи независимы, worktrees — самый быстрый способ раздать агентам по отдельной площадке. Отдельные клоны пригодятся, когда нужно ещё и разные настройки или зависимости в разных версиях.
Частые ошибки
Первая — не проверить, в какой папке вы находитесь перед запуском агента. Легко отвлечься и запустить его в основной директории, где он начнёт менять вашу рабочую ветку. pwd && git branch --show-current — и всё ясно.
Вторая — выключать компьютер, пока агент работает. tmux переживает разрывы соединения, но не переживёт полное выключение с перезагрузкой. Если сессия нужна надолго, лучше запускать её на удалённом сервере.
И ещё один момент: не стоит запускать несколько агентов в одном worktree, даже если они работают с разными файлами. Они могут одновременно выполнить операции с общим .git, и это вызовет блокировки. Каждому агенту — свой worktree.
Вывод
tmux и git worktrees дают простую схему для параллельной работы агентов GitHub Copilot. tmux держит процессы живыми и даёт удобный обзор, worktrees изолируют изменения. Схема работает не для всех случаев, но когда задачи независимы, она экономит часы ожидания.
Комментарии (0)
Войдите, чтобы комментировать.
Пока нет комментариев. Будьте первым.