bochka vs GitHub Actions
GitHub Actions gives each CI job a fresh VM that is thrown away when the job ends, at most 6 hours later. bochka gives each agent a full VM that keeps its disk, runs as long as you want and can be reached from outside.
Where bochka stands out
A machine that stays
A bochka sandbox keeps its disk. It is saved every minute and when it stops, a stopped sandbox costs nothing, and paid plans have no session cap. You can also fork a running sandbox to try two ideas from the same state.
Reach it from outside
You can SSH into a bochka sandbox, open HTTPS URLs on up to 50 ports, take raw TCP and watch its desktop at 60fps. An agent can run a dev server or an app and you, a test or a user can use it while it runs.
Agents you drive from outside, keys kept out
Claude Code, Codex and five other agents come preinstalled, and you prompt, steer and follow them through one API from any program, not only from issues and pull requests. Real API keys stay in a credentials proxy outside the sandbox.
The companies and products
bochka
bochka.xyz runs sandboxes for AI agents: each one is a full Linux VM with its own kernel.
You start a machine with one command or one API call, then SSH in, run Docker, open a desktop, or let a built-in agent (Claude Code, Codex, OpenCode and others) work in it. The disk stays between sessions, and a stopped sandbox costs nothing.
- Isolation
- Full VM per sandbox, own kernel
- Regions
- EU: Germany, Finland, France
GitHub Actions
GitHub Actions is GitHub's CI/CD service: workflows in your repository run as jobs on runners that GitHub hosts or that you host yourself.
GitHub Actions is a CI service, not a sandbox API. Each job on a GitHub-hosted runner gets a new VM, Linux and Windows on Azure and macOS on GitHub's own Mac fleet, with passwordless sudo, and the VM is gone when the job ends. It is built for building, testing and deploying the code in a repository, and GitHub's own Copilot cloud agent and the Claude and Codex agents on GitHub also run on Actions runners.
- Job length
- Each job can run for up to 6 hours
- Self-hosted runners
- Open-source runner under MIT; usage on self-hosted runners is free
Which use cases each one fits
For each use case, Battleships prices every sandbox provider on the same workload and sorts them from the cheapest monthly bill up. “3rd cheapest of 367” means 2 of the other 366 providers run that workload, with every feature it needs, for less. “With limits” means the provider runs it but misses something, so it is listed after every full match. Open a use case for its whole ranking and what each provider misses.
| Use case and its workload | bochka: price rank | GitHub Actions: price rank |
|---|---|---|
| Software factory 100 at once · 4 vCPU / 8 GB · 2,200 sessions of 8 h a month A software factory needs agents that keep their checkout, Docker cache and services between tasks, which a fresh 6-hour CI job does not give you. | 3rd cheapest of 367 $634 a month | 298th of 367, with limits $5,853 a month |
| Always-on AI employees 50 machines 24/7 · 2 vCPU / 4 GB An assistant that lives on its machine all month cannot fit in jobs that end after 6 hours and start from a clean VM. | 5th cheapest of 366 $657 a month | 333rd of 366, with limits $10,692 a month |
| Code interpreter bursts 100 at once · 1 vCPU / 2 GB · 200,000 sessions of 1 min a month Each job waits for a fresh VM and bills at least a minute, which suits builds better than many tiny code runs. | 186th of 345, with limits $2,000 a month | 294th of 345, with limits $721 a month |
| Sandboxes for your users 300 at once · 2 vCPU / 4 GB · 30,000 sessions of 23 min a month GitHub's terms do not allow offering Actions to your own users as a service, and its runners take no inbound traffic, so it is not built for this. | Cheapest of 361 $209 a month | 308th of 361, with limits $2,892 a month |
| RL rollouts 1,000 at once · 2 vCPU / 4 GB · 1,000,000 sessions of 3 min a month | 34th of 360, with limits $2,000 a month | 304th of 360, with limits $14,721 a month |
| Agent evals 250 at once · 4 vCPU / 8 GB · 15,000 sessions of 20 min a month | 10th cheapest of 364 $200 a month | 303rd of 364, with limits $1,962 a month |
| CI runners 40 at once · 8 vCPU / 16 GB · 6,000 sessions of 12 min a month Both fit; GitHub Actions is the native choice for a GitHub repo's CI, while bochka suits CI that needs a warm disk between runs or jobs longer than 6 hours. | 4th cheapest of 377 $86 a month | 100th cheapest of 377 $1,012 a month |
| 24/7 dev boxes 1 machine 24/7 · 4 vCPU / 8 GB A dev box needs SSH, open ports and a disk that stays; hosted runners have none of these. | 18th cheapest of 368 $26 a month | 279th of 368, with limits $159 a month |
| Computer-use agents 50 at once · 4 vCPU / 8 GB · 20,000 sessions of 15 min a month Runners are headless, while bochka gives each agent a desktop streamed at 60fps with computer use built in. | 6th cheapest of 369 $200 a month | 292nd of 369, with limits $1,768 a month |
| Browser-use agents 50 at once · 2 vCPU / 4 GB · 30,000 sessions of 10 min a month | 7th cheapest of 367 $200 a month | 135th of 367, with limits $942 a month |
| Scraping & bots (startup scale) 50 at once · 1 vCPU / 2 GB · 100,000 sessions of 3 min a month | 6th cheapest of 346 $90 a month | 134th of 346, with limits $1,184 a month |
| Mass scraping & bots (undetectable) 1,000 at once · 1 vCPU / 2 GB · 3,000,000 sessions of 2 min a month | 71st of 338, with limits $1,800 a month | 301st of 338, with limits $28,971 a month |
| Parallel red teaming 200 at once · 2 vCPU / 4 GB · 5,000 sessions of 30 min a month | 2nd cheapest of 360 $200 a month | 70th of 360, with limits $467 a month |
| GPU eval jobs 10 at once · 8 vCPU / 32 GB · 500 sessions of 30 min a month | Can't run it | Can't run it |
| macOS agents 5 at once · 4 vCPU / 8 GB · 1,000 sessions of 20 min a month GitHub Actions has hosted macOS runners on Apple silicon; bochka runs Linux only. | Can't run it | 25th of 36, with limits $1,178 a month |
Key features
| Feature | bochka | GitHub Actions |
|---|---|---|
| Kind of product | Sandbox API: create, stop, fork and reach machines from your code | CI service: jobs run from workflow files in a GitHub repository |
| Isolation | Full VM with its own kernel on dedicated AMD Ryzen 9 9950X hosts, with root and systemd | New VM per job on Azure (Linux, Windows) or GitHub's Mac cloud, with passwordless sudo |
| Session length | No cap on paid plans; you set the time to live | Up to 6 hours per job |
| Disk between runs | Disk persists, saved every minute and on stop; a stopped sandbox costs nothing | Every job starts on a fresh VM; files carry over only through cache, artifacts or custom images |
| Fork | Fork a running sandbox with its disk | No; custom images are a template for new runners, not a copy of a live one |
| Nested virtualization | Yes, /dev/kvm for Android emulators and VMs | Yes on Linux runners, including the 2-vCPU ones, after adding the runner user to the KVM group |
| Inbound access | SSH, HTTPS URLs for up to 50 ports, raw TCP, dedicated IPv6 or IPv4 | None; GitHub says hosted runners never need inbound connections |
| Desktop and computer use | Linux desktop streamed at 60fps, Chromium, computer use API | Headless runners; browsers are preinstalled for tests |
| Coding agents | Seven agents preinstalled in your sandbox, driven from outside with a prompt, steer and events API | Copilot cloud agent, plus Claude and Codex in public preview, working on issues and pull requests on Actions runners |
| Keeping API keys out of the machine | Credentials proxy for model providers and any HTTPS API; switch a credential to another account when credits run out | Secrets enter the job as inputs or environment variables and are hidden from logs |
| Operating systems | Linux x64 | Linux x64 and arm64, Windows x64 and arm64, macOS |
| GPUs | None | Linux and Windows larger runners with an NVIDIA T4 |
| Regions and networking | EU only (Germany, Finland, France), open internet | Azure; larger runners can join your Azure network in regions across the US, EU and APAC, with static IP ranges |
| Self-hosting | No | Open-source runner on your own machines, free to use |
| Compliance and transparency | SOC 2 is in progress. We're open about where we stand: live status and data retention policy. | SOC 2 |
Every feature Battleships tracks (43)
| Feature | bochka | GitHub Actions |
|---|---|---|
| Full VM (own kernel) | Yes | Yes |
| Docker inside | Yes | Yes |
| Nested virtualization | Yes | Yes |
| Root | Yes | Yes |
| Systemd | Yes | No |
| Desktop GUI | Yes | No |
| Browser | Yes | Yes |
| Computer-use API | Yes | No |
| SSH | Yes | No |
| Persistent disk | Yes | No |
| Pause/resume | Yes | No |
| Automatic snapshots | Yes | No |
| Fork/clone | Yes | No |
| Live fork (no pause) | Yes | No |
| Memory fork | No | No |
| Custom image (Docker or snapshot) | Yes | Yes |
| ≥24 h sessions | Yes | No |
| Idle auto-stop | No | Yes |
| Wake on request | No | No |
| HTTPS preview URLs | Yes | No |
| Raw TCP inbound | Yes | No |
| Public IPv4 | No | No |
| Egress allowlist | No | Yes |
| Secret proxy | Yes | No |
| Secret proxy for any API | Yes | No |
| Preinstalled agents | Yes | Yes |
| Agent harness API | Yes | Yes |
| MCP server | No | Yes |
| GPU | No | Yes |
| Windows | No | Yes |
| Arm64 | No | Yes |
| Self-hosting | No | Yes |
| BYOC | No | No |
| Open source | No | Yes |
| Scoped API keys | Yes | Not published |
| Spend limits | Yes | Yes |
| Usage per sandbox (API) | Yes | Yes |
| Audit logs | No | Yes |
| SSO | No | Yes |
| SOC 2 | No | Yes |
| HIPAA | No | No |
| EU data residency | Yes | Yes |
| Zero data retention | Yes | Not published |
Performance
There is no comparable measurement for GitHub Actions hosted runners in the hpc-sandbox-benchmarks CPU test. bochka did 26.69 runs per second on it at 4 vCPU / 8 GB, on dedicated AMD Ryzen 9 9950X hosts.
Node.js build-and-test loop at 4 vCPU / 8 GB, higher is better. Measured with the open hpc-sandbox-benchmarks suite. GitHub Actions has no published run in this suite yet, so there is no like-for-like number to compare.
Pricing in five scenarios
Each bill is priced from the providers' public price lists by the open Battleships engine, with the cheapest plan that runs the scenario.
| Scenario | bochka, a month | GitHub Actions, a month |
|---|---|---|
| One coding agent, workdays 4 vCPU / 8 GB, 50 GB disk, 8 hours a day, 22 days a month, files kept between days | $20 · $20/mo | $80 · Team · with limits |
| One agent that never stops 4 vCPU / 8 GB, 50 GB disk, running 24/7 all month | $26 · $20/mo | $354 · Team · with limits |
| 50 agents in parallel 50 machines of 4 vCPU / 8 GB at once, 8-hour sessions, 1,100 sessions a month, Docker inside | $317 · $20/mo × 3 seats | $3,814 · Team · with limits |
| Sandboxes for your users 2 vCPU / 4 GB, 30,000 sessions of 10 minutes a month, up to 300 at once | $200 · $100/mo × 2 seats | $1,092 · Enterprise Cloud · with limits |
| 1,000 short jobs at once 2 vCPU / 4 GB, 1,000 at once, 3 minutes each, 200,000 jobs a month | $2,000 · $2000/mo · with limits | $2,721 · Enterprise Cloud · with limits |
bochka: Plans start at $20 a month, and the whole fee is usage credit. You pay per second while a sandbox runs, and a stopped sandbox costs nothing and keeps its disk.
GitHub Actions: GitHub bills per minute per job, rounding each job up to the next whole minute, at a rate set by the runner type, from $0.006 a minute for 2-core Linux. Plans include monthly minutes for standard runners only, and larger and GPU runners are always billed.
Limits in those scenarios
GitHub Actions does not fit any of the five scenarios as a sandbox: it is a CI service, every job ends after 6 hours, and nothing on the disk survives to the next job. For sandboxes for your users, its terms also rule out offering Actions as a service. For 1,000 short jobs at once, Enterprise Cloud stops at 500 concurrent jobs, and bochka's $2,000 plan queues starts above 90 a minute.
| Scenario | bochka | GitHub Actions |
|---|---|---|
| One coding agent, workdays | None that bite |
|
| One agent that never stops | None that bite |
|
| 50 agents in parallel | None that bite |
|
| Sandboxes for your users | None that bite |
|
| 1,000 short jobs at once |
|
|
Which one should you use?
Use GitHub Actions when
you build, test and deploy a GitHub repository, especially for macOS, Windows or arm64 builds, or when you want the Copilot, Claude or Codex agents working on your issues and pull requests.
- Native CI for GitHub repos. For building and testing a GitHub repository, Actions runs right from pull requests and pushes with no extra service to wire up.
- macOS, Windows, arm64 and GPUs. Teams that build for Apple, Windows or arm64, or need a T4 GPU, get hosted runners for each.
- Your own runners and your own network. You can run the open-source runner on your own machines for free, or join larger runners to your Azure network.
Use bochka when
an agent needs its own machine that keeps its disk, runs past 6 hours, takes inbound traffic, shows a desktop and keeps real API keys out of reach.
- A machine that stays. On GitHub Actions every job starts on a clean VM and ends within 6 hours, so an agent reinstalls its tools and reclones the repo each time, and work past 6 hours has to be split across jobs.
- Reach it from outside. Hosted runners accept no inbound connections, so a preview, a webhook or a live look at what the agent is doing needs a third-party tunnel inside the job.
- Agents you drive from outside, keys kept out. In an Actions job, secrets arrive as environment variables inside the VM the agent controls, where one prompt injection can read them; hiding them from logs does not stop that.
Questions people ask
Can I use GitHub Actions as a sandbox for AI agents?
For agent work on a repository, yes: GitHub's own Copilot cloud agent runs on Actions runners. But each job is a fresh VM that ends within 6 hours, takes no inbound traffic, and GitHub's terms limit hosted runners to work on the repository's software project.
Is bochka cheaper than GitHub Actions?
In the five agent scenarios on this page bochka costs less, but GitHub Actions does not fit any of them, because it is a CI service with 6-hour jobs. For plain CI on a GitHub repository, its included minutes and free public-repo runners can make it the cheaper choice.
How long can a GitHub Actions job run?
Up to 6 hours per job on GitHub-hosted runners, and 15 minutes on the single-CPU slim runners. A bochka sandbox has no session cap on paid plans.
Do files persist between GitHub Actions runs?
Not on the runner. Each job starts on a new VM, and files carry over only through the cache, artifacts or a custom image. A bochka sandbox keeps its disk, saves it every minute and can be stopped and started again.
Can I run Docker and Android emulators in each?
Both run Docker, and both expose KVM on Linux for Android emulators. On GitHub runners you add the runner user to the KVM group first, and the job still ends within 6 hours.
Is bochka SOC 2 compliant?
SOC 2 is in progress. We're open about where we stand: live status at status.bochka.xyz and our data retention policy at docs.bochka.xyz/data-retention.
Start a sandbox
Install the CLI, then run bochka new.
Product preview
More comparisons
- bochka vs Bitrise
- bochka vs Buildkite
- bochka vs Blacksmith
- bochka vs CircleCI
- bochka vs Codemagic
- bochka vs Depot
- bochka vs GitLab.com hosted runners
- bochka vs WarpBuild
- bochka vs E2B
- bochka vs Daytona
- bochka vs Modal
- bochka vs Vercel Sandbox
- GitHub Actions vs CircleCI
- GitHub Actions vs Blacksmith
- GitHub Actions vs Depot
- GitHub Actions vs WarpBuild
- GitHub Actions vs Buildkite
- GitHub Actions vs GitLab.com hosted runners
- GitHub Actions vs Bitrise
- GitHub Actions vs Codemagic