MA

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

Installs 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.
540 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Intermediate

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

You give it
Runner name, CVD, hardware type, number of GPUs, and registration token
You get back
List of runners, added runner, or removed runner

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-runner image → 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 workflow runs_on predicates).
  • <Ngpu>gpu2gpu, 4gpu, 8gpu (meta-label required by jobs that pin GPU count, e.g. pr-test.yml's stage-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:

RunnerCVD
<host>-4gpu-00,1,2,3
<host>-2gpu-04,5
<host>-2gpu-16,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 --work path 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/.cache keeps pip / HF / torch caches on the big disk instead of the root partition.
  • No /data/miles_ci mount 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.runner registration state is name-bound; the script deletes these on remove for 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

`/root/miles/.claude/skills/manage-gh-runners` directoryGitHub repository registration token

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.

SkillInstallsUpdatedSafetyDifficulty
manage-gh-runners (this skill)02moReviewIntermediate
deployment-engineer44moNo flagsAdvanced
add-install-docker-ci-e2e13moNo flagsAdvanced
devops-engineer13moReviewAdvanced

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.

418

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.

16

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.

12

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.

00

platform-engineering

villadalmine

>-

00

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

00

Search skills

Search the agent skills registry