Get started

Why not a plain runner

GitHub's own self-hosted runner is free. Here is what it does with your machine, and what Buildhound does instead.

What a plain runner does#

GitHub lets you register any machine as a self-hosted runner for free: download the runner, configure it, run it as a service. The job then runs straight on the host, as the user the runner runs as. Whatever it writes stays for the next job, it can reach anything the machine can reach, and if the machine is off, a job for its label waits up to 24 hours and then cancels. GitHub's own docs advise against self-hosted runners on public repositories, because a pull request from a fork would run on your machine.

Side by side#

GitHub's self-hosted runnerBuildhound
Each jobSelf-hosted runnerNo: Runs straight on the host. Files, caches and leftovers carry over to the next job.BuildhoundYes: Runs in a fresh virtual machine, destroyed when the job ends.
Your machineSelf-hosted runnerNo: The job sees the machine's files, keychain and network.BuildhoundYes: The job reaches the internet and nothing else: no host files, no local network, no cloud metadata.
SecretsSelf-hosted runnerNo: Every job can use them, on any machine.BuildhoundYes: Jobs that use secrets go only to a machine a person marked as trusted.
ForksSelf-hosted runnerNo: On a public repository, a fork's pull request runs on your machine. GitHub advises against it.BuildhoundYes: Stays on GitHub-hosted, and so does any job a stranger can start, by the workflow expression and by the control plane.
Machine offlineSelf-hosted runnerNo: Jobs wait up to 24 hours, then cancel. Nothing falls back.BuildhoundYes: New jobs route to the healthy side within a minute; a stuck job is re-run.
LaptopsSelf-hosted runnerNo: Takes jobs on battery, while you work, with the lid half closed.BuildhoundYes: By default only when plugged in; only when idle, or paused with one click, as you choose.
Several machinesSelf-hosted runnerNo: Labels, no priority: any runner with the label may take the job.BuildhoundYes: Primary, backup and off, so laptops stay out of the way until the base machines are full.
Runner updatesSelf-hosted runnerNo: You keep it within GitHub's 30-day window, on every machine.BuildhoundYes: The agent updates itself and refuses to run an old runner.
SetupSelf-hosted runnerNo: Download, configure and register a service, per machine, in the browser.BuildhoundYes: One prompt to your coding agent. One command by hand.
CostSelf-hosted runnerYes: Free.BuildhoundYes: Free for public repositories. $10 or $20 a machine a month for private ones, never per minute.

Every line on Buildhound's side is shipped behaviour. Security rules are in Security; routing in Failover and Machines.

When a plain runner is enough#

A dedicated box, a private repository, no secrets beyond GITHUB_TOKEN, nobody working on the machine, and you are happy to keep the runner updated and to wait when it is down. That is a fine setup and it costs nothing. Buildhound is for the rest of what you own: the laptop you work on, the Mac mini that should stay clean, the team whose jobs carry secrets, and anyone who wants jobs to keep moving when a machine is away.