Skip to content

GitHub Permissions

Runaway authenticates to GitHub with a classic personal access token (PAT). You create one token, paste it into the hub when you add an organization or personal account, and Runaway uses it to register and deregister runners on your behalf.

The scopes depend on whether the token manages an organization or a personal account.

| Account type | Scopes | What they enable | |---|---|---| | Organization | repo + admin:org | repo reads workflow runs and jobs to size each pool to real demand; admin:org registers and deregisters runners on the org. | | Personal account | repo | Reads runs and jobs, and registers and deregisters runners on your account. |

The token owner must be an active admin of any org it manages. Both organization-scope and personal-account-scope runners are supported with one token.

| Scope | What it enables | |---|---| | admin:org_hook | Lets Runaway create and manage the workflow_job webhook for an org. |

Add admin:org_hook only if you want the lower-latency webhook demand signal for an organization. Without it, that org stays on polling and the “Enable webhooks” control is disabled with a tooltip explaining the missing scope. See Webhooks for the full flow.

  • Validated live. When you paste a token, the hub calls GitHub immediately to confirm it works and has the scopes it needs. A bad or under-scoped token is rejected at the point of entry, not silently later.
  • Encrypted at rest. The token is stored encrypted in the database (AES-256-GCM) and is never echoed back in the UI or logs.
  • Shared across orgs. One token can manage many organizations, so you don’t need a separate token per org if they’re under the same account.

A PAT that expires or loses a required scope surfaces as warnings on the events page — look for github warnings there if runners stop appearing. Re-enter the token (or issue a fresh one) to clear the problem. Runaway never silently falls back to a broken token.