OpenHands / OpenHands/enterprise

[Enterprise] Support multiple custom sandbox images from runtime-api warm pool

Open
#32 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
Python
Stars
4
Forks
2
Avg merge
1d 22h
Merged PRs (30d)
101

Description

Problem Statement

Enterprise customers on self-hosted deployments need to use custom runtime container images with project-specific toolchains (e.g., PHP 8.4 for a Symfony project, Java 21 for a Spring Boot project, custom build environments).

Currently, OpenHands only supports a single pre-configured runtime image. Customers cannot:

  • Use multiple different runtime images for different projects
  • Specify custom container images when starting conversations
  • Use images from private registries without complex workarounds
  • Pre-warm custom images to avoid cold start latency

This blocks enterprise teams from using OpenHands effectively across polyglot codebases.

Customer Context

C24 (HappyFox Ticket #OS00000055):

  • VM-based Replicated deployment
  • Needs project-specific images from private Harbor registry (harbor.c24.de/)
  • Requires PHP extensions, MySQL, Redis, WireMock, PHPUnit, iOS/Android toolchains
  • Currently blocked from scaling OpenHands across multiple teams

Related Linear Issue: APP-2354

Proposed Solution

Enable multiple custom sandbox images with pre-warming support:

  1. Runtime-API manages warm pools - Admins configure custom image pools via API
  2. Per-image warm counts - Each custom image can have its own pool size
  3. Conversation API selects image - Users specify which image to use when starting conversations
  4. Private registry support - Pull images from private registries using K8s secrets

Implementation Plan

This work is broken into child issues:

Runtime-API (OpenHands/runtime-api)
OpenHands Backend & API (OpenHands/OpenHands)
  • OpenHands/enterprise#33 - Support custom sandbox images in conversation start API

End-to-End Flow

Admin setup:

# 1. Configure warm runtime via API
curl -X PUT https://runtime-api/api/admin/warm-runtime-configs/c24-pemservice \
  -H "Authorization: Bearer $ADMIN_TOKEN" \
  -d '{
    "image": "harbor.c24.de/c24/pemservice:latest",
    "count": 3,
    "working_dir": "/workspace",
    "command": ["/usr/local/bin/openhands-agent-server", "--port", "60000"],
    "environment": {...}
  }'

# 2. Verify warm runtimes are ready
curl https://runtime-api/api/admin/warm-runtime-configs/status

User starts conversation with custom image:

POST /api/v1/app-conversations
{
  "sandbox_spec_id": "harbor.c24.de/c24/pemservice:latest",
  "github_repo": "https://github.com/company/php-project",
  ...
}

Technical Design

Full design documentation: OpenHands/technical-explorations - C24 Custom Sandbox Images

Out of Scope (Follow-on Work)

  • UI dropdown for image selection (can use API directly for now)
  • Replicated admin console UI for warm runtime management
  • Auto-discovery of available images in UI

Related:

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the linked technical exploration, then review runtime-api issues #595 and #596 and enterprise issue #33 to understand the warm-pool and conversation API boundaries. Trace the app-conversations request and the runtime-api warm-runtime configuration and status endpoints. Done means custom images can be configured with per-image warm counts, selected when starting conversations, and pulled from private registries using Kubernetes secrets.

Written by the indexing model from the issue text.

Assessment

Tech stack
kubernetes, python
Domain
api, backend, infrastructure
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.