harnsy

После перезагрузки: как вернуть не один терминал, а всю команду агентов

Перезагрузка опустошает терминалы, но это самая лёгкая часть: плагины возвращают панели, а всё больше инструментов возвращают и сессию. Чего не возвращает ни один из инструментов, о которых мы читали, — это команду: кто какую роль держит, кто кому подчиняется, какая задача в работе, что уже было сказано. Что умирает при перезапуске, что закрывают инструменты, что harnsy хранит в своей базе и какие есть пределы, в том числе те, что мы не проверяли.

12 мин чтенияPavel Buchnev

Главное

27
агентов (24 Claude и 3 Codex) разом остались с голой оболочкой в публичном обсуждении от 28 сентября 2026 года; причиной там был убитый лаунчер, а не перезагрузка
около 15 мин
сколько понадобилось агенту в том обсуждении, чтобы считать id сессий с экрана и заново набрать команды resume
3
вещи, которые нужны перезапущенной команде: сессии, кто какую роль держит и сама работа. harnsy хранит последние две в своей базе, а первую — как запомненную сессию за каждым местом
В этой статье
  1. Что на самом деле убивает перезагрузка
  2. Вручную и скриптом
  3. Инструменты, которые помнят id сессий
  4. То, что не панель: команда
  5. Как команду хранит harnsy
  6. Пределы в одном месте
  7. Чек-лист для любой настройки
  8. Источники

Что на самом деле убивает перезагрузка

Начнём с того, что остаётся. Запись разговора Claude Code — это файл на диске: JSONL-файл в ~/.claude/projects/, по одному на сессию, с id сессии в имени. Codex хранит свои сессии в ~/.codex/sessions/. Перезагрузка эти файлы не трогает. Трогает время: в статье на dev.to от 29 сентября 2026 года упомянута 30-дневная очистка старых записей Claude Code.

Уходит процесс. В заметке Quil (14 июня 2026 года) это сказано прямо: запись остаётся на диске, но сессия «привязана к запущенному процессу claude». Остановите процесс, и к файлу само ничего не подключится (цитата в нашем переводе).

Сам по себе tmux этот разрыв не закрывает. Когда tmux перезапускается (перезагрузка, сбой, tmux kill-server), tmux-resurrect и tmux-continuum возвращают окна, панели и папки, но, как сказано в заметке про tmux-assistant-resurrect от февраля 2026 года, «ИИ-сессии, которые шли внутри них, пропали». Quil пишет о тех же плагинах, что возвращается «форма рабочего места, а не идущая работа». В обсуждении Claude Code от 16 марта 2026 года это стало просьбой: «нет способа восстановить сессии Claude после перезагрузки системы или tmux kill-server», потому что id сессии нельзя было прочитать снаружи процесса. Его закрыли как дубликат, а обходной путь — ручные команды из следующего раздела (цитаты в нашем переводе).

Дело не только в перезагрузках. В открытом обсуждении в трекере cmux от 28 сентября 2026 года процесс, под которым работали агенты, получил SIGTERM, и, по словам автора, «каждый терминал агента разом падает в голую оболочку»: 24 сессии Claude и 3 сессии Codex в одном окне. Их восстановление «заняло у агента около 15 минут разбора экрана»: прочитать на каждом экране id сессии, проверить, что там не осталось живого агента, набрать команду resume обратно. Это был убитый лаунчер, а не перезагрузка, но состояние, в котором вы остаётесь, то же, что после перезагрузки (цитаты в нашем переводе).

Вручную и скриптом

Для одной сессии починка — одна строка. В папке проекта claude --continue открывает самую свежую сессию Claude Code, а codex resume --last делает то же для Codex. Обе, как сказано в статье на dev.to, берут самую свежую сессию из текущей папки. claude --resume и codex resume --all показывают выбор по всем проектам.

Для нескольких сессий та же статья предлагает небольшой скрипт на jq. Он читает папки с записями обоих инструментов и печатает для каждой из десяти последних сессий строку cd … && claude --resume <id> (или аналог codex resume <id>), а строки запускаете вы.

Это дёшево, честно и хватает на три сессии. Цена проявляется на десятой: минуты вашего времени и память о том, какая папка была за какое дело. И заметьте, чего скрипт знать не может. Он перечисляет разговоры. Он не знает, какой из них был лидом, какой — ревьюером и чего кто ждал.

Инструменты, которые помнят id сессий

Именно этот разрыв закрывает группа небольших инструментов. Они хранят id сессий рядом с панелями и возобновляют их за вас. Мы читали их собственные страницы и обсуждения, но не запускали их, так что дальше — то, что они говорят о себе.

  • tmux-assistant-resurrect. В заметке автора (16 февраля 2026 года) сказано, что он сохраняет раскладку панелей, находит работающих ассистентов по процессам, берёт их id сессий через родные хуки или плагины и при восстановлении возобновляет каждый разговор: Claude Code, OpenCode и Codex. Там же прямо сказано о зрелости: сделан за выходные, «пока мало реального использования. Ожидайте шероховатостей» (цитата в нашем переводе).
  • Quil, терминальный мультиплексор. Он регистрирует хук SessionStart для каждой панели Claude Code и записывает текущий id сессии при каждой смене; сессии OpenCode отслеживаются так же. После перезагрузки он возвращает панели на записанных id.
ПодходПанели и раскладкаРазговор (сессия)Роли и подчинениеЗадачиЖурнал сообщений
Один tmuxвам остаётся: всё рукаминетнетнетнетнет
tmux-resurrectвам остаётся: возобновить каждый разговорданетнетнетнет
claude --resume / codex resume вручнуювам остаётся: найти id и папку, набратьнетданетнетнет
Скрипт на jq по записямвам остаётся: запустить строки, открыть панелинетчастичнонетнетнет
Плагины с id сессий (tmux-assistant-resurrect, Quil)вам остаётся: роли, задачи, сообщениядаданетнетнет
Agent teams в Claude Codeвам остаётся: заново создать участниковне указаночастичнонетне указаноне указано
harnsyвам остаётся: повторить сообщения, которые не дошли, пока агент был недоступенчастичнодададада
  • Один tmuxвам остаётся: всё руками
    Панели и раскладка
    нет
    Разговор (сессия)
    нет
    Роли и подчинение
    нет
    Задачи
    нет
    Журнал сообщений
    нет
  • tmux-resurrectвам остаётся: возобновить каждый разговор
    Панели и раскладка
    да
    Разговор (сессия)
    нет
    Роли и подчинение
    нет
    Задачи
    нет
    Журнал сообщений
    нет
  • claude --resume / codex resume вручнуювам остаётся: найти id и папку, набрать
    Панели и раскладка
    нет
    Разговор (сессия)
    да
    Роли и подчинение
    нет
    Задачи
    нет
    Журнал сообщений
    нет
  • Скрипт на jq по записямвам остаётся: запустить строки, открыть панели
    Панели и раскладка
    нет
    Разговор (сессия)
    частично
    Роли и подчинение
    нет
    Задачи
    нет
    Журнал сообщений
    нет
  • Плагины с id сессий (tmux-assistant-resurrect, Quil)вам остаётся: роли, задачи, сообщения
    Панели и раскладка
    да
    Разговор (сессия)
    да
    Роли и подчинение
    нет
    Задачи
    нет
    Журнал сообщений
    нет
  • Agent teams в Claude Codeвам остаётся: заново создать участников
    Панели и раскладка
    не указано
    Разговор (сессия)
    частично
    Роли и подчинение
    нет
    Задачи
    не указано
    Журнал сообщений
    не указано
  • harnsyвам остаётся: повторить сообщения, которые не дошли, пока агент был недоступен
    Панели и раскладка
    частично
    Разговор (сессия)
    да
    Роли и подчинение
    да
    Задачи
    да
    Журнал сообщений
    да
Что возвращает каждый подход после перезагрузки, по документации и обсуждениям самих инструментов, прочитанным 30 сентября 2026 года. Другие инструменты мы не запускали.

Эти инструменты хорошо решают часть про сессии, и если вы держите несколько агентов в tmux, вам может хватить только их. Но обратите внимание, что входит в их задачу: панели и разговоры. Роль, линия подчинения, задача в работе и последние сообщения — это то, о чём терминал ничего не знает. В таблице последняя строка — собственное утверждение harnsy, и у панелей она отмечена «частично» не случайно: он открывает агентов заново в своём tmux, а не в вашей прежней раскладке.

То, что не панель: команда

Спросите себя о вашей последней перезагрузке. Помнили ли вы, кто кому подчинялся, какая задача была на проверке, какими были последние сообщения? Прямо об этом мы ни у кого не нашли, так что читайте этот раздел как наблюдение от работы с агентами в ролях, а не как обзор жалоб.

Ближайший сосед — собственные agent teams в Claude Code, и его документация откровенна. В разделе Limitations: «Agent teams are experimental» и «No session resumption with in-process teammates: /resume и /rewind не восстанавливают участников внутри процесса. После возобновления сессии лид может попытаться написать участникам, которых уже нет. Если так случилось, скажите лиду создать новых участников» (цитата в нашем переводе; в оригинале — на английском).

Публичное обсуждение просило того же на уровне состояния. Его автор (12 марта 2026 года) пишет, что папки команд и задач в ~/.claude/ опустошаются при следующем старте сессии, и просит, чтобы команду, созданную в одной сессии, можно было продолжить в следующей. Его закрыли как «not planned». Мы читали само обсуждение, а не причины, и функция с пометкой experimental меняется; считайте это отчётом с датой.

Это другая конструкция, не наша (участники внутри одной сессии, а не отдельные терминалы), так что про harnsy оно говорит мало. Зато показывает, где лежит разрыв. После перезапуска должны вернуться три вещи, и возобновлённый разговор — только первая:

  • Сессии: каждый агент снова в том разговоре, в котором был.
  • Связи: какую роль держит каждый агент и кто кому подчиняется.
  • Работа: задачи в процессе и запись того, что было сказано.

Как команду хранит harnsy

В harnsy роль — постоянная должность, а агент сидит на месте. Место помнит сессию, которую держит, и все прежние: id сессии Claude Code, id OpenCode вида ses … или id треда Codex, а также папку и настройки запуска. Роль без живого держателя показана как «не в сети».

Роли, места, задачи и журнал сообщений живут в собственной базе harnsy, а не в терминале. Они просто на месте, когда машина вернулась, если узел harnsy снова запущен; запускается ли он сам при загрузке, мы не проверяли.

Восстановление — кнопка на вкладке «Команды», для каждой команды: «вернуть отключившихся». Она видна, только пока какая-то роль не в сети. Она возобновляет текущую сессию места в его папке родным resume того харнеса: claude --name <ref> --resume <id> для Claude Code, codex resume <id> для Codex и записанную сессию для OpenCode. То же доступно из командной строки, harnsy debug team restore, а для агента — как инструмент MCP harnsy restore. Это не недавнее добавление. Одну сессию она никогда не открывает дважды: роль, которая уже работает, пропускается, как и роль, которую никто не держит.

После перезагрузки

acme-shop6 ролей~/work/acme-shopотключились: 5свободны: 1
  • лидacme-leadclaude · 7f3a9c21нет связине в сети
  • бэкендacme-backcodex · 019a4e2bнет связине в сети
  • фронтендacme-frontclaude · c41d0e88нет связине в сети
  • ревьюерacme-reviewopencode · ses_4kq2нет связине в сети
  • тестировщикacme-testcodex · 5be1a7f0нет связине в сети
  • документацияникто не держитвакансия
вернуть отключившихсяоткроет прежние сессии тех, кто отключился

После «вернуть отключившихся»

acme-shop6 ролей~/work/acme-shopна связи: 5свободны: 1
  • лидacme-leadclaude · 7f3a9c21простаиваетв сети
  • бэкендacme-backcodex · 019a4e2bпростаиваетв сети
  • фронтендacme-frontclaude · c41d0e88простаиваетв сети
  • ревьюерacme-reviewopencode · ses_4kq2простаиваетв сети
  • тестировщикacme-testcodex · 5be1a7f0простаиваетв сети
  • документацияникто не держитвакансия
Пример команды на вкладке «Команды» после перезагрузки и после «вернуть отключившихся»: те же роли на тех же сессиях; вакантная роль остаётся вакантной. Собрано по дашборду (v0.7.0).

Посмотрите на две карточки: id сессий одинаковые. Суть не в том, что агенты запускаются заново, а в том, что они запускаются на тех разговорах, в которых были, в тех ролях, что держали, а доска задач и журнал сообщений на месте. Дальше вы делаете то же, что после любого перерыва: смотрите, что было в работе.

Восстановление можно увидеть самому: установите harnsy, откройте команду, в тихий день остановите её агентов и нажмите «вернуть отключившихся».

Пределы в одном месте

Сначала — что остаётся после перезагрузки и что нет:

Лежит в базе harnsy — на месте после перезагрузки

  • команды и роли
  • кто держит каждое место и id его сессии
  • папка и настройки запуска каждой роли
  • журнал сообщений
  • доска задач

Уходит с перезагрузкой

  • работающие процессы, терминальные панели и сервер tmux — harnsy открывает агентов заново
  • ход, который агент не закончил — попросите продолжить
  • сообщения агенту, пока он был недоступен — они не дошли; отправьте их заново

Нужен tmux (Linux, macOS). Агенты, посаженные на роль (OpenCode: только запущенные harnsy).

Что восстановление сохраняет и что нет, по собственным продуктовым заметкам harnsy.

И пределы, которых нет в этом списке:

  • Записанной проверки после настоящей перезагрузки у нас нет. Это замысел, а не замер отключения питания.
  • Сообщение локальному агенту, который недоступен, не доходит сразу и записывается как не доставленное. harnsy его не повторяет. Если это исполнитель задачи, лид получает уведомление о недоставленном.
  • Работает с tmux версии 3.1 или новее на Linux и macOS, где harnsy запускает собственный сервер tmux. Поддержка Windows появилась в harnsy 0.8.0 и ещё проверяется.
  • Он обходит роли, на которых сидит агент, в Claude Code, Codex и OpenCode: агент Claude Code или Codex, запущенный вами вручную и посаженный на роль, тоже возвращается. У OpenCode предел: только агенты, которых запустил harnsy. Место без записанного id сессии восстановить нельзя.
  • Мы не проверяли, что делает восстановление, когда записи разговора уже нет, например после очистки.
  • Одну сессию он никогда не открывает дважды, с одним слепым пятном: простаивающий терминал Codex, молчащий дольше 30 секунд, может показаться отсутствующим и открыться повторно.
  • Число одновременно работающих агентов ограничено редакцией. Команду, которая не помещается, restore отклоняет целиком, а не возвращает частично. Сколько агентов возвращается разом, мы не называем: этого мы не измеряли.
  • Если возобновлённый агент Claude Code регистрируется под другим именем, его роль остаётся не в сети, пока агента снова не посадят на место.
  • Не освобождайте агента, который просто отключился: освобождение теряет id сессии, нужный восстановлению.

Чек-лист для любой настройки

Ничто из этого не требует harnsy. Если вы держите больше пары агентов, это подходит к любому инструменту:

  • Давайте имя каждой сессии, чтобы список id что-то значил.
  • Храните записи разговоров. Если вы на них полагаетесь, узнайте, сколько ваш инструмент их держит, и увеличьте срок.
  • Перед плановой остановкой пишите записку о передаче дел, как перед отпуском. Что в неё входит, показывает статья «ИИ-сотрудники: работает не „персонаж“, а рабочее место».
  • Держите список ролей и задач вне терминалов: в файле или на доске, а не в разговоре.
  • Заведите одну команду, которая перечисляет, что должно работать, чтобы сравнить это с тем, что работает.
  • Проверьте восстановление, пока оно не нужно: остановите всё в тихий день и посмотрите, что вернулось.

Источники

  • cmux, «Recover every agent session that dropped at once», 28 сентября 2026: github.com.
  • Claude Code, agent teams, раздел Limitations: code.claude.com.
  • Обсуждение Claude Code о состоянии agent teams, 12 марта 2026: github.com.
  • Обсуждение Claude Code об id сессии и восстановлении терминала, 16 марта 2026: github.com.
  • «How to pick up Claude Code and Codex sessions after a restart», dev.to, 29 сентября 2026: dev.to.
  • «Never Lose an AI Coding Session Again», 16 февраля 2026: timvw.be.
  • «Resume Claude Code Sessions After a Reboot, Automatically», Quil, 14 июня 2026: quil.cc.

Верните команду, а не одну панель

harnsy хранит роли, места, задачи и журнал сообщений в своей базе и открывает каждую отключившуюся роль на её последней сессии.

Установить harnsy
site-3fлид · Claude Codeна связитолько смотреть
❯ Распланируй #42 с командой.

Жду разбор от analyst-7a…

от analyst-7a через harnsy❯ #42 разобрана: три критерия приёмки, включая повтор через 24 ч.

Передаю #42 разработчику site-9a.

❯