В прошлом посте мы сделали наблюдение про локальные ИИ-сессии для кода: они лежат на вашем диске и умирают вместе с машиной. История разговора, путь, которым вы пришли к решению, три альтернативы, брошенные по дороге, — всё заперто в локальных файлах на одном ноутбуке.
Сегодня мы это чиним. Синхронизация сессий с облаком соединяет локальный Claude Code с облаком Forge, превращая каждый ход каждой сессии в неизменяемый снимок, лежащий в git: его можно осмотреть, ответвить, продолжить в облаке и возобновить с любой машины.
Короче всего это звучит так: git для ваших разговоров с ИИ.
Ментальная модель: сессии, ветки, снимки
Три вложенных понятия — ровно так, как они описаны в проектном документе:
- Сессия — долгоживущая нить, привязанная к рабочему пространству (одному git-репозиторию). По одной сессии на задачу, над которой вы работаете.
- Ветка — линейная цепочка снимков внутри сессии. Когда вы откатываетесь и продолжаете иначе, создаётся новая ветка.
- Снимок — неизменяемая запись эффектов одного хода: журнал сообщений до этой точки, состояние рабочего пространства (как коммит git), ввод-вывод инструментов, параметры модели, стоимость. Только на добавление.
Если это похоже на git — так и задумано. Состояние рабочего пространства хранится коммитами в выделенных ветках forge/session/…, так что любой снимок можно просмотреть любым привычным git-инструментом, диффы и слияния уже есть, а дерево сессии — это git log --all --graph. Журналы разговоров лежат рядом в зашифрованном объектном хранилище, адресуемые по содержимому и дедуплицированные.
Что с этим можно делать
Каждый ход фиксируется — автоматически
Один раз выполните forge link. Команда аутентифицирует ваше устройство (подтверждение в браузере, обновляемый девайс-токен на 90 дней) и ставит лёгкие хуки в Claude Code. Дальше каждый локальный ход — промпт, ответ, вызовы инструментов, текущий SHA коммита, стоимость в токенах — синхронизируется в историю сессий вашей организации в фоне.
Хуки следуют одному жёсткому правилу: Claude Code никогда не должен блокироваться на хуке. Фиксация идёт в фоне со строгим таймаутом; если сеть отвалилась, данные копятся локально и сами доезжают с нарастающей паузой между попытками, когда связь вернётся. Работает офлайн и не требует присмотра.
Продолжить в облаке одним нажатием
Откройте дерево сессии в интерфейсе Forge, выберите любой снимок, наберите промпт и отправьте. Ход выполнится на сервере, в песочнице: воркер клонирует ваш репозиторий на коммите этого снимка, воспроизводит разговор, выполняет ход, коммитит результат и записывает новый снимок. Вывод стримится в интерфейс вживую.
Запустите тяжёлый рефакторинг с телефона, посмотрите, как он идёт, и заберите результат локально позже. Ваш ноутбук больше не обязан быть рантаймом.
Путешествие во времени и ветвление
Поскольку снимки неизменяемы и только добавляются, «отменить» наконец что-то значит и внутри ИИ-сессии. Выберите любой прошлый снимок и продолжите другим путём — Forge создаст новую ветку, оба пути останутся в истории, ничто не уничтожается. Сравните две попытки обычным git diff. Сливайте или переносите изменения между ними когда угодно.
Это та же логика event sourcing, что и у нашего рантайма LLMOS : храните полную историю — и исследование становится дешёвым.
Возобновить где угодно
| |
Forge скачивает дерево сессии, переключается на ветку сессии, вшивает облачные ходы в локальный транскрипт, и Claude Code подхватывает ровно там, где сессия остановилась: полный контекст разговора, правильное состояние рабочего пространства. Облачные ходы, случившиеся в ваше отсутствие, вшиваются автоматически при следующем старте; синхронизация двусторонняя и непрерывная.
Контур от начала до конца
flowchart TD
L[Claude Code · локально] -->|"каждый ход: транскрипт + SHA коммита"| S[("Сессии Forge
снимки = коммиты git")]
S -->|"«Продолжить в облаке»"| C[Ход в облачной песочнице]
C -->|"новый снимок, стрим вживую"| S
S -->|"выбрать любой снимок"| B[Откат / ветвление]
B -->|"новая ветка в дереве"| S
S -->|"cloud-pull + resume"| M[Claude Code · любая машина]
M -->|"продолжает синхронизироваться"| S
classDef endpoint fill:#0a1a33,stroke:#22d3ee,stroke-width:2px,color:#67e8f9;
class L,M endpoint;А что с моими данными?
Транскрипты сессий могут содержать всё, что вы туда вставили, поэтому хранение мы с первого дня считали задачей безопасности: шифрование при передаче везде, шифрование при хранении и KMS-ключ на организацию — так что, когда организация просит удаление, уничтожение ключа делает нечитаемым каждый блоб. Срок хранения по умолчанию 30 дней для архивных сессий и настраивается на организацию. Для точечного удаления есть forge session forget <id>. И то, что выгружается, задано явно: транскрипт, SHA коммита, статистика запуска — никогда ваше рабочее дерево или окружение.
И секреты вообще не попадают в транскрипт
Облачным ходам часто нужны учётные данные — деплой-ключ, URL базы, токен API. Наша модель угроз говорит об этом прямо: LLM-агент считается самым недоверенным компонентом на пути запроса — всё, что он может назвать открытым текстом, он может выдать в транскрипт, в тело коммита или в ответ модели. Поэтому мы проектировали в расчёте на утечку. Секреты лежат зашифрованными на организацию и выдаются агентам только через ограниченные MCP-инструменты: secret_list возвращает метаданные, но не значения; доступ выдаётся по списку, отдельно каждому персонажу; а защищённый путь curl подставляет плейсхолдеры {{alias}} на исходящем прокси, вне адресного пространства агента, — открытый текст не попадает в контекст агента и, значит, не может попасть в синхронизированный снимок. Каждое обращение оставляет запись в аудите, но без открытого текста (алиас плюс солёный хеш, никогда значение), а сканер вывода ловит на выходе строки, похожие на учётные данные. Сессии, которые вы синхронизируете, — это разговоры, а не ключевой материал.
С чего начать
CLI forge — это один бинарник под вашу платформу: ставится так же, как sc
, и ничего доустанавливать не нужно. Как только он в вашем PATH:
| |
Дальше откройте раздел Sessions в панели Forge: ваша сессия появится с обновлениями по каждому ходу вживую, и каждый снимок — точка, от которой можно ответвиться или продолжить в облаке. Если хочется синхронизировать явно, а не хуками, forge sync отправляет текущее локальное состояние сессии одним махом — это жест «я закончил локально, передаю в облако».
Одно практическое замечание: облачный ход видит ваш репозиторий на коммите снимка, так что закоммитьте (и запушьте) то, поверх чего должен работать облачный воркер.
Что дальше
Дерево снимков — фундамент для того, что будет дальше: более живое взаимодействие прямо посреди облачного хода и живые совместные сессии для парной работы — обе вещи в роадмапе. И это складывается со всем остальным, что делает Forge: та же машинерия сессий, что стоит за вашей одиночной работой в Claude Code, стоит и за запусками процессов , с тем же аудиторским следом в основе.
И ещё одно, в духе работы на виду
: заглавная картинка к этому посту сгенерирована через наш собственный ИИ-шлюз — тем же обобщённым API /v1/generations, которым пользуются агенты Forge. Вы просите изображение; шлюз сам выбирает провайдера за общим слоем авторизации и хранения (сегодня Gemini, завтра сменный — в этом и смысл шлюза). Мы пользуемся собственным стеком целиком.
Синхронизация сессий с облаком раскатывается прямо сейчас. Если ваши ИИ-сессии стоят того, чтобы их хранить, перестаньте хранить их на одном ноутбуке — попробуйте Forge или напишите нам на support@simple-container.com .