Buildhound vs Actions Runner Controller

Actions Runner Controller is GitHub's Kubernetes operator that scales self-hosted runners for GitHub Actions as ephemeral containers. It is free and open source, and runs on a cluster you operate. Buildhound runs jobs on machines you already have, macOS included, with GitHub-hosted as the fallback.

Set up by hand

At a glance

Clean runners on machines you already have$24a machine a month on Team
Actions Runner ControllerSelf-hosted runners on your KubernetesFreesoftware, on a cluster you run

Actions Runner Controller publishes no price we can put beside a machine, so this page compares how each works.

Choose the one that fits

Choose Actions Runner Controller when

  • You already run Kubernetes and want runners on it.
  • Your jobs are Linux containers.
  • You want GitHub's own open-source controller and no vendor at all.

Choose Buildhound when

  • Your CI includes macOS, which it does not run.
  • You have Macs or a Linux box but no cluster to look after.
  • You want a fresh VM for each job rather than a container on a shared node, with GitHub-hosted as the fallback.

Side by side

Actions Runner Controller from its own pages, checked 17 October 2026

Two ways to run the same workflow
Clean runners on machines you already have$24a machine a month on Team
Actions Runner ControllerSelf-hosted runners on your KubernetesFreesoftware, on a cluster you run

Price

How it is priced
BuildhoundFlat, per machine$10 a machine a month on a personal account, $24 in an organisation, counted only on days it runs a job. Public repositories free.
Actions Runner ControllerFreeOpen source under Apache-2.0; you pay for the cluster.
macOS
BuildhoundYour MacA fresh macOS VM per job; Apple allows two per Mac.
Actions Runner ControllerNot offeredRunners are Linux containers on Kubernetes.
Linux
BuildhoundYour Mac or Linux boxA fresh Linux VM per job, arm64 on a Mac.
Actions Runner ControllerOn your clusterContainer runners that scale with the queue.

Where it runs

Machines
BuildhoundYoursA spare Mac, a Linux box, or a laptop while plugged in and not in use.
Actions Runner ControllerYour Kubernetes cluster
Each job
BuildhoundA fresh VM, destroyed afterIt reaches the internet and never your network.
Actions Runner ControllerAn ephemeral runner containerCreated for the job and removed after.
Secrets
BuildhoundOn your hardwareOnly on a machine a person marked Trusted.
Actions Runner ControllerOn your cluster

When things change

Setup
BuildhoundOne prompt to your coding agentOr two commands by hand.
Actions Runner ControllerHelm chartsThe controller and a runner scale set for each label.

One line in runs-on

Both ask you to change the runner label in your workflow. Your coding agent makes the Buildhound change in a pull request.

Actions Runner Controllerruns-on: arc-runner-setThe job runs where Actions Runner Controller runs it.
Buildhoundruns-on: ${{ vars.BUILDHOUND_LINUX || 'ubuntu-latest' }}The job runs on your machine while one can take it, and on GitHub-hosted when none can.

Put the machines you already have to work.

A spare Mac, a Linux box, or the laptop you code on while it is plugged in and not in use. One prompt into Claude Code, Codex or Cursor: Linux jobs run within minutes, macOS jobs once the Mac has built its image.

Set up by hand
  • The Buildhound agent holds no GitHub credential
  • A fresh VM per job, off your network
  • Your agent prepares, you approve
  • How security works