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.

No RunnerYard accountNo GitHub token copy-pasteNo workflow switch until you confirm

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.

Terminal
npx runneryard init --github https://github.com/acme/widgets

The 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.

Terminal
npx runneryard auth github create \
  --github https://github.com/acme/widgets \
  --controller-app acme-ci-controller

What 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.

Terminal
npx runneryard doctor --provider fly \
  --controller-app acme-ci-controller \
  --worker-app acme-ci-runners

If 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.

Terminal
fly ssh console --app acme-ci-controller \
  --command '/usr/local/bin/runneryard status'

fly machines list --app acme-ci-runners

Use 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.

Terminal
npx runneryard route enable \
  --github https://github.com/acme/widgets \
  --label acme-linux \
  --confirm-canary

Hosted 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.