sha256:c099f8bf330f0e5abd7b6c9f7f1f852f79c1d8e4e79163f9ee4f8f2e245f9ffb
Last pushed
23 days by dockerpublicbot
Type
Sandbox Kit
Manifest digest
sha256:c099f8bf330f0e5abd7b6c9f7f1f852f79c1d8e4e79163f9ee4f8f2e245f9ffb
schemaVersion: "2"
kind: sandbox
name: openhands
displayName: OpenHands
description: |
AI software engineering agent. Resolves issues, writes code, runs tests, and opens PRs — all autonomously.
sandbox:
image: docker/sandbox-templates:shell-docker
entrypoint:
- /home/agent/.local/bin/openhands
command:
default:
- --always-approve
interactive:
- --always-approve
agentInstructions:
filename: AGENTS.md
content: |
# OpenHands — Sandbox Context
You are running inside a Docker SBX sandbox.
## Environment
| Item | Value |
|------|-------|
| Workspace | `${WORKDIR}` |
| Sandbox mode | local (code runs in this container) |
| Persistence | enabled — workspace survives restarts |
| Confirmation | always-approve mode is active |
## Network access
Outbound requests are filtered. Reachable: GitHub, PyPI, npm, Docker registries,
the configured LLM API (auth injected by proxy). Tavily search is available
if `TAVILY_API_KEY` is set.
## Working conventions
1. Read the repo README and existing tests before making changes.
2. Make the smallest change that satisfies the task.
3. Run the test suite; fix failures before reporting completion.
4. Commit with a clear message and push to the current branch.
5. Use `gh pr create` for pull requests (GitHub CLI is pre-installed).
## Switching LLM providers
Recreate the sandbox with `LLM_MODEL` overridden and the matching provider
secret registered via `sbx secret set <service>`. See the kit README for details.
permissions:
network:
allow:
- api.anthropic.com
- api.openai.com
- generativelanguage.googleapis.com
- github.com
- api.github.com
- raw.githubusercontent.com
- objects.githubusercontent.com
- pypi.org
- files.pythonhosted.org
- astral.sh
- '*.astral.sh'
- registry.npmjs.org
- registry-1.docker.io
- index.docker.io
- auth.docker.io
- production.cloudflare.docker.com
- ghcr.io
- docker.openhands.dev
- api.tavily.com
credentials:
- service: anthropic
apiKey:
name: ANTHROPIC_API_KEY
proxyManaged: true
inject:
- domain: api.anthropic.com
header: x-api-key
format: '%s'
- service: google
apiKey:
name: GEMINI_API_KEY
proxyManaged: true
inject:
- domain: generativelanguage.googleapis.com
header: x-goog-api-key
format: '%s'
- service: openai
apiKey:
name: OPENAI_API_KEY
proxyManaged: true
inject:
- domain: api.openai.com
header: Authorization
format: Bearer %s
environment:
variables:
LLM_MODEL: anthropic/claude-opus-4-5
OPENHANDS_SUPPRESS_BANNER: "1"
SANDBOX_TYPE: local
setup:
install:
- command: uv tool install openhands
user: "1000"
description: Install OpenHands CLI
startup:
- command:
- uv
- tool
- upgrade
- openhands
- --quiet
user: "1000"
description: Upgrade OpenHands to latest (foreground -- must finish before the entrypoint execs the binary it's upgrading)