# Форк (ветвление) сессии Claude Code > [!summary] Суть > Форк копирует историю текущей сессии в **новую сессию с новым ID**, а оригинал оставляет нетронутым. Получаются **две независимые сессии с общей историей** до точки форка. Делается флагом **`--fork-session`** (вместе с `--resume` или `--continue`). --- ## Зачем это нужно Бывает, что в текущем диалоге уже накоплен полезный контекст (обсуждение, прочитанные файлы, принятые решения), и от этой точки хочется попробовать **два разных пути**, не мешая один другому. Форк сохраняет общую «базу» в обеих ветках, а дальше каждая идёт своей дорогой: ``` общая история ●──●──●──●──●──● ← точка форка ├──────●──●──● сессия А (оригинал, прежний ID) └──────●──●──● сессия Б (форк, новый ID) ``` --- ## Как форкнуть Типичная задача: сессия **А** уже открыта в текущем окне и должна там **остаться**, а форк **Б** нужен в **отдельном новом окне ОС**. 1. Открой **новое окно терминала** и перейди в **ту же папку проекта**, что и у сессии А — без этого А не появится в списке (сессии привязаны к папке): ```bash cd "<папка проекта сессии А>" ``` 2. Запусти форк и выбери сессию А в списке (она будет самой свежей): ```bash claude --resume --fork-session ``` Готово: окно А продолжает работать как было, а в новом окне — сессия **Б** (копия истории А до момента форка, с новым ID). Дальше сессии **независимы**: сообщения из А в Б не попадут, и наоборот. > [!tip] Варианты команды > - `claude --continue --fork-session` — форкнуть **последнюю** сессию в папке сразу, без выбора из списка. > - `claude --resume <имя-или-ID> --fork-session` — форкнуть конкретную сессию по имени или ID. Имя удобно задать заранее: `/rename имя` внутри сессии или старт через `claude -n имя`. > [!warning] Не запускай `/branch` в окне А > Встроенная команда `/branch` тоже форкает, но **переключает само текущее окно** в новую ветку (оригинал уходит в фон) — то есть окно А стало бы сессией Б. Чтобы А осталась на месте, окно А не трогаем и форкаем её снаружи, из нового окна. > [!warning] Не открывай одну сессию в двух окнах без форка > Если сделать `claude --resume` одной и той же сессии в двух окнах **без** `--fork-session`, сообщения из обоих окон смешаются в один транскрипт — это не две независимые сессии. Для независимости нужен именно **форк**. --- ## Важные нюансы - **Б — это снимок А на момент форка.** История копируется полностью до точки форка, но дальнейшие сообщения в А в Б уже не попадут (и наоборот). - **Оригинал не затрагивается** и остаётся в списке сессий. Вернуться в А: `/resume`, `/resume <имя>` или `/resume <ID>`. - **Разрешения не переносятся:** одобренное как «allow for this session» в форке придётся подтвердить заново. - **Где лежат сессии:** транскрипты — `~/.claude/projects/<проект>/<session-id>.jsonl` (формат JSONL). По умолчанию удаляются через 30 дней (`cleanupPeriodDays`); базовую папку меняет `CLAUDE_CONFIG_DIR`. - **В списке сессий** форкнутые сессии группируются под корневой — разверни группу стрелкой `→`. --- ## Быстрая шпаргалка | Действие | Команда | | :--- | :--- | | Форк А в новом окне (выбрать из списка) | `claude --resume --fork-session` | | Форк последней сессии без выбора | `claude --continue --fork-session` | | Форк конкретной сессии | `claude --resume <имя-или-ID> --fork-session` | | Вернуться в оригинал | `/resume`, `/resume <имя>` или `/resume <ID>` | --- ## Источники - [Manage sessions — Claude Code Docs](https://code.claude.com/docs/en/sessions) - Проверено на версии Claude Code **2.1.150**.