Перейти до основного вмісту

OpenShell

OpenShell — це керований бекенд sandbox для OpenClaw. Замість локального запуску контейнерів Docker OpenClaw делегує життєвий цикл sandbox до CLI openshell, який надає віддалені середовища з виконанням команд через SSH. Плагін OpenShell повторно використовує той самий базовий транспорт SSH і міст віддаленої файлової системи, що й загальний бекенд SSH. Він додає життєвий цикл, специфічний для OpenShell (sandbox create/get/delete, sandbox ssh-config), та необов’язковий режим workspace mirror.

Передумови

  • CLI openshell встановлено й доступний у PATH (або задайте власний шлях через plugins.entries.openshell.config.command)
  • Обліковий запис OpenShell із доступом до sandbox
  • OpenClaw Gateway запущено на хості

Швидкий старт

  1. Увімкніть плагін і задайте бекенд sandbox:
{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        backend: "openshell",
        scope: "session",
        workspaceAccess: "rw",
      },
    },
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "remote",
        },
      },
    },
  },
}
  1. Перезапустіть Gateway. На наступному ході агента OpenClaw створить sandbox OpenShell і маршрутизуватиме виконання інструментів через нього.
  2. Перевірка:
openclaw sandbox list
openclaw sandbox explain

Режими workspace

Це найважливіше рішення під час використання OpenShell.

mirror

Використовуйте plugins.entries.openshell.config.mode: "mirror", якщо ви хочете, щоб локальний workspace залишався канонічним. Поведінка:
  • Перед exec OpenClaw синхронізує локальний workspace в sandbox OpenShell.
  • Після exec OpenClaw синхронізує віддалений workspace назад у локальний workspace.
  • Файлові інструменти, як і раніше, працюють через міст sandbox, але локальний workspace залишається джерелом істини між ходами.
Найкраще підходить для:
  • Ви редагуєте файли локально поза OpenClaw і хочете, щоб ці зміни автоматично були видимі в sandbox.
  • Ви хочете, щоб sandbox OpenShell поводився максимально схоже на бекенд Docker.
  • Ви хочете, щоб workspace хоста відображав записи sandbox після кожного ходу exec.
Компроміс: додаткова вартість синхронізації до і після кожного exec.

remote

Використовуйте plugins.entries.openshell.config.mode: "remote", якщо ви хочете, щоб workspace OpenShell став канонічним. Поведінка:
  • Коли sandbox створюється вперше, OpenClaw один раз засіває віддалений workspace з локального workspace.
  • Після цього exec, read, write, edit і apply_patch працюють безпосередньо з віддаленим workspace OpenShell.
  • OpenClaw не синхронізує віддалені зміни назад у локальний workspace.
  • Читання медіа під час побудови prompt усе одно працює, тому що файлові та медіаінструменти читають через міст sandbox.
Найкраще підходить для:
  • Sandbox має жити переважно на віддаленому боці.
  • Ви хочете менші накладні витрати на синхронізацію на кожному ході.
  • Ви не хочете, щоб локальні редагування на хості непомітно перезаписували стан віддаленого sandbox.
Важливо: якщо ви редагуєте файли на хості поза OpenClaw після початкового засівання, віддалений sandbox не побачить цих змін. Використовуйте openclaw sandbox recreate, щоб виконати повторне засівання.

Вибір режиму

mirrorremote
Канонічний workspaceЛокальний хостВіддалений OpenShell
Напрям синхронізаціїДвостороння (кожен exec)Одноразове засівання
Накладні витрати на хідВищі (вивантаження + завантаження)Нижчі (прямі віддалені операції)
Локальні редагування видимі?Так, на наступному execНі, до recreate
Найкраще дляРобочих процесів розробкиДовготривалих агентів, CI

Довідник конфігурації

Уся конфігурація OpenShell розташована в plugins.entries.openshell.config:
КлючТипТиповоОпис
mode"mirror" або "remote""mirror"Режим синхронізації workspace
commandstring"openshell"Шлях або назва CLI openshell
fromstring"openclaw"Джерело sandbox для першого створення
gatewaystringНазва шлюзу OpenShell (--gateway)
gatewayEndpointstringURL endpoint шлюзу OpenShell (--gateway-endpoint)
policystringID політики OpenShell для створення sandbox
providersstring[][]Назви провайдерів, які слід приєднати під час створення sandbox
gpubooleanfalseЗапросити ресурси GPU
autoProvidersbooleantrueПередавати --auto-providers під час створення sandbox
remoteWorkspaceDirstring"/sandbox"Основний доступний для запису workspace усередині sandbox
remoteAgentWorkspaceDirstring"/agent"Шлях монтування workspace агента (для доступу лише на читання)
timeoutSecondsnumber120Тайм-аут для операцій CLI openshell
Налаштування на рівні sandbox (mode, scope, workspaceAccess) задаються в agents.defaults.sandbox, як і для будь-якого іншого бекенда. Повну матрицю див. у Sandboxing.

Приклади

Мінімальне налаштування remote

{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        backend: "openshell",
      },
    },
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "remote",
        },
      },
    },
  },
}

Режим mirror з GPU

{
  agents: {
    defaults: {
      sandbox: {
        mode: "all",
        backend: "openshell",
        scope: "agent",
        workspaceAccess: "rw",
      },
    },
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "mirror",
          gpu: true,
          providers: ["openai"],
          timeoutSeconds: 180,
        },
      },
    },
  },
}

OpenShell для окремого агента з власним шлюзом

{
  agents: {
    defaults: {
      sandbox: { mode: "off" },
    },
    list: [
      {
        id: "researcher",
        sandbox: {
          mode: "all",
          backend: "openshell",
          scope: "agent",
          workspaceAccess: "rw",
        },
      },
    ],
  },
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          from: "openclaw",
          mode: "remote",
          gateway: "lab",
          gatewayEndpoint: "https://lab.example",
          policy: "strict",
        },
      },
    },
  },
}

Керування життєвим циклом

Sandbox OpenShell керуються через звичайний CLI sandbox:
# List all sandbox runtimes (Docker + OpenShell)
openclaw sandbox list

# Inspect effective policy
openclaw sandbox explain

# Recreate (deletes remote workspace, re-seeds on next use)
openclaw sandbox recreate --all
Для режиму remote recreate особливо важливий: він видаляє канонічний віддалений workspace для цієї області дії. Під час наступного використання виконується нове засівання віддаленого workspace з локального workspace. Для режиму mirror recreate переважно скидає віддалене середовище виконання, оскільки локальний workspace залишається канонічним.

Коли виконувати recreate

Виконуйте recreate після зміни будь-якого з цих параметрів:
  • agents.defaults.sandbox.backend
  • plugins.entries.openshell.config.from
  • plugins.entries.openshell.config.mode
  • plugins.entries.openshell.config.policy
openclaw sandbox recreate --all

Поточні обмеження

  • Browser sandbox не підтримується бекендом OpenShell.
  • sandbox.docker.binds не застосовується до OpenShell.
  • Специфічні для Docker параметри runtime у sandbox.docker.* застосовуються лише до бекенда Docker.

Як це працює

  1. OpenClaw викликає openshell sandbox create (з прапорцями --from, --gateway, --policy, --providers, --gpu згідно з конфігурацією).
  2. OpenClaw викликає openshell sandbox ssh-config <name>, щоб отримати деталі SSH-підключення для sandbox.
  3. Core записує конфігурацію SSH у тимчасовий файл і відкриває SSH-сесію, використовуючи той самий міст віддаленої файлової системи, що й загальний бекенд SSH.
  4. У режимі mirror: синхронізує локальний стан у віддалений перед exec, виконує запуск, синхронізує назад після exec.
  5. У режимі remote: один раз засіває під час створення, а потім працює безпосередньо з віддаленим workspace.

Див. також