Слогер Создать блог
Разработка

Параллельная работа агентов GitHub Copilot: гайд по tmux и git worktrees

GitHub Copilot CLI умеет работать автономно, но если запустить несколько агентов в одном каталоге, они начнут мешать друг другу. Рассказываем, как разделить рабочие пространства через git worktrees и управлять ими из tmux.

Когда один агент 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 curl

GitHub 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 addgit clone, настройка remote

Если задачи независимы, worktrees — самый быстрый способ раздать агентам по отдельной площадке. Отдельные клоны пригодятся, когда нужно ещё и разные настройки или зависимости в разных версиях.

Частые ошибки

Первая — не проверить, в какой папке вы находитесь перед запуском агента. Легко отвлечься и запустить его в основной директории, где он начнёт менять вашу рабочую ветку. pwd && git branch --show-current — и всё ясно.

Вторая — выключать компьютер, пока агент работает. tmux переживает разрывы соединения, но не переживёт полное выключение с перезагрузкой. Если сессия нужна надолго, лучше запускать её на удалённом сервере.

И ещё один момент: не стоит запускать несколько агентов в одном worktree, даже если они работают с разными файлами. Они могут одновременно выполнить операции с общим .git, и это вызовет блокировки. Каждому агенту — свой worktree.

Вывод

tmux и git worktrees дают простую схему для параллельной работы агентов GitHub Copilot. tmux держит процессы живыми и даёт удобный обзор, worktrees изолируют изменения. Схема работает не для всех случаев, но когда задачи независимы, она экономит часы ожидания.

По материалам: productivity. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.