# Omnigent on Islo [Islo](https://islo.dev) sandboxes give you disposable cloud machines for running Omnigent hosts, two ways: - **CLI-launched**: `omnigent sandbox create` / `connect` provisions a sandbox from your terminal, ships your local checkout into it, and registers it as a host with your server. - **Server-managed**: the server provisions a sandbox automatically when a session is created with `"host_type": "managed"` and terminates it when the session is deleted. Sandboxes boot from the official prebaked host image, so startup is seconds. Unlike Modal and Daytona, the Islo launcher talks to the Islo HTTP API directly through `httpx` (already an Omnigent dependency), so there is **no provider SDK extra to install** — just an API key. What makes Islo different from the other providers, and shapes the rest of this guide: - **A credential gateway.** Islo can inject LLM/API keys into a sandbox's outbound traffic at the network layer, so the raw key never reaches the sandbox process. This is a first-class, recommended path for model credentials (see [Model credentials](#model-credentials-llm-keys)) and has no equivalent on Modal or Daytona. - **No local port forward.** Islo can't forward a sandbox→laptop callback port, so the interactive in-sandbox `omnigent login` / App OAuth step is skipped automatically (as on Modal and Daytona). - **No lifetime cap.** Islo sandboxes run until deleted (like Daytona, unlike Modal's 24 h). ## Prerequisites Install the [Islo CLI](https://docs.islo.dev) and create an API key, then make it available where the launcher runs — your shell for the CLI flow, the **server** process for managed sandboxes: ```bash curl -fsSL https://islo.dev/install.sh | sh # install the islo CLI islo login # browser OAuth (one-time) islo api-key create omnigent --show # prints an islo_key_… value export ISLO_API_KEY=islo_key_… # Optional: a non-default API endpoint # export ISLO_BASE_URL=https://api.islo.dev ``` `ISLO_API_KEY` is exchanged for a short-lived session token at `POST /auth/token`; the token is cached until shortly before expiry. The key is the only required credential — no SDK, no `~/.config` file. > [!NOTE] > **Islo cannot forward a local callback port into the sandbox.** The > interactive `omnigent login` browser flow (and the in-sandbox App OAuth > callback) needs a sandbox→laptop port forward, which Islo doesn't > provide — so the CLI skips that step automatically, exactly as it does > for Modal and Daytona. For a server that requires authentication, inject > the credentials instead (see > [Connecting to an authenticated server](#connecting-to-an-authenticated-server)). ## The host image Sandboxes boot from `ghcr.io/omnigent-ai/omnigent-host:latest`, published by CI from the `host` target of [`deploy/docker/Dockerfile`](../docker/Dockerfile) with Omnigent and its dependencies preinstalled — including the coding-harness CLIs (`claude`, `codex`, `pi`, `kiro-cli`), so agents on any harness run without an in-sandbox install. To use a different image (a fork, or extra tooling baked in), build the same target and push it anywhere Islo can pull from: ```bash docker build -f deploy/docker/Dockerfile --target host \ --platform linux/amd64 \ -t docker.io//omnigent-host:latest . docker push docker.io//omnigent-host:latest ``` Then point Omnigent at it — `OMNIGENT_ISLO_HOST_IMAGE` for the CLI flow, or `sandbox.islo.image` in the server config for the managed flow. For a private registry, configure the pull credentials on the Islo side (Islo pulls the image, not Omnigent). > [!IMPORTANT] > **Native terminals need `bubblewrap`.** The `claude-native` / > `codex-native` / `kiro-native` / `pi` harnesses wrap each agent terminal in a bubblewrap > (`bwrap`) OS-sandbox, and on Linux that isolation is mandatory and > fail-loud — a host image without the `bwrap` binary makes those terminals > fail to start (`linux_bwrap sandbox requires the 'bwrap' binary on PATH`). > The `host` Dockerfile target installs `bubblewrap`; if you bring your own > image, install it there too. See [Troubleshooting](#troubleshooting). ## CLI-launched sandboxes Provision a sandbox and ship your local checkout into it: ```bash omnigent sandbox create --provider islo ``` This pulls the host image, builds wheels from your local checkout, and overlays them on top — so the sandbox runs *your* code, not whatever the image was built from. Then register it as a host with your server: ```bash omnigent sandbox connect --provider islo \ --sandbox-id \ --server https://your-host ``` `connect` runs `omnigent host` inside the sandbox and holds the connection open in your terminal — Ctrl-C tears it down. New sessions targeting that host now run in the sandbox. Running multiple sandboxes against one server? Pass a unique `--host-name