distros/skills/github-runner/SKILL.md
GitHub Actions self-hosted runner as a supervised container service — rootless (uid 1000), Arch/CachyOS packages, credential-backed registration token. Use when working with GitHub Actions runners, CI/CD infrastructure, or runner registration.
npx skillsauth add overthinkos/overthink-plugins github-runnerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Property | Value |
|----------|-------|
| Dependencies | supervisord, container-nesting |
| Volume | state -> ${HOME}/actions-runner |
| Service | github-runner (supervisord; runs run.sh as uid 1000) |
| Security | none of its own — rootless nested podman comes from container-nesting (no privileged) |
| Install files | task: — declarative pinned download: of the runner tarball + write: of the ghcr mirror config; the runner tree is root-extracted (the shared download cache is root-owned) then chown -Red to uid 1000 (the one ownership cmd:) |
distro.arch, all in the official core/extra repos)jq, git, go, cloud-guest-utils, cosignqemu-user-static, qemu-user-static-binfmt (aarch64 binfmt)installdependencies.sh has no
Arch branch): icu, krb5, openssl, libunwind, lttng-ust (NOT zlib —
CachyOS ships zlib-ng-compat, which Provides it; an explicit zlib conflicts)depends= completion: slirp4netns, libisoburn, cdrtools, swtpm
— the part of the charly PKGBUILD depends= set the charly/virtualization candies do
not already install. With these present, charly box pkg pac builds the pac release
artifact NATIVELY on the runner (makepkg -sf resolves every dep and never
shells out to sudo pacman). See /charly-distros:githubrunner "CI: builds the
org's release packages on itself".podman/buildah/skopeo/crun/fuse-overlayfs are provided by the
container-nesting dependency (not redeclared here — R3).
| Variable | Mechanism |
|----------|-----------|
| RUNNER_ORG | env_accept (plaintext identifier; supplied at deploy) |
| RUNNER_TOKEN | secret_accept (credential-store-backed; never in charly.yml/quadlet) |
| RUNNER_WORK_DIR | ${HOME}/actions-runner/_work |
| RUNNER_GROUP | Default |
The runner installs under ${HOME}/actions-runner and runs as uid 1000. The
ghcr.io pull-through mirror (127.0.0.1:5000) config is written to the user
location ${HOME}/.config/containers/registries.conf.d/ (rootless podman).
RUNNER_ORG + RUNNER_TOKEN.
Skips (no-op) when RUNNER_TOKEN is empty — so a token-less deploy (an check
bed) brings the image up without registering.# charly.yml — rootless, CachyOS
githubrunner:
base: cachyos.cachyos
build: [pac]
candy: [agent-forwarding, github-runner, charly, dbus, container-nesting]
network: host # no uid/privileged override → rootless
TOKEN=$(gh api -X POST /orgs/myorg/actions/runners/registration-token --jq .token)
charly config githubrunner -e RUNNER_ORG=myorg -e RUNNER_TOKEN="$TOKEN"
charly remove githubrunner -e RUNNER_TOKEN=$(gh api -X POST /orgs/myorg/actions/runners/remove-token --jq .token)
/charly-distros:githubrunner/charly-infrastructure:supervisord — process manager dependency/charly-distros:container-nesting — rootless nested podman/buildah/skopeo + subuid layout + capsUse when the user asks about:
RUNNER_TOKEN or RUNNER_ORG configuration/charly-image:layer — candy authoring reference (tasks, vars, secret_accept, check block syntax)/charly-check:check — declarative testing framework for the check: block + the check-githubrunner-pod bed/charly-build:secrets — the credential store backing RUNNER_TOKENtools
Use when authoring or modifying a charly PLUGIN — a candy with a `plugin:` block that contributes Providers (verbs/kinds/deploy-targets/steps/builders/commands), its own CUE schema, builtin (compiled-in) or external (out-of-tree git repo). Covers the unified Provider model, the per-plugin CUE-schema contract (single source → Go params for dev + schema-over-Describe RPC for runtime), the SDK, and the loader.
tools
The CUE data-validation / configuration CLI (cue), pinned to v0.16.1. Use when working with the cue candy, installing the cue binary into a box or onto a target:local dev host, or running the offline schema-vendoring pipeline that feeds charly's egress validation.
tools
CUE EGRESS validation — validating (and, where it adds value, generating) the config files charly WRITES to a system BEFORE the bytes hit disk. MUST be invoked before working on charly/egress.go, the vendored schemas under candy/plugin-egress/egress-schemas/vendor/, the ValidateEgress / registerVendoredEgressKind path, the offline `task cue:vendor` pipeline, or adding an egress schema for any written artifact (cloud-init, k8s manifests, traefik routes, runtime config, install ledger, systemd/quadlet units, ssh_config, libvirt XML).
tools
Kubernetes cluster-probe declarative check verb — the `kube:` check verb (nodes, pods, ingress, storage class, addon health, apply/delete, and arbitrary resource GETs) served out-of-process by the candy/plugin-kube plugin (vendored client-go; no external kubectl required).