For iOS and cross-platform teams on GitHub Actions

Your agents open the PRs.Your Macs run the CI.

GitHub runs five hosted macOS jobs at a time, and your agents open more pull requests than that. Buildhound turns the Mac mini you own into clean, single-use runners beside GitHub's, and new jobs route to the healthy side when it is off.

Set up by hand

Copies one prompt for Claude Code, Codex or Cursor.

faster than GitHub-hosted
About 3x
per job, destroyed after
1 VM
to boot a Linux VM
About 2 s
for public repositories
$0

Pull requestyour-org/ios-app

Add offline sync to the photo picker

Opened by your coding agent, 9 minutes ago

  • Cache photo metadata for offline use
  • Queue uploads while the device is offline
  • Tests for the sync queue

9 files changed, 214 additions, 38 deletions

Ready to mergeAll checks passed on your MacWaiting for checksRunning in fresh VMs on your Mac

Checks

All passed in 7m 11sRunning 07:11

  • Native iOS buildmacOS, in a fresh VM on your Mac7m 11s
  • Tauri desktop appLinux, in a fresh VM on your Mac3m 12s
  • Lint, typecheck and testLinux, in a fresh VM on your Mac1m 04s
The slowest check, start to finish3.2x faster
Your Mac7m 11s
GitHub-hosted23m 18s

Times measured 8 October 2026 on an M4 Pro MacBook Pro against GitHub's standard runners. The pull request is an illustration.

Measured

The wait is the slow part.

GitHub runs five hosted macOS jobs at a time. When agents push more, the rest queue for a hosted Mac before they start. Your Macs add slots beside those five.

Our own runs, on one clock

Three jobs from a production app, the same workflow on both sides.

JobYour MacGitHub-hostedSpeed-up
Native iOS buildmacOS, 8 cores against 37m 11s23m 18s3.2x faster
Tauri desktop appLinux, 8 cores against 23m 12s9m 03s2.8x faster
Lint, typecheck and testLinux, 8 cores against 21m 04s3m 12s3.0x faster
Measured 8 October 2026 on an M4 Pro MacBook Pro, against GitHub's standard runners.

Against a plain runner

Keep the Mac. Drop the upkeep.

Plenty of teams register a Mac mini with GitHub themselves. Then every job runs straight on the host, state piles up between runs, and one machine becomes a release dependency.

Clean every time

Every job boots a fresh virtual machine and is destroyed when it ends. Nothing is left from the last run, and the job reaches the internet and nothing else on your network.

  • Plain runner: Caches, keychains and leftovers pile up on the host
  • Buildhound: A fresh VM per job, off your network

Never your only runner

When the Mac is off, new jobs route to the healthy side within a minute. A job that waits too long for a busy Mac is re-run on GitHub-hosted.

  • Plain runner: An offline Mac leaves jobs waiting up to 24 hours
  • Buildhound: New jobs route to the healthy side

Looks after itself

The agent updates itself and the runner, builds the macOS image on your Mac, and keeps jobs that use secrets on Macs a person marked as trusted.

  • Plain runner: You update the runner on every Mac, every month
  • Buildhound: Updates, images and trust handled
A plain runner is fine for one dedicated Mac with no secrets.Every difference, side by side

Routing

Your Macs, plus GitHub's five.

Jobs go to your Macs first, and GitHub-hosted is still there. When every Mac is busy or away, the job runs on the healthy side instead.

Jobs on your Macs

Machines that share a label share the jobs. The Mac mini carries the base load; a plugged-in laptop takes the burst.

your-org/ios-app3 workflows
your-org/web1 workflow
RoutingYour Macs firstthen GitHub-hosted when none canFallback on
mac-miniBaseOnline
macbook-proBurstPlugged inTakes jobs only while plugged in and idle
GitHub-hostedFallbackUsed when no Mac can take the job
A sketch of the routing rules, the same picture as the Fleet page in the dashboard.Strangers' jobs stay on GitHub-hostedSecrets only on trusted Macs

The dashboard

Every job, in one place.

Where each job ran, how long it waited and what GitHub would have billed. Every view is also a command your agent can run.

The Overview page, with sample numbers.

Pricing

Flat per machine. Never per minute.

Public repositories are free on any account. Private ones are $10 a machine a month on a personal account and $20 in an organisation, whatever the minutes.

One Mac at 5,000 macOS minutes a month

GitHub would bill$3105,000 billed minutes at $0.062
Your plan$10Personal, one Mac
Ahead each month$300and every job runs on your own hardware

Three plans

Both paid plans start with 14 days free, no card. Enterprise is quoted.

Free. For work in the open.

$0for public repositories

  • Public repositories on any account
  • Up to 2 machines
  • The audit, fix pull requests and failover

Personal. For your private repositories.

$10a machine a month, or $100 a year

  • Everything in Free
  • Private repositories on your account
  • Unlimited machines

Team. For your organisation.

$20a machine a month, or $200 a year

  • Everything in Personal
  • Private repositories in an organisation
  • Pools, trust tiers, roles and an audit log
Billed on the machines connected each day, averaged over the month. Cancel any time; a first invoice is refunded within 14 days if no job ran.

Put your Mac mini to work.

One prompt into Claude Code, Codex or Cursor. Linux jobs run on your Mac within minutes; macOS jobs follow once the Mac has built its image.

Set up by hand
  • No GitHub credential on the machine
  • A fresh VM per job, off your network
  • Your agent prepares, you approve
  • How security works