Каждый день в Telegram-канале и MAX - что нового в вайб-кодинге: инструменты, примеры, ошибки. Подпишись, чтобы быть в курсе актуального.
Что такое git worktree в Claude Code
История, с которой обычно начинается эта тема. На эфире тренинга 12 мая 2026 Артемий рассказал участникам:
Я вайб-кодил два дня и ничего не коммитил, сделал огромные изменения в коде. И у меня всё сломалось, потому что несколько агентов запустил параллельно в одной папке. Они друг друга переписывали: один написал, другой его сломал и сверху свой код, и тот не сохранился. Билиберда была - просто ужас. Два дня работы коту под хвост.
Это базовая боль вайб-кодинга на скорости 2026 года. ИИ-агенты пишут код быстрее, чем человек успевает следить, кто что трогает. Без изоляции файлов запуск двух параллельных сессий Claude Code в одной директории кончается тем, что одна сессия перезаписывает работу другой.
Git worktree решает это на уровне файловой системы. У тебя одна основная директория, в которой ты работаешь. Команда claude --worktree feature-auth создаёт папку .claude/worktrees/feature-auth/ на отдельной ветке и стартует Claude Code в ней. Файлы изолированы. Изменения в одной сессии не видны другой, пока ты не сделаешь явный merge.
В официальной документации Anthropic это формулируется так:
Запуск каждой сессии Claude Code в своём worktree означает, что правки в одной сессии никогда не касаются файлов в другой. Можно собирать фичу в одном терминале и чинить баг во втором.
Подсказка для самопроверки: если ты хоть раз получал коммит, в котором половина файлов - чужая работа, тебе нужен 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 |
| Место на диске | 1× | N× (по одной копии файлов на ветку) |
Раньше worktree-режим в Claude Code приходилось готовить вручную: git worktree add, потом cd, потом claude - и так в каждом терминале. Флаг --worktree (он же -w) делает три действия за одну команду.
Запускаем первую параллельную сессию: флаг --worktree
Минимальный пример. Открываешь первый терминал в корне проекта:
claude --worktree feature-authClaude Code делает три вещи:
- Создаёт
.claude/worktrees/feature-auth/со снэпшотомorigin/HEAD(обычно это твоя ветка по умолчанию). - Заводит новую ветку
worktree-feature-auth. - Стартует сессию в этой папке.
Открываешь второй терминал, в той же корневой папке репо:
claude --worktree bugfix-123Готово. Две сессии Claude Code, разные файлы на диске, разные ветки git. Если в первой ты пишешь авторизацию, а во второй - чинишь падающий тест, они физически не могут друг другу мешать.
Если имя писать не хочется, Claude придумает сам:
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-команда:
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.jsonAnthropic даёт чёткое правило про защиту от случайностей:
Файл использует синтаксис gitignore. Копируются только те файлы, которые подпадают под паттерн и при этом находятся в gitignore. Файлы, отслеживаемые git, не дублируются никогда.
То есть случайно скопировать package.json через .worktreeinclude нельзя - он не в gitignore. Безопасно класть туда любые паттерны.
Один и тот же .worktreeinclude работает в трёх режимах: при ручном --worktree, при автоматических worktree для субагентов (см. ниже) и при сессиях из desktop-приложения Claude.
Worktree от пул-реквеста для код-ревью
Стандартный сценарий код-ревью: коллега прислал PR, надо посмотреть код, запустить тесты, оставить замечание. С обычным git checkout pull/1234/head ты опять переключаешь рабочую копию и ломаешь свою активную сессию.
С флагом --worktree это делается одной командой:
claude --worktree "#1234"Что происходит: Claude Code делает git fetch origin pull/1234/head, создаёт worktree в .claude/worktrees/pr-1234/, чекает ветку PR. Стартует сессия. Можно сразу попросить «прочитай diff, прогони тесты, найди логические ошибки» - и пока Claude работает, твоя основная сессия на main продолжает жить.
Альтернативный синтаксис - полный URL пул-реквеста:
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):
{
"worktree": {
"baseRef": "head"
}
}Теперь claude --worktree experimental-feature стартует от текущего локального HEAD. Это полезно в одном специфическом сценарии: ты пишешь крупную фичу, она ещё не зафиксирована, и тебе нужно запустить субагент чтобы исследовать смежный модуль - но субагент должен видеть твои in-progress изменения, иначе он не поймёт текущей структуры.
Setting принимает ровно два значения: "fresh" (= origin/HEAD) и "head" (= локальный HEAD). Никаких произвольных рефов вроде "feature-branch" или хэша коммита - это сознательное ограничение, чтобы не возникало комбинаторного взрыва вариантов.
Изолируем субагентов автоматически: isolation: worktree
Артемий на эфире 12 мая 2026 объяснил это так:
Субагенты - это когда параллельно запускаются агенты, которые пишут код. А рутины - это процесс старта, то есть когда запускать этих агентов.
Когда ты говоришь Claude «запусти три субагента: один читает базу, второй смотрит API, третий проверяет тесты», все три по умолчанию работают в твоей рабочей копии. Если хотя бы двое одновременно пишут в один файл - конфликт. Решение - дать каждому собственный worktree автоматически.
Способ 1: попросить устно. В диалоге пишешь Claude:
Используй worktrees для своих агентов.Claude применит изоляцию ко всем последующим субагентам в этой сессии.
Способ 2: жёстко прописать в самом субагенте. В файле субагента (например .claude/agents/code-reviewer.md) добавляешь поле в frontmatter:
---
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 на потом.
Сценарий 1: вошёл, ничего не наработал, вышел - worktree удалён.
Сценарий 2: что-то наработал и не зафиксировал - Claude спросит при выходе «keep or remove?». «Keep» сохраняет папку и ветку для возврата. «Remove» удаляет директорию вместе с uncommitted-изменениями и новыми коммитами. Это деструктивно - не нажимай «remove» по инерции.
Сценарий 3: запустил с -p (headless), команда отработала и вышла. Worktree остался. Чистить руками:
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 из официальной документации:
{
"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 с параллельными агентами на твоём проекте.
Источники
- Run parallel sessions with worktrees - Claude Code Docs
- Create custom subagents - Claude Code Docs
- Claude Code Changelog (May-June 2026)
- Run agents in parallel - Claude Code Docs
- Agent View - Claude Code Docs
- git worktree man page
- Mastering Git Worktrees with Claude Code - Dogukan Uraz Tuna, Medium
- Parallel Vibe Coding with Git Worktrees - Dan Does Code
- Параллельная разработка через git worktrees - Steve Kinney
- Запуск нескольких сессий Claude Code параллельно через git worktrees - MindStudio
- Claude Code Worktrees: Parallel Sessions Without Conflicts - ClaudeFast
Новые материалы - дайджестом, без спама
Гайды выходят регулярно. Подпишись, чтобы не пропускать: пришлю подборку в Telegram или на email. Раз в неделю или каждый день - выбираешь сам.

