Research and experimentation on adapting OSWorld to work with modern cloud-based sandbox providers and exploring various integration possibilities.
This repository documents ongoing research and development work on OSWorld, focusing on making it more accessible and flexible for different deployment scenarios. Current work includes:
The initial focus has been on solving desktop environment provisioning challenges, particularly around the 22.7 GB VM disk images that OSWorld relies on, which present unique challenges for sandbox providers with layer size limitations and volume mounting constraints.
undefinedThe Problem: OSWorld’s existing providers (VirtualBox, Docker) require pre-baked VM disk images to be mounted before launching instances. This approach doesn’t translate well to modern sandbox providers because:
/)happysixd/osworld-docker base image is closed-source with hardcoded pathsundefinedThe Solution: Through reverse engineering and experimentation, this project:
happysixd/osworld-docker image to support flexible VM file pathsexplore-osworld/
├── docs/ # Research documentation
│ ├── desktop-env.md # Detailed research notes
│ └── summary-desktop-env.md # One-page summary
├── template/ # Modified OSWorld Docker images
│ ├── bundled/ # VM baked into image
│ │ └── Dockerfile # Bundled build (synacktra/osworld-ubuntu)
│ └── volume-based/ # VM loaded from volume
│ ├── Dockerfile # Patched image (synacktra/osworld-docker)
│ ├── override-install.sh # Modified script for /vm path
│ └── verify-and-entry.sh # Conditional entrypoint
├── providers/
│ ├── common.py # Shared utilities
│ ├── docker/ # Local Docker provider
│ │ ├── run_bundled.py # Run with bundled VM
│ │ └── run_volume_based.py # Run with volume mount
│ └── daytona/ # Daytona sandbox provider
│ ├── run_bundled.py # Run with bundled VM
│ ├── run_volume_based.py # Run with volume mount
│ └── build-volume.md # Volume setup guide
└── pyproject.toml # Project dependencies
The template/ directory contains two approaches:
undefinedBundled (template/bundled/):
synacktra/osworld-ubuntuundefinedVolume-based (template/volume-based/):
happysixd/osworld-docker to support flexible VM paths (/vm/System.qcow2)synacktra/osworld-dockerundefinedVolume-based (recommended):
uv run python -m providers.docker.run_volume_based
undefinedBundled:
uv run python -m providers.docker.run_bundled
undefinedVolume-based (recommended):
export DAYTONA_API_KEY=dtn_xxxxxx
uv run python -m providers.daytona.run_volume_based
undefinedBundled:
export DAYTONA_API_KEY=dtn_xxxxxx
uv run python -m providers.daytona.run_bundled
Initially attempted to bake the VM directly into the Docker image with on-the-fly extraction during build. This worked locally but failed on e2b due to their 10 GiB per-layer size limit.
Discovered that Daytona supports volume mounting through S3FS and gfuse. By reverse-engineering the happysixd/osworld-docker image and patching the /run/install.sh script, successfully moved the VM file from /System.qcow2 to /vm/System.qcow2, enabling volume-based deployment.
Created a conditional entrypoint (verify-and-entry.sh) that checks for VM presence before launching. This allows Daytona’s snapshot validation to pass even when the VM volume isn’t attached during the build process.
For detailed research notes, findings, and experiments, see docs/desktop-env.md.
This is a research project documenting exploration of OSWorld deployment options. Feel free to open issues or PRs with improvements, findings, or alternative approaches.
This project is for research and educational purposes. Please refer to OSWorld’s license for the underlying framework.
We use cookies
We use cookies to analyze traffic and improve your experience. You can accept or reject analytics cookies.