Handoff контекста: сохранить прогресс, переехать при необходимости
Сохранение прогресса в HANDOFF.md в конце каждой большой итерации: точечное обновление, проверенные цифры, ловушки. Плюс указатель в CLAUDE.md и хук, который сразу после автокомпакта напоминает модели перечитать HANDOFF. Новый чат — только по сигналам: заполненный контекст не повод.
Сохрани контекст проекта в HANDOFF.md: создай файл или обнови существующий. После этого любая новая сессия — и эта же после сжатия контекста — должна знать о проекте столько же, сколько ты сейчас.
Всё нужное определи сам из контекста чата: проект, путь, над чем работали, что дальше. Не переспрашивай. Юзер написал что-то рядом с этим промтом — это цель или уточнение, учти. Контекст уже сжимался и деталей не хватает — бери их из git log, диффа и живого smoke, а не по памяти.
Работай сам, без субагентов — запускай их только по явной просьбе юзера. И экономно: HANDOFF пишется из того, что уже известно в этом чате, плюс точечные проверки. Код целиком не перечитывай.
Главное: заполненный контекст — не повод переезжать
В Claude Code есть автокомпакт: когда контекст почти заполнен, история сжимается, и работа продолжается в том же чате. Поэтому по умолчанию этот промт — сохранение прогресса: обновил HANDOFF и продолжаешь здесь.
HANDOFF всё равно нужен. Сжатие — это пересказ: точные цифры, команды и причины решений в нём теряются, и живёт он только внутри этой сессии. HANDOFF лежит в git, его читает любая сессия.
Чтобы после сжатия ничего не терялось, нужны три части:
HANDOFF.md— факты, ловушки, команды (шаги 1-2).- Указатель в
CLAUDE.md— любая сессия знает, что HANDOFF надо читать (шаг 3). - Хук после сжатия — напоминает перечитать HANDOFF сразу после автокомпакта, когда это нужнее всего (шаг 4).
Шаг 1. Создать или обновить HANDOFF.md
Файла нет — создай по шаблону ниже.
Файл есть — обнови точечно, не переписывай:
- §3 цифры и §6 сделанное — актуальные значения;
- §7 open items — закрытое
зачеркнии напиши, что закрыло; новое добавь; - §7 ловушки — новые допиши в конец нумерованного списка; подсекции нет — создай и перенеси туда грабли, уже описанные в тексте;
- §8 команды — только если поменялись;
- «Последнее обновление» и одна строка в историю итераций;
- §9 не трогай, если юзер в этом чате не менял стиль или красные линии. Исключение — правило про агентов: его нет — добавь; написано обратное («при большой задаче запускай агентов сам») — замени, если юзер в этом чате не подтвердил старый вариант.
Существующее не удаляй без причины и не меняй номера секций: на них ссылаются другие документы. С прошлого сохранения добавить нечего — файл не трогай.
Шаг 2. Smoke и сверка
Прогони smoke из §8. Для сервиса — реальные страницы, API, статус процесса; для библиотеки или CLI — тесты и сборка. В §8 smoke нет — составь и запиши туда. Цифры в HANDOFF должны совпадать с тем, что видно сейчас. Нашёл расхождение — исправь HANDOFF и назови его юзеру.
Шаг 3. Указатель в CLAUDE.md проекта
В CLAUDE.md в корне проекта должна быть строка (нет файла — создай, нет строки — допиши в конец):
Контекст проекта — в
HANDOFF.md: факты, ловушки, команды. Прочитай его перед нетривиальной работой и после сжатия контекста.
CLAUDE.md подгружается в каждую сессию и переживает сжатие, поэтому про HANDOFF знает любая сессия, даже без стартовой фразы. Но это инструкция, а не механизм: когда её выполнить, модель решает сама. А пересказ после сжатия выглядит полным, и перечитать HANDOFF легко забыть. Эту дыру закрывает шаг 4.
Шаг 4. Хук: напоминание сразу после сжатия
Хук — команда, которую Claude Code сам запускает по событию; её вывод попадает модели в контекст. Этот хук срабатывает после каждого сжатия, ручного и автоматического, и печатает одну строку — только в проектах, где есть HANDOFF.md. Больше он ничего не делает.
Сначала проверь, не стоит ли он уже: поищи HANDOFF.md в hooks.SessionStart в ~/.claude/settings.json и в .claude/settings.json проекта. Нашёл — пропусти шаг. Нет — добавь в ~/.claude/settings.json: ставится один раз на компьютер и дальше работает во всех проектах.
{
"hooks": {
"SessionStart": [
{
"matcher": "compact",
"hooks": [
{
"type": "command",
"command": "f=\"${CLAUDE_PROJECT_DIR:-$PWD}/HANDOFF.md\"; if [ -f \"$f\" ]; then echo \"Контекст только что сжат: в пересказе теряются точные цифры, команды и ловушки. Прежде чем продолжать работу, прочитай $f целиком.\"; fi",
"timeout": 5
}
]
}
]
}
}
- Файл уже есть — добавь элемент с
"matcher": "compact"в массивhooks.SessionStart(массива нет — создай), всё остальное оставь как было: чужие хуки и настройки должны уцелеть. Файла нет — создай с этим блоком. - Проверь: JSON валиден (например,
jq . ~/.claude/settings.json); команда, запущенная в корне проекта, печатает напоминание с путём к HANDOFF, а в папке без HANDOFF — ничего. Команда написана для sh: macOS, Linux, Windows с Git Bash. - Нужно в облачных сессиях или всей команде — положи тот же блок в
.claude/settings.jsonпроекта и закоммить. Одинаковый хук из двух файлов срабатывает один раз. - Весь HANDOFF хуком не выводи: вывод хука ограничен 10 000 символов, сверх лимита в контекст попадает только превью.
Шаг 5. Коммит
Проект в git — закоммить одним коммитом всё, что поменялось: HANDOFF.md, CLAUDE.md и .claude/settings.json, если хук ставил в проект. Ничего не поменялось — не коммить.
Шаг 6. Продолжаем здесь или новый чат
Новый чат нужен только при одном из сигналов:
- сессия сломалась или зависла: повторяются ошибки API, инструменты перестали отвечать;
- после нескольких сжатий упало качество: переспрашиваешь решённое, путаешь решения, противоречишь HANDOFF;
- дальше другая, несвязанная задача — старая история станет шумом (в этом же чате то же даёт
/clear); - юзер сам просит переехать.
Сигнала нет — так и скажи: «продолжаем здесь». Заполненный контекст сам по себе не сигнал.
Шаблон HANDOFF.md
# <Имя проекта> — Handoff
> Читай это прежде чем что-то трогать: где мы, куда дальше, что нельзя.
> Обновляй точечно: цифры — только проверенные, ловушки — в конец §7, значений секретов не писать.
## 1. Что это
## 2. Стек
## 3. Цифры
## 4. Структура файлов
## 5. Токены / конвенции
## 6. Реализованные фичи
## 7. Что НЕ сделано + ловушки
## 8. Команды
## 9. Стиль общения
## 10. Что делать на старте новой сессии
---
**Последнее обновление:** <дата> · итерация <N> · <суть>
## История итераций
- **Iter 1:** что сделано, метрики
Размер — 300-500 строк. Меньше — не хватит, больше — тащишь шум. Перевалил за 500 — сожми старые строки истории, ловушки не трогай.
Что писать в секциях
- Что это — 1-2 предложения: кто юзер, что строим, главная ценность. Для новичка, не для тебя.
- Стек — точные версии и breaking changes против общего знания («это не тот Next.js, что в твоих данных»).
- Цифры — таблица «сколько чего сейчас»: страницы, записи, юзеры. Якорь масштаба, который новая сессия сверит с реальностью.
- Структура файлов — только важное и зачем каждая папка. Не
ls -R. - Токены / конвенции — цвета, шрифты, размеры, правила, которые нарушать НЕЛЬЗЯ.
- Реализованные фичи — ✓ список, метрики до/после, ссылки на прод.
- Что НЕ сделано + ловушки — open items с почему (что блокирует), закрытые —
зачёркнуты. Ловушки — нумерованный список «симптом → причина → как не повторить», например: «smoke зелёный, а сайт лежит → health-URL отдаёт nginx, а не приложение → проверять реальные страницы». Это самое ценное в HANDOFF. - Команды — готовые к копированию: dev, build, type-check, деплой, откат. Smoke, которому можно верить: для сервиса — 2-3 реальные страницы + API со сверкой числа из §3 + статус процесса (
pm2 describe <имя>,systemctl status,docker ps); для библиотеки или CLI — тесты и сборка. Один health-URL не годится: прокси отдаёт его и при мёртвом приложении. - Стиль общения — язык и tone; что юзер любит и не любит; какие skills использует; красные линии — что не трогать без согласия. Обязательная строка: «Субагентов — Agent/Task, параллельных агентов, воркфлоу и skills, которые их запускают, — не запускать без явной просьбы юзера. По умолчанию работать самому». Юзер в этом чате разрешил иначе — запиши его формулировку дословно.
- Старт новой сессии — прочитать HANDOFF целиком;
git status+git log --oneline -5(изменения после даты HANDOFF назвать первыми); smoke по §8 и сверка цифр из §3; отчёт «расхождения → что понял → готов делать X»; не переделывать то, что помечено «не трогать без согласия».
Стартовая фраза — только если нужен новый чат
Дай её заполненной, без плейсхолдеров:
Продолжаю проект «<имя>» в новом чате.
Локально: <путь>
Прод: <URL>
Контекст: HANDOFF.md (обновлён <дата>, итерация <N>)
1. Прочитай HANDOFF.md целиком.
2. git status и git log: изменения после даты HANDOFF назови первыми.
3. Smoke по HANDOFF §8: реальные страницы, API, статус процесса.
4. Коротко (≤ 200 слов): расхождения HANDOFF с реальностью, потом что заметил.
5. Предложи план следующей итерации.
Стиль — HANDOFF §9. Субагентов без моей просьбы не запускай, работай сам.
Ответ юзеру
- Что изменилось в HANDOFF — 2-4 пункта; расхождения с реальностью, если были. Ничего не менял — так и скажи: «HANDOFF актуален».
- Smoke — итог одной строкой.
- Указатель и хук — одной строкой: добавлены или уже были. Хук поставил впервые — предложи проверку:
/compact, и первым действием модель должна прочитать HANDOFF. - Вердикт: «продолжаем здесь» или «нужен новый чат, потому что <сигнал>» + стартовая фраза.
Anti-patterns
- ❌ Переезжать только потому, что контекст заполнен. Автокомпакт продолжит сессию.
- ❌ Откладывать до последнего. После сжатия детали уже потеряны — сохранять надо раньше, в конце итерации.
- ❌ Переписывать существующий HANDOFF с нуля. Пропадут ловушки и договорённости прошлых сессий.
- ❌ Перезаписывать
settings.jsonцеликом. Пропадут чужие хуки и настройки — только дописать элемент в массив. - ❌ Дамп чата или копия кода. HANDOFF — дистиллят: решения, причины, контекст, то, чего нет в коде. Не транскрипт и не полные тексты файлов.
- ❌ Секреты в тексте. Путь к
.env— можно, значения ключей и паролей — никогда: HANDOFF коммитится и попадает в чаты. - ❌ Health-URL как единственный smoke.
- ❌ «Возможно», «кажется». Только проверенные факты.
- ❌ Скрывать факапы. Что не сработало — это ловушки §7, самое ценное для следующей сессии.
Как начать работать с Claude Code — мой первый раз
Пошаговая инструкция первого запуска: открыть, дать первое задание, что увидеть на экране, куда нажать.
Установи Claude Code пошагово — Mac / Windows / Linux
От «вообще ничего не понимаю» до «первая команда сработала». С скрин-описаниями и проверками что всё ок.
Документация компонента
Документация по компоненту: API, варианты, состояния, доступность, использование.