boat 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. boat gives each agent a full VM that keeps its disk, runs as long as you want and can be reached from outside.

Where boat stands out

A machine that stays

A boat 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 boat 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

boat

boat.dev 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.

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.

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 workloadboat: price rankGitHub 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 boat 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 boat 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 itCan'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; boat runs Linux only.
Can't run it25th of 36, with limits
$1,178 a month

Key features

FeatureboatGitHub Actions
Kind of productSandbox API: create, stop, fork and reach machines from your codeCI service: jobs run from workflow files in a GitHub repository
IsolationFull VM with its own kernel on dedicated AMD Ryzen 9 9950X hosts, with root and systemdNew VM per job on Azure (Linux, Windows) or GitHub's Mac cloud, with passwordless sudo
Session lengthNo cap on paid plans; you set the time to liveUp to 6 hours per job
Disk between runsDisk persists, saved every minute and on stop; a stopped sandbox costs nothingEvery job starts on a fresh VM; files carry over only through cache, artifacts or custom images
ForkFork a running sandbox with its diskNo; custom images are a template for new runners, not a copy of a live one
Nested virtualizationYes, /dev/kvm for Android emulators and VMsYes on Linux runners, including the 2-vCPU ones, after adding the runner user to the KVM group
Inbound accessSSH, HTTPS URLs for up to 50 ports, raw TCP, dedicated IPv6 or IPv4None; GitHub says hosted runners never need inbound connections
Desktop and computer useLinux desktop streamed at 60fps, Chromium, computer use APIHeadless runners; browsers are preinstalled for tests
Coding agentsSeven agents preinstalled in your sandbox, driven from outside with a prompt, steer and events APICopilot cloud agent, plus Claude and Codex in public preview, working on issues and pull requests on Actions runners
Keeping API keys out of the machineCredentials proxy for model providers and any HTTPS API; switch a credential to another account when credits run outSecrets enter the job as inputs or environment variables and are hidden from logs
Operating systemsLinux x64Linux x64 and arm64, Windows x64 and arm64, macOS
GPUsNoneLinux and Windows larger runners with an NVIDIA T4
Regions and networkingEU only (Germany, Finland, France), open internetAzure; larger runners can join your Azure network in regions across the US, EU and APAC, with static IP ranges
Self-hostingNoOpen-source runner on your own machines, free to use
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)
FeatureboatGitHub Actions
Full VM (own kernel)YesYes
Docker insideYesYes
Nested virtualizationYesYes
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 allowlistNoYes
Secret proxyYesNo
Secret proxy for any APIYesNo
Preinstalled agentsYesYes
Agent harness APIYesYes
MCP serverNoYes
GPUNoYes
WindowsNoYes
Arm64NoYes
Self-hostingNoYes
BYOCNoNo
Open sourceNoYes
Scoped API keysYesNot published
Spend limitsYesYes
Usage per sandbox (API)YesYes
Audit logsNoYes
SSONoYes
SOC 2NoYes
HIPAANoNo
EU data residencyYesYes
Zero data retentionYesNot published

Performance

boat26.69 runs/s
GitHub ActionsNot measured

There is no comparable measurement for GitHub Actions hosted runners in the hpc-sandbox-benchmarks CPU test. boat 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.

Scenarioboat, a monthGitHub 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

boat: 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 boat's $2,000 plan queues starts above 90 a minute.

ScenarioboatGitHub Actions
One coding agent, workdaysNone that bite
  • Team: sessions capped at 6 h
  • missing persistent disk
  • different kind of product: CI runner
One agent that never stopsNone that bite
  • Team: sessions capped at 6 h
  • missing persistent disk
  • different kind of product: CI runner
50 agents in parallelNone that bite
  • Team: sessions capped at 6 h
  • missing persistent disk
  • different kind of product: CI runner
Sandboxes for your usersNone that bite
  • different kind of product: CI runner
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)
  • Enterprise Cloud: max 500 concurrent
  • different kind of product: CI runner

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 boat 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 boat cheaper than GitHub Actions?

In the five agent scenarios on this page boat 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 boat 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 boat 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 boat SOC 2 compliant?

SOC 2 is in progress. We're open about where we stand: live status at status.ascii.dev and our data retention policy at docs.boat.dev/data-retention.

Start a sandbox

Install the CLI, then run boat new.

7-day free trial

More comparisons