manage-gh-runners
Handles administrative tasks for self-hosted GitHub Actions runners in Docker.
Install
mkdir -p .claude/skills/manage-gh-runners && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/12457" && unzip -o skill.zip -d .claude/skills/manage-gh-runners && rm skill.zipInstalls to .claude/skills/manage-gh-runners
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Add, remove, list, or swap GitHub Actions self-hosted runners on a CI host that uses the env-var-driven `gh-runner` docker image (raw `docker run`, no compose). Triggers, "add gh runner", "remove gh runner", "list ci runners", or similar. Run `setup-ci-host` first if /data/miles_ci is not yet provisioned. Boundary vs the `actions-runner` + docker-compose flow documented in `tests/ci/README.md`, only use this skill when `docker ps` shows the `gh-runner` image. Does NOT prepare the host filesystem layout — that is `setup-ci-host`'s job.Key capabilities
- →List existing GitHub Actions runners
- →Add a new GitHub Actions runner
- →Remove an existing GitHub Actions runner
- →Swap GitHub Actions runners
- →Apply specific labels and CVD partitioning to runners
How it works
The skill executes a script to manage GitHub Actions self-hosted runners that use the `gh-runner` Docker image. It handles runner registration, deregistration, and specific configurations.
Inputs & outputs
When to use manage-gh-runners
- →Add a new CI runner
- →Remove an inactive runner
- →List current runners
About this skill
Manage gh-runner Containers
Add, remove, or swap GitHub Actions self-hosted runners on a CI host that
uses the gh-runner image (raw docker run, env-var driven). This is
distinct from the actions-runner + docker-compose flow documented in
tests/ci/README.md.
If you don't already know which flow your host uses, check:
docker ps --format '{{.Names}}\t{{.Image}}'
gh-runnerimage → use this skill- image starting with
ghcr.io/actions/actions-runner→ use the README's compose flow
Run Step 0 (setup-ci-host) before any of the
operations below if /data/miles_ci is not yet provisioned on the host.
Usage
cd /root/miles/.claude/skills/manage-gh-runners
export REPO_URL=https://github.com/<org>/<repo>
./manage-runners.sh list
./manage-runners.sh add --name <host>-4gpu-0 --cvd 0,1,2,3 --hwtype h200 --ngpu 4 --token <REG_TOKEN>
./manage-runners.sh remove --name <host>-4gpu-0 --token <REG_TOKEN>
Get <REG_TOKEN> from the repo's settings UI:
https://github.com/<org>/<repo>/settings/actions/runners/new?arch=x64&os=linux.
The same token is accepted by both config.sh --token (register) and
config.sh remove --token (deregister); no separate removal token is
needed. Tokens expire ~1 hour after issuance.
Label and CVD convention
Every runner gets:
self-hosted, Linux, X64, gpu-runner, <name>, <hwtype>, <Ngpu>gpu
<name>— typically<host>-<Ngpu>gpu-<i>.<hwtype>—h200,h100, ... (matches workflowruns_onpredicates).<Ngpu>gpu—2gpu,4gpu,8gpu(meta-label required by jobs that pin GPU count, e.g.pr-test.yml'sstage-c-4-gpu-h200).
--ngpu must equal the number of devices in --cvd; the script enforces
this so a 4-GPU runner can't accidentally claim the 2gpu label.
CVD partitioning rule: contiguous, non-overlapping slices summing to the host's physical GPU count. Example 4+2+2 split on an 8-GPU H200 host:
| Runner | CVD |
|---|---|
<host>-4gpu-0 | 0,1,2,3 |
<host>-2gpu-0 | 4,5 |
<host>-2gpu-1 | 6,7 |
Why the script does what it does
A few invariants the script encodes that are easy to get wrong by hand:
- Identity bind
/data/runner-setup/data/<name>:/data/runner-setup/data/<name>— the runner spawns sibling job containers through the host docker socket and forwards its in-container--workpath verbatim to the daemon; if host and container paths differ, the daemon resolves a directory the runner never wrote to. - Cache mount
/data/runner-cache/<name>/.cache → /root/.cachekeeps pip / HF / torch caches on the big disk instead of the root partition. - No
/data/miles_cimount on the runner container itself — only the per-job containers it spawns need that path, and that bind is declared in_run-ci.yml(resolved against the HOST filesystem by the daemon). - Deregister BEFORE
docker rm -f:config.sh remove --token <TOKEN>inside the container clears the runner from GitHub's UI. Skipping it leaves an offline-zombie entry that confuses future operators. - Per-runner host dirs (
/data/runner-setup/data/<name>,/data/runner-cache/<name>) are not reusable across runner names —.runnerregistration state is name-bound; the script deletes these onremovefor that reason.
When not to use it
- →When the CI host uses `actions-runner` with `docker-compose`
- →When `/data/miles_ci` is not yet provisioned on the host
Prerequisites
Limitations
- →Only for CI hosts using the `gh-runner` Docker image
- →Does not prepare the host filesystem layout
- →Per-runner host directories are not reusable across runner names
How it compares
This skill provides a script-based, env-var driven approach for `gh-runner` images, distinct from `actions-runner` and `docker-compose` workflows.
Compared to similar skills
manage-gh-runners side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| manage-gh-runners (this skill) | 0 | 2mo | Review | Intermediate |
| deployment-engineer | 4 | 4mo | No flags | Advanced |
| add-install-docker-ci-e2e | 1 | 3mo | No flags | Advanced |
| devops-engineer | 1 | 3mo | Review | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
deployment-engineer
sickn33
Expert deployment engineer specializing in modern CI/CD pipelines, GitOps workflows, and advanced deployment automation. Masters GitHub Actions, ArgoCD/Flux, progressive delivery, container security, and platform engineering. Handles zero-downtime deployments, security scanning, and developer experience optimization. Use PROACTIVELY for CI/CD design, GitOps implementation, or deployment automation.
add-install-docker-ci-e2e
RLinf
Adds install command in install script, Docker build stage in Dockerfile, and CI jobs for docker build, install script, and embodied e2e test when introducing a new model or environment in RLinf. Use when adding a new embodied model (e.g. dexbotic), new env (e.g. maniskill_libero), or new model+env combination that should be installable, dockerized, and tested in CI.
devops-engineer
Jeffallan
Use when setting up CI/CD pipelines, containerizing applications, or managing infrastructure as code. Invoke for pipelines, Docker, Kubernetes, cloud platforms, GitOps.
devops-engineer
I-Synergy
DevOps and CI/CD specialist. Use for building pipelines, containerization, infrastructure as code, or deployment automation. User-invocable only for production deployments.
platform-engineering
villadalmine
>-
add-linux-bootstrap-platform
ponylang
Load when adding a new Linux distro/version (e.g. Alpine 3.24, Ubuntu 26.04) — or both arches for an existing one — as a fully supported ponyup bootstrap-test target. Covers the bootstrap-tester Dockerfile, image build dispatch and tag discovery, CI workflow updates (tier 1 / tier 2), ponyup-init.sh