Рабочие пространства и терминал

Сохранение и восстановление раскладок

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

purplemux построен на идее, что закрытие вкладки в браузере не должно завершать сессию. Работают вместе две вещи: tmux держит шеллы запущенными, а ~/.purplemux/workspaces.json помнит раскладку.

Что сохраняется

Всё, что вы видите в рабочем пространстве:

  • Вкладки и их порядок
  • Разделения панелей и их пропорции
  • Тип панели каждой вкладки — Terminal, Claude, Diff, Web browser
  • Рабочий каталог каждого шелла
  • Группы рабочих пространств, имена и порядок

workspaces.json транзакционно обновляется при каждом изменении раскладки, поэтому файл всегда отражает текущее состояние. Карта файлов на диске — в Каталоге данных.

Закрытие браузера

Закройте вкладку, обновите страницу, захлопните ноутбук. Ничто из этого не убивает сессии.

Каждый шелл живёт в tmux-сессии на отдельном сокете purple — полностью изолированном от вашего личного ~/.tmux.conf. Откройте http://localhost:8022 через час, и WebSocket переподключится к той же tmux-сессии, переиграет scrollback и передаст живой PTY обратно в xterm.js.

Вы ничего не восстанавливаете — вы переподключаетесь.

И на телефоне тоже
То же относится и к смартфону. Закройте PWA, заблокируйте устройство, вернитесь завтра — панель переподключится, и всё будет на месте.

Восстановление после перезагрузки сервера

Перезагрузка убивает процессы tmux — это просто процессы ОС. purplemux обрабатывает это при следующем старте:

  1. Прочитать раскладкуworkspaces.json описывает каждое рабочее пространство, панель и вкладку.
  2. Параллельно пересоздать сессии — для каждой вкладки запускается новая tmux-сессия в её сохранённом рабочем каталоге.
  3. Авто-возобновление Claude — вкладки, в которых работала сессия Claude, перезапускаются с claude --resume {sessionId}, чтобы беседа продолжилась с того же места.

Слово «параллельно» здесь принципиально: если у вас десять вкладок, все десять tmux-сессий поднимаются одновременно, а не одна за другой. К моменту, когда вы откроете браузер, раскладка уже на месте.

Что не возвращается

Несколько вещей сохранить нельзя:

  • Состояние шелла в памяти — переменные окружения, фоновые задачи, REPL посреди мысли.
  • Запросы разрешений в полёте — если Claude ждал решения по разрешению в момент гибели сервера, после восстановления вы увидите тот же запрос снова.
  • Передние процессы кроме claude — буферы vim, htop, docker logs -f. Шелл вернётся в тот же каталог; процесс — нет.

Это стандартный контракт tmux: шелл выживает, процессы внутри — не обязательно.

Ручное управление

Обычно трогать ничего не нужно, но для любопытных:

  • tmux-сокет называется purple. Посмотреть: tmux -L purple ls.
  • Сессии именуются pt-{workspaceId}-{paneId}-{tabId}.
  • Редактировать workspaces.json при работающем purplemux небезопасно — сервер держит его открытым и пишет в него.

Глубже (бинарный протокол, backpressure, наблюдение за JSONL) — в разделе Как это работает на главной.

Что дальше