раздел 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 интерактивные команды, которые ждут ввода - агент не сможет ответить.

Полезные ссылки