Skip to content
Draft
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,7 @@
"enterprise/index",
"enterprise/enterprise-vs-oss",
"enterprise/quick-start",
"enterprise/custom-sandbox-image",
"enterprise/analytics",
"enterprise/external-postgres"
]
Expand Down
111 changes: 111 additions & 0 deletions enterprise/custom-sandbox-image.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
---
title: Custom Sandbox Images
description: Preload repos, dependencies, and tooling into a custom sandbox image to make your agents faster and more reliable.

Check warning on line 3 in enterprise/custom-sandbox-image.mdx

View check run for this annotation

Mintlify / Mintlify Validation (allhandsai) - vale-spellcheck

enterprise/custom-sandbox-image.mdx#L3

Did you really mean 'Preload'?

Check warning on line 3 in enterprise/custom-sandbox-image.mdx

View check run for this annotation

Mintlify / Mintlify Validation (allhandsai) - vale-spellcheck

enterprise/custom-sandbox-image.mdx#L3

Did you really mean 'repos'?
icon: box
---

Custom sandbox images let you prebake the repository, dependencies, compiled output, and test harness
your agents need. Instead of spending minutes provisioning a workspace on every run, your agents start
on the actual task immediately.

## Why Use a Custom Image

Custom images eliminate cold-start setup work (clone, install, transpile, and bootstrap) so agents

Check warning on line 13 in enterprise/custom-sandbox-image.mdx

View check run for this annotation

Mintlify / Mintlify Validation (allhandsai) - vale-spellcheck

enterprise/custom-sandbox-image.mdx#L13

Did you really mean 'transpile'?
spend their time on the actual task. They also reduce setup variance and lower sandbox memory requirements
by keeping only what the agent needs.

## Build Your Own Custom Image

The [OpenHands agent-server sandbox guide](https://docs.openhands.dev/sdk/guides/agent-server/docker-sandbox)
provides full documentation on building custom sandbox images. The approach is the same for the Enterprise
Replicated VM deployment.

### Basic Pattern

1. Start from the OpenHands agent-server base image.
2. Keep the normal OpenHands entrypoint intact: extend the image, do not replace the entrypoint.
3. Add your repo, docs, tools, and verification wrappers.
4. Pre-run the expensive setup you do not want to repeat at task time.
5. Publish the image to a registry and point the Replicated installer at it.

<Warning>
Do not override the entrypoint or replace the runtime contract of the base image. The installer
Comment thread
rajshah4 marked this conversation as resolved.
expects standard OpenHands agent-server behavior. Only extend, do not replace.
</Warning>

### Base Image

```dockerfile
FROM ghcr.io/openhands/agent-server:1.23.0-python
```

Pin a specific version tag to ensure reproducible builds. Check
[ghcr.io/openhands/agent-server](https://github.com/OpenHands/OpenHands/pkgs/container/agent-server)
for the latest available tags.
Comment thread
rajshah4 marked this conversation as resolved.

### Example: Build and Push

```bash
docker buildx build \
--platform linux/amd64 \
-f your-project/Dockerfile \
-t ghcr.io/<your-org>/openhands-custom-image:<your-tag> \
--push \
.
```

Use `--platform linux/amd64` because the Enterprise Replicated VM runs on `x86-64`.

### What to Bake In

Good candidates for prebaking:

Check warning on line 61 in enterprise/custom-sandbox-image.mdx

View check run for this annotation

Mintlify / Mintlify Validation (allhandsai) - vale-spellcheck

enterprise/custom-sandbox-image.mdx#L61

Did you really mean 'prebaking'?

- Pinned repository checkouts
- Package manager caches and installed dependencies (`node_modules`, Python virtualenvs, etc.)

Check warning on line 64 in enterprise/custom-sandbox-image.mdx

View check run for this annotation

Mintlify / Mintlify Validation (allhandsai) - vale-spellcheck

enterprise/custom-sandbox-image.mdx#L64

Did you really mean 'virtualenvs'?
- Compiled or transpiled output

Check warning on line 65 in enterprise/custom-sandbox-image.mdx

View check run for this annotation

Mintlify / Mintlify Validation (allhandsai) - vale-spellcheck

enterprise/custom-sandbox-image.mdx#L65

Did you really mean 'transpiled'?
- Native system packages (`xvfb`, `libkrb5-dev`, `pkg-config`, etc.)
- Browser or Electron artifacts
- Stable helper scripts such as `prepare-*` and `*-verify` wrappers

### What to Keep Out

<Warning>
Do not bake the following into your image:

- Secrets, API keys, or personal credentials
- Machine-specific paths or environment assumptions
- Uncommitted source changes or task-specific fixes
- Rapidly changing dependencies (use a lightweight `prepare-*` helper instead)
</Warning>

If the repository or dependencies change frequently, include a `prepare-*` script in the image
so the agent can refresh only the parts that need updating without a full rebuild.

## Configure the Replicated VM Installer

Once your image is built and pushed to a registry, point the Replicated Admin Console at it.

1. Open the **Admin Console** at `https://<your-base-domain>:30000`.
2. Navigate to **Config** and find the **Sandbox Image** section.
3. Set the following fields:

| Field | Value |
|---|---|
| **Use a Custom Sandbox Image** | Enabled |
| **Sandbox Image Repository** | Your image repository (e.g. `ghcr.io/your-org/openhands-custom-image`) |
| **Sandbox Image Tag** | Your image tag (e.g. `v1.2.0`) |
| **Registry Server** | If your registry requires authentication |
| **Registry Username** | If your registry requires authentication |
| **Registry Password or Credentials** | If your registry requires authentication |

4. Click **Save config** and then **Deploy** to apply the change.

<Note>
This setting applies to the **sandbox / agent-server image** only (the image that runs inside each
agent's isolated workspace). It does not replace the other OpenHands service images.
</Note>

## Reference

- [OpenHands custom image example repo](https://github.com/rajshah4/openhands-custom-image): Dockerfile, benchmark scripts, and analysis tooling for the VS Code custom image example.

Check warning on line 110 in enterprise/custom-sandbox-image.mdx

View check run for this annotation

Mintlify / Mintlify Validation (allhandsai) - vale-spellcheck

enterprise/custom-sandbox-image.mdx#L110

Did you really mean 'Dockerfile'?
Comment thread
rajshah4 marked this conversation as resolved.
Outdated
- [Agent-server sandbox guide](https://docs.openhands.dev/sdk/guides/agent-server/docker-sandbox): full SDK documentation on building and configuring custom sandbox images.
Loading