Удалённое рабочее пространство
О связях машин по SSH см. Удалённая связь.
Remote Workspace позволяет запустить агентов разработки на одном OpenCodex Hub, а файлы проекта, команды, тесты и вычисления для сборки предоставить с другого компьютера. Телефон или третий компьютер могут управлять сессией через дашборд Hub.
Phone browser -> Computer 1 OCX Hub -> encrypted channel -> Computer 2 OCX Executor Codex / Claude / Pi project and commands logins and sessions no coding CLI loginExecutor нужен только OpenCodex. Ему не нужны Codex, Claude Code, Pi, вход в ChatGPT или API-ключ провайдера. Он открывает исходящее соединение WebSocket с Hub, поэтому публичный порт и перенаправление порта роутера для Executor не требуются.
Настройка Hub
Заголовок раздела «Настройка Hub»На компьютере 1 находятся все входы агентов разработки и сессии моделей. Установите нужных агентов, войдите в них и запустите OpenCodex в роли Hub:
ocx config set runtimeRole hubOCX_REMOTE_WORKSPACE_ENABLED=1 ocx startocx guiЗадайте OCX_REMOTE_WORKSPACE_ENABLED=1 именно процессу Hub: установка только для
команды дашборда не включит уже работающий сервис. Если Hub не получил явное
согласие на включение, он сообщает об отключённом состоянии, не создавая ключи
рабочих пространств и не проверяя runtime агентов разработки.
Открывая дашборд с телефона или другого компьютера, используйте развёртывание с аутентификацией и HTTPS. Поддерживаемая схема входа в управление и Tailscale описана в Развёртывании удалённого Hub. Не публикуйте локальный порт дашборда без аутентификации.
Remote Workspace для Codex использует текущие профили разрешений App Server.
Если выбранная на Hub конфигурация Codex всё ещё задаёт прежние sandbox_mode
или sandbox_workspace_write, дашборд покажет Codex как недоступный, а не
запустит его с более слабой границей. Перед использованием перенесите профиль
Codex на новую схему; не задавайте одновременно старую песочницу и профиль разрешений.
Сопряжение Executor
Заголовок раздела «Сопряжение Executor»- Откройте Remote Workspace в дашборде Hub.
- Выберите Create pairing code.
- На компьютере 2 перейдите в каталог проекта, который хотите открыть.
- Скопируйте команду Linux / macOS terminal или Windows PowerShell для этого
компьютера. Она свяжет текущий каталог и будет держать
ocx remote-workspace agentподключённым в этом терминале.
Эквивалентная ручная последовательность:
cd /path/to/projectprintf '%s\n' 'ONE-TIME-CODE' | ocx remote-workspace pair 'https://your-hub.example' \ --pairing-code-stdin --root "$PWD"ocx remote-workspace agentНа Windows PowerShell используйте команду из дашборда. Её ручной эквивалент:
$pairingCode = 'ONE-TIME-CODE'$pairingCode | ocx remote-workspace pair 'https://your-hub.example' ` --pairing-code-stdin --root (Get-Location).Pathif ($LASTEXITCODE -eq 0) { ocx remote-workspace agent }Текущий исполняемый файл OCX Bun автоматически добавляется в песочницу Linux как один файл только для чтения. Если проекту нужен установленный пользователем набор инструментов вне системных путей, явно укажите его при сопряжении, не открывая весь домашний каталог:
printf '%s\n' 'ONE-TIME-CODE' | ocx remote-workspace pair 'https://your-hub.example' \ --pairing-code-stdin --root "$PWD" \ --toolchain-root "$HOME/.nvm/versions/node/v24/bin"Исходный код нативного помощника поставляется для проверки. Его сборка не
включает команды Windows или macOS в этой версии. --executor-helper остаётся
селектором проверенного помощника: наличие бинарного файла или заданный путь
сами по себе не доказывают поддержку команд.
Одноразовый код читается из стандартного ввода, а не из аргументов командной строки. При сопряжении создаются локальный ключ подписи устройства и bearer, ограниченный этим устройством. Hub хранит только его хеш и никогда не получает реальный путь Executor. Остановите агент на переднем плане сочетанием Ctrl+C; повторный запуск подключит то же устройство.
Проверьте локальную регистрацию, не выводя секреты:
ocx remote-workspace statusЗапуск удалённой сессии разработки
Заголовок раздела «Запуск удалённой сессии разработки»В дашборде выберите:
- компьютер в сети;
- одну локально разрешённую папку рабочего пространства;
- Codex, Claude Code или Pi на Hub;
- режим доступа.
По умолчанию выбран Read only: доступны список каталогов и чтение файлов. Вариант записи отображается как Edit files and run commands, только если Executor прошёл проверку песочницы команд; иначе — как Edit files only. Дашборд отдельно показывает два расположения: модель и вход остаются на Hub, а действия с рабочим пространством выполняются на выбранном компьютере.
Отправляйте запросы через дашборд Hub с компьютера 1, компьютера 3 или телефона. Сессия не может незаметно перейти на другой компьютер или папку. При отключении Executor она переходит в состояние Executor offline и никогда не переключается на файловую систему Hub.
Отправка запроса сразу подтверждает его принятие; дашборд опрашивает сессию о ходе работы и завершении. Если подтверждение потеряно, черновик остаётся видимым с уведомлением о неизвестном результате отправки. Прежде чем посылать запрос снова, проверьте ход сессии: дашборд не повторяет отправку автоматически.
Stop доступна во время выполнения запроса. Она прерывает ход агента на Hub, отменяет активную команду Executor и не позволяет запоздалому ответу снова открыть остановленную сессию.
Перезапуск и повторное подключение
Заголовок раздела «Перезапуск и повторное подключение»Hub сохраняет ограниченные метаданные сессии и небольшой снимок недавних событий. После перезапуска Hub незавершённая сессия ждёт прежний Executor. Когда устройство подключится вновь, следующий запрос продолжит исходный поток Codex, сессию Claude Code или id сессии Pi.
Claude Code создаёт долговременную историю после первого завершённого запроса. Если Hub остановится до завершения какого-либо запроса в новой сессии Claude, возобновлять будет нечего: начните новую сессию.
Изменившийся манифест возможностей не ослабляет существующую сессию незаметно. Если Executor потерял изоляцию команд или изменился набор доступных инструментов, начните новую сессию. Отзыв компьютера закрывает его сокет и останавливает привязанные к нему сессии.
Границы безопасности
Заголовок раздела «Границы безопасности»- Учётные данные провайдеров и история агентов разработки остаются на Hub.
- Закрытые ключи Executor, bearer устройства и реальные корневые пути остаются в состоянии OCX, доступном только владельцу.
- Число ошибок кода сопряжения ограничивается для каждого наблюдаемого ядром
узла на любом слушателе. Десять неверных кодов за десять минут дают общий
ответ
429сRetry-After; Hub хранит лишь ограниченные по объёму и сроку хеши этих адресов. Пользователи Tailscale Serve делят loopback-корзину слушателя управления: прямой локальный клиент мог бы подделать заголовок адреса. - Каждая рабочая сессия использует временное согласование P-256 ECDH с подписью Ed25519 и упорядоченные сообщения AES-256-GCM.
- Сокет не показывается подключённым, пока стороны не согласуют текущий манифест возможностей.
- При повторном подключении возможность можно убрать, если локальная песочница недоступна, но нельзя добавить сверх разрешения, записанного при сопряжении.
- Каждый запрос привязан к одному потоку модели, устройству, корню, режиму доступа и набору возможностей.
- Пути относительны, приводятся к каноническому виду и ограничиваются; выход через символьную ссылку, junction или родительский каталог отклоняется. Запрещены имена устройств Windows, альтернативные потоки данных и псевдонимы с точкой или пробелом в конце.
- Операции Executor выполняются последовательно, идентичность открытых файлов проверяется повторно, а хеши записей — ещё раз непосредственно перед атомарной заменой. После замены разрешённого корня нужно повторное сопряжение; корни инструментов перепроверяются перед каждой командой.
- Чтение и запись файлов с жёсткими ссылками отклоняются. Перед выполнением команды OCX проверяет не более 250 000 элементов пространства и отключает команды, если у любого элемента кроме каталога несколько ссылок: песочница путей не докажет, что другое имя inode не находится вне разрешённого корня.
- На Linux команды выполняются через bubblewrap: одно доступное для записи пространство, очищенное окружение, отдельные пространства имён процессов, текущий исполняемый файл OCX Bun как один файл только для чтения, ограниченные вывод и время работы, сеть по умолчанию отключена. Отдельные тесты изоляции требуют явно настроенной размещённой среды; зелёный общий набор тестов не доказывает их выполнения.
- macOS объявляет только файловые инструменты. Группа процессов не может
удержать потомка после вызова
setsid(), а импорт широкого системного профиля Apple Seatbelt ради запуска команды открыл бы посторонние полномочия системных служб. Поэтому нативный помощник отклоняет и проверку, и прямые запросы команд, пока у OCX нет узкого, отзывного владельца изоляции потомков. - Нативные запросы команд Windows и macOS завершаются отказом. Тесты прямого отказа помощника следует отличать от доказательства работающей изоляции команд; приём команд на Windows остаётся открытым вопросом.
- Закреплённый нативный помощник должен находиться вне всех разрешённых для записи пространств. OCX проверяет это до объявления поддержки команд и непосредственно перед каждой командой, чтобы код пространства не смог заменить бинарный файл, обеспечивающий следующую песочницу.
- Остановка сессии отменяет активную команду Executor и очищает процесс модели на Hub и loopback-мост инструментов. Windows останавливает принадлежащее ей дерево процессов npm-обёртки, не оставляя дочерний Node; Linux и macOS принудительно останавливают CLI только после истечения времени штатной остановки.
Hub намеренно видит запросы и вывод модели, поскольку запускает агента разработки. Сквозное шифрование защищает данные Executor RPC. Сопряжённому Hub доверено выбирать разрешённые корни через аутентифицированный WSS; собственный разговор модели для него не скрыт.
Текущий объём возможностей
Заголовок раздела «Текущий объём возможностей»Remote Workspace не копирует и не синхронизирует учётные данные между компьютерами. Это отдельная функция от маршрутизации провайдеров Remote Hub и возможных будущих продуктов размещённых вычислений или Super Sync. Для выпуска в рабочую среду ещё требуются подписанная поставка помощника Windows, доказательство через нативный CI на точных бинарных файлах, независимая проверка сопровождающих и реальная приёмка на трёх компьютерах.
API принятия запроса
Заголовок раздела «API принятия запроса»POST /api/remote-workspace/sessions/:id/prompt возвращает HTTP 202 со снимком
принятой сессии. Её id и монотонный номер события определяют снимок принятия;
202 не означает завершения хода модели. Опрашивайте
GET /api/remote-workspace/sessions ради следующих событий и конечного
состояния. Повторное подключение и возобновление runtime остаются занятыми,
пока ход активен. При потере подтверждения факт принятия неизвестен, поэтому
клиенты должны опросить состояние, прежде чем решать, отправлять ли запрос снова.

