Git worktree в Claude Code: как запускать несколько сессий параллельно в 2026

Опубликовано 02.06.202614 мин чтенияСредний
Из ветки Git расходятся три панели редактора кода, демонстрируя параллельную работу с единым источником.
Что узнаешь
  • Чем git worktree отличается от обычной git-ветки и зачем нужен вайб-кодеру
  • Как запустить вторую сессию Claude Code в отдельной директории флагом --worktree за 30 секунд
  • Как файл .worktreeinclude автоматически переносит .env и секреты в новую сессию
  • Когда worktree, когда /bg, когда обычный subagent (decision matrix на одной странице)
  • 5 граблей, на которые наступают вайб-кодеры с параллельными агентами
Применить за 15 мин
Сэкономит 7 ч
Средний
3просмотров

Каждый день в Telegram-канале и MAX - что нового в вайб-кодинге: инструменты, примеры, ошибки. Подпишись, чтобы быть в курсе актуального.

Что такое git worktree в Claude Code

История, с которой обычно начинается эта тема. На эфире тренинга 12 мая 2026 Артемий рассказал участникам:

Я вайб-кодил два дня и ничего не коммитил, сделал огромные изменения в коде. И у меня всё сломалось, потому что несколько агентов запустил параллельно в одной папке. Они друг друга переписывали: один написал, другой его сломал и сверху свой код, и тот не сохранился. Билиберда была - просто ужас. Два дня работы коту под хвост.

- Артемий Миллер, эфир тренинга, 12 мая 2026

Это базовая боль вайб-кодинга на скорости 2026 года. ИИ-агенты пишут код быстрее, чем человек успевает следить, кто что трогает. Без изоляции файлов запуск двух параллельных сессий Claude Code в одной директории кончается тем, что одна сессия перезаписывает работу другой.

Git worktree решает это на уровне файловой системы. У тебя одна основная директория, в которой ты работаешь. Команда claude --worktree feature-auth создаёт папку .claude/worktrees/feature-auth/ на отдельной ветке и стартует Claude Code в ней. Файлы изолированы. Изменения в одной сессии не видны другой, пока ты не сделаешь явный merge.

В официальной документации Anthropic это формулируется так:

Запуск каждой сессии Claude Code в своём worktree означает, что правки в одной сессии никогда не касаются файлов в другой. Можно собирать фичу в одном терминале и чинить баг во втором.

- Anthropic Docs, https://code.claude.com/docs/en/worktrees

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

Чем git worktree отличается от обычной ветки

Стандартный git-флоу: ты на ветке main, делаешь git checkout feature-x - и Git перезаписывает файлы рабочей копии. Запущенный npm run dev ломается, потому что package.json поменялся под ним. Стэшишь незакоммиченные изменения, ждёшь пока IDE переиндексируется. Переключаешься обратно - снова всё переписывается, снова стэш-pop.

Git worktree даёт второй вариант: вместо переключения одной папки между ветками, ты заводишь вторую папку для другой ветки. Команда git worktree add ../project-feature-x feature-x создаёт директорию ../project-feature-x/ с файлами ветки feature-x. Твой main остаётся в исходной папке, dev-сервер живёт.

Параметрgit checkout веткаgit worktree add
Файлы рабочей копииПерезаписываютсяПоявляются в новой папке
Параллельная работа на двух веткахНетДа
Незакоммиченные измененияНужен git stashНе нужно ничего делать
Скорость переключенияЗависит от размера дельтыПросто cd
Место на дискеN× (по одной копии файлов на ветку)

Раньше worktree-режим в Claude Code приходилось готовить вручную: git worktree add, потом cd, потом claude - и так в каждом терминале. Флаг --worktree (он же -w) делает три действия за одну команду.

Запускаем первую параллельную сессию: флаг --worktree

Минимальный пример. Открываешь первый терминал в корне проекта:

bash
claude --worktree feature-auth

Claude Code делает три вещи:

  1. Создаёт .claude/worktrees/feature-auth/ со снэпшотом origin/HEAD (обычно это твоя ветка по умолчанию).
  2. Заводит новую ветку worktree-feature-auth.
  3. Стартует сессию в этой папке.

Открываешь второй терминал, в той же корневой папке репо:

bash
claude --worktree bugfix-123

Готово. Две сессии Claude Code, разные файлы на диске, разные ветки git. Если в первой ты пишешь авторизацию, а во второй - чинишь падающий тест, они физически не могут друг другу мешать.

Если имя писать не хочется, Claude придумает сам:

bash
claude --worktree
# → создаст что-то вроде .claude/worktrees/bright-running-fox/

Подсказка для git-новичков: .claude/worktrees/ положи в .gitignore. Иначе при git status в основной папке ты увидишь содержимое всех worktree как untracked-файлы:

# .gitignore
.claude/worktrees/

Анти-грабли: перед первым запуском --worktree в новой директории зайди туда обычным claude (без флага) и прими workspace trust dialog. Если этого не сделать, флаг падает с ошибкой про «trust not accepted» - в том числе если ты комбинируешь его с -p для headless-режима.

Где живут worktrees и как их найти

Базовое местоположение - константа: .claude/worktrees/<value>/ в корне репозитория. Если у тебя проект в ~/dev/my-app/, то worktree feature-auth окажется в ~/dev/my-app/.claude/worktrees/feature-auth/.

Для нестандартных раскладок (например, ты хочешь, чтобы worktree жил вне репо) есть WorktreeCreate hook - о нём ниже в разделе про SVN и Mercurial.

Внутри одной сессии Claude можно переключиться в другой существующий worktree. Просто скажи в чате: «перейди в .claude/worktrees/bugfix-123», и Claude вызовет инструмент EnterWorktree. Текущая папка останется нетронутой - можно вернуться обратно тем же способом.

Список всех worktree (включая основной и созданные вручную) показывает стандартная git-команда:

bash
git worktree list

Вывод будет такого формата:

/home/user/dev/my-app                  abc1234 [main]
/home/user/dev/my-app/.claude/worktrees/feature-auth  def5678 [worktree-feature-auth]
/home/user/dev/my-app/.claude/worktrees/bugfix-123    9876fed [worktree-bugfix-123]

Если хочешь поэкспериментировать с большой задачей перед практикумом - вот мой практикум по вайб-кодингу. Там за 3 вечера разбираем три кита: ИИ-клон мышления, второй мозг на основе твоих данных и контекст-инжиниринг. Worktree и параллельные сессии - стандартная часть workflow на втором вечере.

Копирование .env и секретов: файл .worktreeinclude

Когда --worktree создаёт новую папку, она получает только то, что коммитится в Git. .env с API-ключами и .env.local с локальной конфигурацией - в .gitignore, поэтому в worktree их нет. И первый же запуск npm run dev падает с «MISSING DATABASE_URL».

Самописное решение - руками копировать .env после каждого --worktree. Это работает один раз, потом забывается. Решение Anthropic - файл .worktreeinclude в корне проекта со списком gitignored-файлов, которые надо автоматически копировать в каждый новый worktree.

Создаём в корне репо файл .worktreeinclude:

.env
.env.local
config/secrets.json

Синтаксис - тот же, что у .gitignore. Можно использовать glob-паттерны:

.env*
*.local
config/*.json
.vscode/settings.json

Anthropic даёт чёткое правило про защиту от случайностей:

Файл использует синтаксис gitignore. Копируются только те файлы, которые подпадают под паттерн и при этом находятся в gitignore. Файлы, отслеживаемые git, не дублируются никогда.

- Anthropic Docs, https://code.claude.com/docs/en/worktrees

То есть случайно скопировать package.json через .worktreeinclude нельзя - он не в gitignore. Безопасно класть туда любые паттерны.

Один и тот же .worktreeinclude работает в трёх режимах: при ручном --worktree, при автоматических worktree для субагентов (см. ниже) и при сессиях из desktop-приложения Claude.

Worktree от пул-реквеста для код-ревью

Стандартный сценарий код-ревью: коллега прислал PR, надо посмотреть код, запустить тесты, оставить замечание. С обычным git checkout pull/1234/head ты опять переключаешь рабочую копию и ломаешь свою активную сессию.

С флагом --worktree это делается одной командой:

bash
claude --worktree "#1234"

Что происходит: Claude Code делает git fetch origin pull/1234/head, создаёт worktree в .claude/worktrees/pr-1234/, чекает ветку PR. Стартует сессия. Можно сразу попросить «прочитай diff, прогони тесты, найди логические ошибки» - и пока Claude работает, твоя основная сессия на main продолжает жить.

Альтернативный синтаксис - полный URL пул-реквеста:

bash
claude --worktree https://github.com/anthropics/claude-code/pull/1234

Применение в реальном проекте: связка claude --worktree "#N" + кастомный субагент code-reviewer даёт автоматический ревью за минуту-две. Запускаешь в фоне, в основном окне продолжаешь свою работу, возвращаешься к результату через claude agents.

Базовая ветка: worktree.baseRef для fresh или head

По умолчанию настройка такая: каждый новый worktree стартует от origin/HEAD. Преимущество - чистый старт, гарантированно соответствует тому, что увидит CI. Недостаток - если у тебя на текущей ветке есть незакоммиченные изменения или несколько локальных коммитов сверх remote, они в новый worktree не попадут.

Чтобы worktree наследовал твоё локальное состояние, добавь в .claude/settings.json (или глобальный settings):

json
{
  "worktree": {
    "baseRef": "head"
  }
}

Теперь claude --worktree experimental-feature стартует от текущего локального HEAD. Это полезно в одном специфическом сценарии: ты пишешь крупную фичу, она ещё не зафиксирована, и тебе нужно запустить субагент чтобы исследовать смежный модуль - но субагент должен видеть твои in-progress изменения, иначе он не поймёт текущей структуры.

Setting принимает ровно два значения: "fresh" (= origin/HEAD) и "head" (= локальный HEAD). Никаких произвольных рефов вроде "feature-branch" или хэша коммита - это сознательное ограничение, чтобы не возникало комбинаторного взрыва вариантов.

Изолируем субагентов автоматически: isolation: worktree

Артемий на эфире 12 мая 2026 объяснил это так:

Субагенты - это когда параллельно запускаются агенты, которые пишут код. А рутины - это процесс старта, то есть когда запускать этих агентов.

- Артемий Миллер, эфир тренинга, 12 мая 2026

Когда ты говоришь Claude «запусти три субагента: один читает базу, второй смотрит API, третий проверяет тесты», все три по умолчанию работают в твоей рабочей копии. Если хотя бы двое одновременно пишут в один файл - конфликт. Решение - дать каждому собственный worktree автоматически.

Способ 1: попросить устно. В диалоге пишешь Claude:

Используй worktrees для своих агентов.

Claude применит изоляцию ко всем последующим субагентам в этой сессии.

Способ 2: жёстко прописать в самом субагенте. В файле субагента (например .claude/agents/code-reviewer.md) добавляешь поле в frontmatter:

yaml
---
name: code-reviewer
description: Читает diff и пишет замечания по коду
isolation: worktree
---

Ты внимательный ревьюер. Читай diff, ищи логические ошибки...

Теперь каждый запуск этого субагента получает временный worktree в .claude/worktrees/. Если субагент ничего не записал - папка удаляется автоматически по завершении. Если есть незакоммиченные изменения - Claude спросит, оставить или удалить.

Базовая ветка для субагентских worktree - та же, что у --worktree: по умолчанию origin/HEAD, при worktree.baseRef: head - локальный HEAD.

Decision matrix: worktree, /bg, subagent или Agent View

ИнструментЧто изолируетКогда применять
claude --worktree <name>Файлы (отдельная папка + ветка)Хочешь руками держать N сессий параллельно в разных терминалах
/bg (или Ctrl+B)Контекст и времяДлинная задача, не хочешь блокировать текущее окно. Worktree создаётся под капотом
Subagent с isolation: worktreeФайлы внутри одной сессииОдин промт раздаёт работу N агентам, нужна защита от взаимных перезаписей
claude agents (Agent View)Ничего, это UIХочешь видеть все запущенные / приостановленные / завершённые сессии в одном дашборде
/goalУправление автономностьюХочешь, чтобы Claude работал до условия без твоих промтов между ходами

Типичные комбинации:

  • «2 фичи параллельно вручную» - два терминала, в каждом claude --worktree. Простейший случай.
  • «Запусти ночной рефакторинг, я закроюсь» - /bg + /goal с условием завершения. Сессия живёт независимо от твоего окна.
  • «Один промт - три параллельных исследования» - три субагента с isolation: worktree. Каждый в своей песочнице.
  • «Что у меня сейчас крутится?» - claude agents. Дашборд всех сессий с фильтрами «running», «blocked», «done».

5 граблей при работе с worktree

1. Запустил worktree, .env нет, ничего не работает. Самая частая проблема. Worktree - свежий чекаут, gitignored файлов нет. Решение - сразу при подключении worktree-режима положить .worktreeinclude с .env* и нужными локальными конфигами. Проверь, что файл лежит в корне репо, не в .claude/.

2. Хочешь переключиться на основную ветку, делаешь cd в корень и теряешь незакоммиченные изменения в worktree. Корневая папка и worktree - две разные working copy. Перешёл cd назад - изменения в worktree остались на месте, они никуда не делись. Но если перепутал и сделал git stash в основной папке, думая что ты в worktree - тогда стэш создастся в основной ветке, а не в той, где ты ожидал.

3. Запустил 5 параллельных сессий и не помнишь, что в какой делается. Документация Anthropic прямо предупреждает: больше 2-3 сессий когнитивно не вытягивает большинство разработчиков. Признак перегруза - открываешь Agent View и не можешь с ходу сказать, кто из агентов чем занят. Лимитируй себя двумя одновременными сессиями. Если задача требует больше - значит, она должна быть оркестрирована через /goal + субагентов, а не вручную.

4. Worktree от -p (headless) не чистятся автоматически. Команда claude --worktree feature-x -p "do thing" не показывает интерактивный exit prompt - значит, нет момента, в который Claude спросит «удалить worktree?». Эти worktrees накапливаются. Чистить руками: git worktree remove .claude/worktrees/feature-x. Или скриптом по cron, который удаляет всё старее 7 дней.

5. Trust dialog в новой папке. Если ты впервые открыл репо и сразу пишешь claude --worktree, команда упадёт с ошибкой. Запусти claude без флагов, прими workspace trust, выйди - и теперь --worktree работает. Это сделано специально, чтобы Claude не получил доступ к чужому проекту без согласия пользователя.

Очистка: что удаляется автоматически

Логика автоочистки зависит от того, что ты в worktree наработал и как стартовал сессию. Документация Anthropic перечисляет три сценария:

Если в worktree нет незакоммиченных изменений, untracked-файлов и новых коммитов - worktree и его ветка удаляются автоматически при выходе из сессии. Если у сессии есть имя, Claude вместо удаления спросит, чтобы ты мог сохранить worktree на потом.

- Anthropic Docs, https://code.claude.com/docs/en/worktrees

Сценарий 1: вошёл, ничего не наработал, вышел - worktree удалён.

Сценарий 2: что-то наработал и не зафиксировал - Claude спросит при выходе «keep or remove?». «Keep» сохраняет папку и ветку для возврата. «Remove» удаляет директорию вместе с uncommitted-изменениями и новыми коммитами. Это деструктивно - не нажимай «remove» по инерции.

Сценарий 3: запустил с -p (headless), команда отработала и вышла. Worktree остался. Чистить руками:

bash
git worktree remove .claude/worktrees/feature-x

Дополнительно: worktree от субагентов и /bg-сессий удаляются автоматически фоновой уборкой, если им больше cleanupPeriodDays дней (настройка в settings, по умолчанию обычно 30 дней) и в них нет несохранённой работы. Worktrees от --worktree автоочисткой не трогаются - они твоя ответственность.

Альтернативы для SVN, Perforce, Mercurial: WorktreeCreate hook

Если репозиторий на Subversion или Mercurial, флаг --worktree напрямую не сработает. Anthropic даёт точку расширения через два хука: WorktreeCreate (создаёт изолированную копию) и WorktreeRemove (удаляет её).

Пример хука для SVN из официальной документации:

json
{
  "hooks": {
    "WorktreeCreate": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash -c 'NAME=$(jq -r .name); DIR=\"$HOME/.claude/worktrees/$NAME\"; svn checkout https://svn.example.com/repo/trunk \"$DIR\" >&2 && echo \"$DIR\"'"
          }
        ]
      }
    ]
  }
}

Хук читает имя worktree из stdin ({ "name": "feature-auth" }), делает svn checkout в заранее посчитанную директорию и печатает путь в stdout - Claude Code использует его как working directory для новой сессии.

Важная оговорка: при кастомном хуке .worktreeinclude не используется. Если тебе нужны .env или другие gitignored-файлы в новой папке - копируй их внутри самого скрипта хука.

Что дальше: три соседних механизма параллельности

Worktree даёт тебе изоляцию файлов. /bg - изоляцию контекста. Субагенты - изоляцию задач. По отдельности каждый механизм решает одну проблему. Вместе они складываются в способ работать с тремя-пятью параллельными задачами без когнитивного коллапса. Это и есть скиллсет, на котором держится продвинутый вайб-кодинг в 2026 году.

Эта тема естественно продолжает три соседние: как настроить автономного агента через /goal и Agent View, как собирать собственных субагентов под свои задачи и как запускать сотни агентов через Dynamic Workflows.

Если хочешь разобрать всю эту связку на своих проектах - я веду практикум по вайб-кодингу: 3 вечера, 3 кита (ИИ-клон, второй мозг, контекст-инжиниринг). На втором вечере собираем рабочий workflow с параллельными агентами на твоём проекте.

Источники

Практикум по вайб-кодингу
+Твой второй мозг
3 вечера - стек, метод, первый проект
Старт 9–11 июня  ·  2 000 ₽
Записаться →

Новые материалы - дайджестом, без спама

Гайды выходят регулярно. Подпишись, чтобы не пропускать: пришлю подборку в Telegram или на email. Раз в неделю или каждый день - выбираешь сам.

Была инструкция полезна?
Артемий Миллер
Автор
Артемий Миллер
Предприниматель и вайб-кодер

Артемий Миллер - предприниматель и вайб-кодер. Бывший программист, собирает продукты исключительно вместе с ИИ-агентами, без найма разработчиков.

Связанные инструкции

Связанные концепты