# Форк (ветвление) сессии 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**.