Same checks. Your machine. No minutes burned.
When coding agents eat your private repo's GitHub Actions quota, route CI to your own computer. GitHub still shows the same checks and logs. Switch back whenever you like.
Set up relayrunner in this checkout using https://raw.githubusercontent.com/atticoos/relayrunner/main/docs/agent-install.md
Prefer the CLI?
For private repos you control. Jobs run as you, on your machine. Is it safe?
Agents ship faster than your quota refills.
GitHub Free gives private repositories 2,000 Actions minutes a month. A hundred agent PRs can use more than half of that, and a busy agent ships a hundred PRs in a day.
One setup. Then it's a switch.
-
Your agent sets it up
It finds the jobs that can run on your machine, lets you pick, and shows the patch before applying anything. relayrunner downloads GitHub's official runner, registers it to the repo, and waits until GitHub reports it online.
The only workflow change: one line per opted-in job.
Agent setup, start to finish- Checked Node.js, Git and your GitHub CLI session
- Installed
relayrunnerand its skill - Ran
relayrunner discoverand found 4 jobs - Which jobs should run on your machine? testlinttypecheckdeploy
- Approve this patch?
jobs: test: - runs-on: ubuntu-latest + runs-on: ${{ vars.RELAYRUNNER_LABEL || 'ubuntu-latest' }} steps: - Downloaded GitHub's official runner and registered it to the repo
- Self-hosted runner online. Commit and push the patch to finish.
-
Flip CI to your machine
Every opted-in job across branches and pull requests now runs locally. relayrunner checks that your runner is online before it moves anything.
No workflow edits, no commits. It sets a repository Actions variable.
Terminal$ relayrunner switch local you/sideproject: local (repository-wide) Runner relayrunner-3f9c…: online -
Flip it back when you're done
Future jobs go back to GitHub-hosted runners. Anything already running on your machine finishes, and jobs still queued for it are listed so you can recover them.
Same check names in GitHub either way.
Terminal$ relayrunner switch hosted you/sideproject: GitHub-hosted Jobs still queued for the local runner: 0
Ask your agent, or type it yourself.
The bundled skill turns plain requests into CLI calls for Claude Code, Codex and Cursor. Every command also takes --json for agents and scripts.
- relayrunner discover
- List jobs that can move to your machine.
- relayrunner preview --job .github/workflows/ci.yml:test
- Show the exact workflow patch and an approval fingerprint.
- relayrunner setup --job .github/workflows/ci.yml:test --approve <fingerprint>
- Register the runner and apply the reviewed patch.
- relayrunner switch local
- Route opted-in jobs to this machine.
- relayrunner status
- Current route and runner availability.
- relayrunner switch hosted
- Send future jobs back to GitHub.
A relief valve, not infrastructure.
A self-hosted runner executes whatever the workflow tells it to, as your user, on your computer. That's fine for your own private side project. It's a real risk anywhere else.
Built for
- Private repositories on github.com that you control
- One developer, one machine
- Busy stretches where agents push all day
- Jobs your machine can actually run
Not for
- Public repositories or forks
- Repos where anyone you don't trust can edit workflows
- Team or production CI
- Jobs that need a clean machine every run
Get your minutes back.
Paste this into your agent from the checkout you want to set up.
Set up relayrunner in this checkout using https://raw.githubusercontent.com/atticoos/relayrunner/main/docs/agent-install.md
Needs Node.js 22+, Git and a signed-in GitHub CLI. Runs on macOS or Linux, x64 or ARM64.
For private repos you control. Jobs run as you, on your machine. Is it safe?