Buildhound vs ushr
ushr schedules GitHub Actions jobs on your own Macs and Linux machines, with an open-source agent and a hosted control plane. Buildhound does the same job with a fresh VM for every job and GitHub-hosted as the fallback.
- Checked 16 October 2026
- No referral agreement
What a month costs
- GitHub's self-hosted runnerregistered and kept up by hand$0
- ushra host is one machine$49
- Buildhound Teammachines you already have$72
ushr costs less here, $49 against $72 for 3 machines on Team. On a personal account, Personal is $30.
List prices, before free minutes or credits on either side. One machine runs these minutes a job at a time; Personal is $10 a machine on a personal account.
Choose the one that fits
Choose ushr when
- You want open source you can run yourself; its controller and agent are Apache-2.0.
- One pool should serve several organisations.
- You want the lowest price for a small fleet, with one host free and 3 for $49 a month.
Choose Buildhound when
- Jobs should keep moving while a machine is offline, with GitHub-hosted as the fallback.
- Linux jobs need their own VM instead of a container on the host.
- Laptops join the Fleet and take jobs only while plugged in and not in use.
Side by side
ushr from its own pages, checked 16 October 2026
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.
- ushrBy hostFree for one host and one GitHub account or organisation; $49 a month for up to 3 hosts, then $19 a host.
- macOS
- BuildhoundYour MacA fresh macOS VM per job; Apple allows two per Mac.
- ushrYour MacIn a Tart or Lume VM.
- Linux
- BuildhoundYour Mac or Linux boxA fresh Linux VM per job, arm64 on a Mac.
- ushrYour machineIn a Docker or Podman container on the host.
- Windows
- BuildhoundNot yetWindows jobs stay on GitHub-hosted.
- ushrNot offered
Where it runs
- Machines
- BuildhoundYoursA spare Mac, a Linux box, or a laptop while plugged in and not in use.
- ushrYoursYour own Macs and Linux machines.
- Each job
- BuildhoundA fresh VM, destroyed afterIt reaches the internet and never your network.
- ushrA fresh runnermacOS in a VM, Linux in a container.
- Secrets
- BuildhoundOn your hardwareOnly on a machine a person marked Trusted.
- ushrOn your hardwareThe GitHub App key stays on your machine.
When things change
- Runners unavailable
- BuildhoundNew jobs route to the healthy sideGitHub-hosted, within about two minutes; a stuck job is re-run.
- ushrNo fallback in its docsWhile its control plane is down, running jobs finish and no new ones start.
- Jobs at once
- BuildhoundAs many as your machines holdSuch as one macOS and one Linux job on a 24 GB Mac mini. When every machine is busy, new jobs go to GitHub-hosted after two and a half minutes.
- ushrOne shared poolAcross organisations, by priority and wait time.
- Setup
- BuildhoundOne prompt to your coding agentOr two commands by hand.
- ushrOne agent per host
ushr initrewritesruns-onto self-hosted labels.
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.
runs-on: [self-hosted, macos]The job runs where ushr runs it.runs-on: ${{ vars.BUILDHOUND_MACOS || 'macos-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.
- The Buildhound agent holds no GitHub credential
- A fresh VM per job, off your network
- Your agent prepares, you approve
- How security works