First-run path
From repository to green canary.
Start with one trusted private repository. The CLI writes reviewable config, opens GitHub when approval is needed, and keeps every credential out of this website.
Not started → Browser approval → App installed → Provider ready → Canary queued → Green → Cleanup verified
Generate the local scaffold
Run this from the target repository. It creates provider config and a standalone canary workflow; it does not deploy or upload anything.
npx runneryard init --github https://github.com/acme/widgetsThe default ceiling is intentionally small. Keep it for the canary, then size from observed concurrency using the configuration reference.
Ready whenThe generated diff contains only .runneryard config and the canary workflow.
Create an isolated compute boundary
Choose a provider. Keep the trusted controller separate from disposable workers, and keep the worker network away from production.
Ready whenThe controller has durable storage; the worker scope contains zero secrets.
Connect GitHub in the browser
The recommended flow creates a private GitHub App owned by you. GitHub shows its owner, installation target, and exact runner-management permission before approval.
npx runneryard auth github create \
--github https://github.com/acme/widgets \
--controller-app acme-ci-controllerWhat happens: the CLI opens a loopback callback, receives the one-time app key, verifies it against the repository you selected, and streams it to Fly over stdin. It is never shown or sent to RunnerYard.
Already operate a GitHub App? Use bring-your-own mode with a local PEM file.
Ready whenThe CLI verifies the installation, stores the key in your selected sink, and prints a non-secret receipt.
Prove the boundary before deployment
Doctor checks the CLIs, app separation, controller credentials, worker secrets, and provider-specific isolation. A failure stops the path.
npx runneryard doctor --provider fly \
--controller-app acme-ci-controller \
--worker-app acme-ci-runnersIf a check fails, stop and use its safe next action. Diagnostic output reports credential presence and scope, never credential values.
Ready whenEvery required doctor check says pass; warnings are understood and accepted.
Deploy and run one canary
Initialize the durable budget once, deploy the pinned controller image, then trigger the generated workflow manually.
fly ssh console --app acme-ci-controller \
--command '/usr/local/bin/runneryard status'
fly machines list --app acme-ci-runnersUse the exact deployment commands on the Fly or Hetzner page. Never initialize the ledger again during an upgrade.
Ready whenGitHub is green, status shows the full lifecycle, and provider inventory returns to zero workers.
Enable the fleet deliberately
Keep the hosted runner as the default while you qualify the canary. Enabling changes one repository variable and requires an explicit canary confirmation.
npx runneryard route enable \
--github https://github.com/acme/widgets \
--label acme-linux \
--confirm-canaryHosted fallback is a manual repository-variable switch, not an availability detector. Emergency return: npx runneryard route disable --github https://github.com/acme/widgets
For a team or agent-heavy repository, commit the reviewed scaffold and give contributors the repository agent contract. RunnerYard provides compute; causal CI and the protected merge lane remain repository policy.
Ready whenroute status reports your qualified label; one low-risk CI job completes there.