bochka vs GitLab.com hosted runners

GitLab.com hosted runners give each CI job a fresh VM that is deleted when the job ends, at most 3 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 merge requests. Real API keys for model providers and any other HTTPS API 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.

GitLab.com hosted runners

GitLab.com hosted runners are the machines that run GitLab CI/CD jobs for projects on GitLab.com, paid for in compute minutes.

This is a CI service, not a sandbox API. Each job gets a new VM on Google Cloud (Linux and Windows) or on AWS Mac hardware (macOS), with passwordless sudo, and the VM is deleted right after the job. It is built for building, testing and deploying the code in a GitLab project, and GitLab's Duo Agent Platform also runs Claude Code and Codex agents as CI/CD jobs on these runners.

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 workloadbochka: price rankGitLab.com hosted runners: 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 3-hour CI job does not give you.
3rd cheapest of 367
$634 a month
347th of 367, with limits
$14,454 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 3 hours and start from a clean VM.
5th cheapest of 366
$657 a month
353rd of 366, with limits
$21,858 a month
Code interpreter bursts
100 at once · 1 vCPU / 2 GB · 200,000 sessions of 1 min a month
186th of 345, with limits
$2,000 a month
320th of 345, with limits
$1,896 a month
Sandboxes for your users
300 at once · 2 vCPU / 4 GB · 30,000 sessions of 23 min a month
Hosted runners take no inbound traffic and run only jobs from GitLab pipelines, so they are not built to hand machines to your own users.
Cheapest of 361
$209 a month
331st of 361, with limits
$6,133 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
318th of 360, with limits
$29,762 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
330th of 364, with limits
$4,758 a month
CI runners
40 at once · 8 vCPU / 16 GB · 6,000 sessions of 12 min a month
Both fit; GitLab's runners are the native choice for a GitLab project's pipelines, while bochka suits CI that needs a warm disk between runs or jobs longer than 3 hours.
4th cheapest of 377
$86 a month
128th cheapest of 377
$2,089 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; GitLab.com instance runners have none of these.
18th cheapest of 368
$26 a month
358th of 368, with limits
$805 a month
Computer-use agents
50 at once · 4 vCPU / 8 GB · 20,000 sessions of 15 min a month
The 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
342nd of 369, with limits
$4,278 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
144th of 367, with limits
$2,118 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
143rd of 346, with limits
$2,854 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
319th of 338, with limits
$58,429 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
87th of 360, with limits
$1,383 a month
GPU eval jobs
10 at once · 8 vCPU / 32 GB · 500 sessions of 30 min a month
GitLab offers a Linux runner with an NVIDIA T4 on Premium and Ultimate; bochka has no GPUs.
Can't run itCan't run it
macOS agents
5 at once · 4 vCPU / 8 GB · 1,000 sessions of 20 min a month
GitLab has hosted macOS runners on Apple silicon in beta for Premium and Ultimate; bochka runs Linux only.
Can't run it24th of 36, with limits
$1,069 a month

Key features

FeaturebochkaGitLab.com hosted runners
Kind of productSandbox API: create, stop, fork and reach machines from your codeCI runners: jobs run from a GitLab project's pipeline file
IsolationFull VM with its own kernel on dedicated AMD Ryzen 9 9950X hosts, with root and systemdNew VM per job on Google Compute Engine, with passwordless sudo; Linux jobs run in a privileged Docker container
Session lengthNo cap on paid plans; you set the time to liveUp to 3 hours per job
Disk between runsDisk persists, saved every minute and on stop; a stopped sandbox costs nothingThe VM is deleted after each job; files carry over only through a shared cache (5 GB per archive, removed after 14 days unused) or artifacts
ForkFork a running sandbox with its diskNo; every job starts from a fresh VM and a container image
Nested virtualizationYes, /dev/kvm for Android emulators and VMsNot documented; privileged mode is described for Docker-in-Docker only
Inbound accessSSH, HTTPS URLs for up to 50 ports, raw TCP, dedicated IPv6 or IPv4None; inbound traffic from the internet is blocked, and instance runners have no interactive web terminal
Desktop and computer useLinux desktop streamed at 60fps, Chromium, computer use APIHeadless; macOS runners do not support jobs that need UI interaction
Coding agentsSeven agents preinstalled in your sandbox, driven from outside with a prompt, steer and events APIDuo Agent Platform runs Claude Code, Codex, Amazon Q and Gemini agents from mentions in issues and merge requests, on Premium and Ultimate
Keeping API keys out of the machineCredentials proxy for model providers and any HTTPS API; switch a credential to another account when credits run outGitLab-managed credentials through an AI Gateway for the Claude and Codex agents only; other secrets enter the job as CI/CD variables
Biggest machineUp to 16 vCPU / 32 GB on the $100 plan and aboveLinux up to 32 vCPU / 128 GB on Premium and Ultimate
Operating systems and GPUsLinux x64, no GPUsLinux x64 and Arm64, Windows (beta), macOS on Apple silicon (beta), and a Linux runner with an NVIDIA T4
RegionsEU only (Germany, Finland, France)US (Google Cloud us-east1 by default)
Self-hostingNoOpen-source GitLab Runner on your own machines, with no compute minutes used
Compliance and transparencySOC 2 is in progress. We're open about where we stand: live status and data retention policy.SOC 2
Every feature Battleships tracks (43)
FeaturebochkaGitLab.com hosted runners
Full VM (own kernel)YesYes
Docker insideYesYes
Nested virtualizationYesNo
RootYesYes
SystemdYesNo
Desktop GUIYesNo
BrowserYesYes
Computer-use APIYesNo
SSHYesNo
Persistent diskYesNo
Pause/resumeYesNo
Automatic snapshotsYesNo
Fork/cloneYesNo
Live fork (no pause)YesNo
Memory forkNoNo
Custom image (Docker or snapshot)YesYes
≥24 h sessionsYesNo
Idle auto-stopNoYes
Wake on requestNoNo
HTTPS preview URLsYesNo
Raw TCP inboundYesNo
Public IPv4NoNo
Egress allowlistNoNo
Secret proxyYesYes
Secret proxy for any APIYesNo
Preinstalled agentsYesYes
Agent harness APIYesYes
MCP serverNoNo
GPUNoYes
WindowsNoYes
Arm64NoYes
Self-hostingNoYes
BYOCNoNo
Open sourceNoYes
Scoped API keysYesNot published
Spend limitsYesNot published
Usage per sandbox (API)YesNo
Audit logsNoYes
SSONoYes
SOC 2NoYes
HIPAANoNo
EU data residencyYesNo
Zero data retentionYesNot published

Performance

bochka26.69 runs/s
GitLab.com hosted runnersNot measured

There is no comparable measurement for GitLab.com 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. GitLab.com hosted runners 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.

Scenariobochka, a monthGitLab.com hosted runners, 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$119 · Premium · with limits
One agent that never stops
4 vCPU / 8 GB, 50 GB disk, running 24/7 all month
$26 · $20/mo$805 · Premium · 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$9,491 · Premium · 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$2,658 · Premium · 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$5,896 · Premium · 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.

GitLab.com hosted runners: Each job uses compute minutes equal to its run time times a cost factor: 1 for small Linux, 2 for medium, up to 12 for the biggest Linux and macOS machines. Plans include monthly minutes per group (Premium is $29 per user a month, billed yearly), and extra minutes cost $10 per 1,000, bought ahead of time.

Limits in those scenarios

GitLab.com hosted runners do not fit any of the five scenarios as a sandbox: they are CI runners, every job ends after 3 hours, and nothing on the disk survives to the next job. When a group's minutes run out, new jobs stop until you buy more or the month resets. GitLab publishes no limit on how many runner VMs run at once, so the 300 and 1,000 machine scenarios are not confirmed, and bochka's $2,000 plan queues starts above 90 a minute for the 1,000-job burst.

ScenariobochkaGitLab.com hosted runners
One coding agent, workdaysNone that bite
  • Premium: sessions capped at 3 h
  • missing persistent disk
  • different kind of product: CI runner
  • no persistent disk: files lost when it stops or sleeps
One agent that never stopsNone that bite
  • Premium: sessions capped at 3 h
  • missing persistent disk
  • different kind of product: CI runner
  • no persistent disk: files lost when it stops or sleeps
50 agents in parallelNone that bite
  • Premium: sessions capped at 3 h
  • missing persistent disk
  • different kind of product: CI runner
  • no persistent disk: files lost when it stops or sleeps
Sandboxes for your usersNone that bite
  • different kind of product: CI runner
  • not confirmed: how many machines can run at once (you need 300; the typical published limit is 50)
  • egress price not published
1,000 short jobs at once
  • max 2,400 starts/day (needs ~6,667)
  • max 600 starts/hour (needs ~1,000)
  • bursts above 90 starts/min are queued (a burst of 333 takes ~4 min to start)
  • different kind of product: CI runner
  • not confirmed: how many machines can run at once (you need 1,000; the typical published limit is 50)
  • egress price not published

Which one should you use?

Use GitLab.com hosted runners when

you build, test and deploy a GitLab project, especially for macOS, Windows or Arm64 builds, or when you want Claude Code or Codex working on your GitLab issues and merge requests.

  • Native CI for GitLab projects. For building and testing a GitLab project, these runners work from the first pipeline with no extra service to wire up.
  • macOS, Windows, Arm64 and a GPU. Teams that build for Apple, Windows or Arm64, or need a T4 GPU in CI, get a hosted runner for each.
  • Your own runners, free of minutes. You can run the open-source GitLab Runner on your own machines, and those jobs use no compute minutes.

Use bochka when

an agent needs its own machine that keeps its disk, runs past 3 hours, takes inbound traffic, shows a desktop and keeps real API keys out of reach.

  • A machine that stays. On GitLab.com every job starts on a clean VM and is cut off at 3 hours, so an agent reinstalls its tools and reclones the repo each time, and the shared cache tops out at 5 GB per archive.
  • Reach it from outside. GitLab blocks all inbound traffic to hosted runners and offers no web terminal on them, so a preview, a webhook or a live look at the agent needs a third-party tunnel inside the job.
  • Agents you drive from outside, keys kept out. GitLab keeps model keys out only for its managed Claude and Codex agents. Any other token arrives as a CI/CD variable inside the VM the agent controls, where one prompt injection can read it.

Questions people ask

Can I use GitLab CI runners as a sandbox for AI agents?

For agent work on a GitLab project, yes: the Duo Agent Platform runs Claude Code and Codex as CI/CD jobs on these runners. But each job is a fresh VM that ends within 3 hours, takes no inbound traffic and is deleted afterwards.

Is bochka cheaper than GitLab.com hosted runners?

In the five agent scenarios on this page bochka costs less, but GitLab's runners do not fit any of them, because they run 3-hour CI jobs. For plain CI on a GitLab project, the minutes included in your plan can make it the cheaper choice.

How long can a job run on GitLab.com hosted runners?

Up to 3 hours, whatever timeout the project sets. A bochka sandbox has no session cap on paid plans.

Do files persist between GitLab CI jobs?

Not on the runner. Each job gets a new VM that is deleted right after, and files carry over only through the shared cache or artifacts. A bochka sandbox keeps its disk, saves it every minute and can be stopped and started again.

Can I SSH into a GitLab hosted runner?

No. GitLab blocks inbound traffic to hosted runners, and its interactive web terminal only works on runners you host yourself. You can SSH into a bochka sandbox and open HTTPS URLs on up to 50 ports.

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 product preview · Pricing, benchmarks and commands are illustrative. Sandbox provisioning is not connected.