01 / Context
When a self-hosted runner makes sense
Environment control
You can use hardware, SDKs, tools and local services that are not available on a GitHub-hosted runner.
Local responsibility
Operating-system updates, dependencies, disk space and machine hygiene become your responsibility.
Not a clean machine per job
A self-hosted runner can retain state between jobs. Do not assume the same isolation as a fresh ephemeral hosted runner.
Windows is supported
GitHub documents self-hosted runners on Windows and lets you configure them interactively or as a Windows service.
02 / Setup
Setup and service mode on Windows
GitHub generates the download, configuration and registration commands under Settings → Actions → Runners for the target repository or organization. The registration token is time-limited. On Windows, configuring the runner as a service requires an administrator shell.
- Download and configure the runner from the instructions generated for the repository or organization that should receive it.
- If the runner should operate as a Windows service, choose that during initial configuration; changing it later may require reconfiguration.
- Keep Windows and installed software patched. GitHub updates the runner application, but it does not maintain the rest of the host.
- Do not copy registration tokens or runner credentials into monitoring tools, screenshots or external configuration files.
03 / Queue and labels
How jobs are routed and queued
GitHub looks for an online, idle runner that matches the labels and groups declared in runs-on. If none is available, the job remains queued until a compatible runner comes online. This matters when you have several local runners or deliberately keep only part of the pool connected.
What to watch on a host with several runners
- Which runners are READY, BUSY, STOPPED or in an error state.
- Whether runner labels and GitHub target match the jobs you expect it to receive.
- Host CPU, memory and disk use when two jobs compete for the same machine.
- Local runner logs when a job does not start, stalls or ends without a trustworthy terminal result.
04 / Local management
Where NRS Workbench fits
NRS Workbench does not register runners with GitHub and does not replace GitHub's setup flow. It works with already configured local runners and brings state, control, diagnostics and retained local history into one Windows application.
- Start, stop and restart interactive runners or runners configured as Windows services.
- Local READY, BUSY and STOPPED states plus diagnostics from runner files.
- Optional Smart Queue that can keep one or two runners connected and rotate idle runners without intentionally interrupting active jobs.
- History derived from local Worker logs: it is runner-processed job history, not complete GitHub account history.
- Host CPU, RAM and disk use alongside runner activity.
05 / Checklist
Checklist before leaving it unattended
- 01
Confirm the runner is online in GitHub and its labels match the workflow.
- 02
Decide whether it should run interactively or as a Windows service.
- 03
Limit who is allowed to execute workflows on that machine.
- 04
Avoid letting two heavy jobs exhaust CPU, RAM or disk on a shared host.
- 05
Review logs, free disk space, updates and workflow-exposed credentials periodically.
06 / Security
Security: the most important boundary
GitHub warns that a persistent self-hosted runner can be compromised by untrusted workflow code and recommends extreme caution with public repositories. NRS Workbench does not sandbox jobs or make unknown pull-request code safe to execute. Workflow policy remains the first line of defence.