раздел 08 · подстраница 4
Изоляция контекста и worktrees
Главная фишка субагентов - они работают с чистой головой. Главный Claude не передаёт им свой контекст, а агент не засоряет главный своими промежуточными размышлениями. Если задача предполагает изменение файлов - агента можно дополнительно изолировать в git worktree.
Зачем изолировать
Главный Claude в большом проекте уже носит с собой:
- CLAUDE.md с десятками правил
- История последних 20 сообщений
- Открытые файлы и их содержимое
- Промежуточные tool-результаты
Если он сам полезет рыть, скажем, по 30 файлам в поисках ответа на "найди все вызовы X" - его контекст переполнится за минуту. После этого качество ответов падает: забывает ранние инструкции, путает файлы.
Субагент решает это так: получает узкую задачу, отрабатывает её в своём контексте, возвращает только финальный отчёт. Главный читает 200 строк отчёта вместо 30 файлов.
Контекстная изоляция - всегда
Любой запуск субагента изолирует контекст автоматически. Агент видит:
- Свой системный промпт (тело
.md-файла) - Постановку задачи от главного (одно сообщение)
- CLAUDE.md проекта (если он есть в корне)
Не видит:
- Историю переписки главного Claude
- Tool-результаты, которые главный уже получил
- Открытые в TUI файлы
После окончания работы агент возвращает короткий отчёт. Всё остальное - выкидывается.
Файловая изоляция - через worktree
Когда несколько агентов работают параллельно и каждый что-то меняет в коде, начинается каша: один правит файл, второй его читает в полупорченом состоянии. Решение - дать каждому свой worktree.
git worktree - встроенная фича git. Создаёт ещё одну рабочую копию репозитория, но под отдельной веткой. Файлы физически дублируются, история коммитов общая.
git worktree add ../app-refactor-utils refactor-utils
git worktree add ../app-add-tests add-tests
git worktree list
# /Users/me/app main
# /Users/me/app-refactor-utils refactor-utils
# /Users/me/app-add-tests add-tests
Каждый агент работает в своей папке. Файлы не пересекаются. В конце мержим ветки в main.
Параметр isolation в Task tool
Когда главный Claude запускает агента через инструмент Task, можно передать параметр:
isolation: "worktree"
В этом случае Claude автоматически создаст временный worktree, запустит агента в нём, и после завершения предложит замержить или удалить ветку. Без isolation агент работает в той же папке, что и главный.
Когда стоит использовать isolation: "worktree":
- Параллельные правки 2+ агентов
- Эксперимент, который может всё сломать - и захочется откатить одной командой
- Долгая задача, во время которой вы хотите продолжать работать в main
Когда не нужно:
- Read-only задача (ревью, поиск, ресёрч) - изолировать нечего
- Мелкая правка одного файла - оверкилл
Как это работает изнутри
main Claude
│
├─► Task: "отрефактори utils/"
│ └─► создаёт worktree ../app-tmp-abc
│ └─► запускает refactor-bot в ../app-tmp-abc
│ └─► правит файлы, коммитит локально
│ ◄─── возвращает отчёт + имя ветки
│
└─► Спрашивает: мержить или удалить?
Если мержим - git merge в main, удаляем worktree. Если нет - просто git worktree remove.
Антипаттерны
- Создавать worktree вручную "на всякий случай" под каждую задачу. Это тратит диск и засоряет файловую систему. Делайте, когда правда нужно.
- Забывать удалять worktree после слияния. Через месяц у вас 20 веток в
../app-*и непонятно, что зачем. - Запускать в worktree интерактивные команды, которые ждут ввода - агент не сможет ответить.
Полезные ссылки
- git worktree - официальная дока
- Task tool - параметры запуска агентов
- Раздел 09 - Параллельные агенты - как использовать worktree для распараллеливания