gh-runnermaxxer
How do I run a bunch of GitHub Actions runners on my own machine?
gh-runnermaxxer is a terminal UI for running many GitHub Actions self-hosted runners on one machine, across any number of repositories and organizations. It downloads the runner, registers it, and supervises it while the program is open.
What is gh-runnermaxxer?
gh-runnermaxxer is a single Go program with a terminal dashboard. Clone the repo and run ./start; it builds the binary if needed and opens the TUI. A short setup screen asks for a runner name prefix and a maximum runner count, then you press a to add a repository or organization, pick how many runners it gets, and press Enter. The GitHub Actions runner for your OS and architecture is downloaded and checksum-verified the first time it is needed. Authentication goes through the GitHub CLI, so there are no personal access tokens to manage.
One program, one process
Runners run only while the program is open. Quitting stops them, and if jobs are mid-flight you choose between stopping now or waiting for them to finish. Runners stay registered with GitHub, so the next launch brings them back, and if the program was killed outright it adopts any runners still running instead of starting duplicates.
Self-healing
A runner that dies is restarted with exponential backoff; one that crash-loops is quarantined instead of restarting forever. Runners that GitHub reports offline are recycled even if the local process looks alive, and if the API is unreachable the check is skipped so a network outage never triggers mass restarts. Scaling down never aborts a job: a busy runner is marked draining and removed when its current job ends.
Autoscaling and labels
Opt-in autoscaling gives a project min and max bounds. It grows when GitHub has queued runs and no idle runner, and shrinks after a runner has sat idle for a set number of minutes. Labels such as OS, architecture, Docker, GPU and memory are detected automatically, so a workflow can target [self-hosted, macos, arm64, docker].
