ov-layers/skills/gh/SKILL.md
GitHub CLI, git, and git-lfs — the single-responsibility home for all git/GitHub tooling as of 2026-04. Ships the noscripts + post-install dance for git-lfs so the RPM's systemd trigger doesn't fail at build time. Use when composing git + gh + git-lfs into an image, or when deciding which layer should own a git-related binary.
npx skillsauth add overthinkos/overthink-plugins ghInstall 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 |
|----------|-------|
| Install files | layer.yml (packages + one post-install task) |
| Depends | (none) |
--setopt=tsflags=noscripts): gh, git, git-lfsgithub-cli, git, git-lfstsflags=noscripts + a post-install taskThe git-lfs RPM's %post scriptlet runs git-lfs install --system
which tries to modify /etc/ and talk to systemd — operations that
fail (loudly or silently) inside a buildah container. Per the same
pattern dev-tools used to carry, we install with noscripts and then
run the git-lfs hook configuration manually:
tasks:
- cmd: /usr/bin/git-lfs install --system --skip-repo 2>/dev/null || true
user: root
The || true tolerates distros/versions where the command layout
differs; --skip-repo prevents git-lfs from trying to touch a repo
that doesn't exist in the build container.
Previously /ov-layers:dev-tools ALSO installed gh and git-lfs
— two layers with overlapping responsibility, duplicate test ids
(gh-binary collision), and unclear ownership ("which layer do I
look at to update the git-lfs version?"). In 2026-04 the git tooling
was moved exclusively here; dev-tools dropped gh, git-lfs, and
the git-lfs post-install task.
Effect for layer authors: anywhere an image previously got git
tooling via dev-tools, it now needs to compose gh explicitly.
The four power-user images (arch-ov, fedora-ov, fedora-coder,
githubrunner via the ov-full chain) already list gh
explicitly so they were unaffected.
Six build-scope tests:
| Test | Purpose |
|---|---|
| gh-binary | /usr/bin/gh exists |
| gh-version | gh --version exits 0 |
| git-binary | /usr/bin/git exists |
| git-version | git --version exits 0 |
| git-lfs-binary | /usr/bin/git-lfs exists |
| git-lfs-version | git-lfs --version exits 0 |
rpm: (Fedora — from the github-cli COPR / community repo), pac: (Arch — github-cli from extra), deb: (Debian/Ubuntu — adds https://cli.github.com/packages as an apt repo with signed-by key; ships gh, git, git-lfs). Full parity across all three package families.
# image.yml or layer.yml
layers:
- gh
/ov-images:arch-ov, /ov-images:fedora-ov, /ov-images:fedora-coder — power-user images that compose gh explicitly/ov-images:selkies-desktop-ov — streaming-desktop siblinghermes-full/ov-layers:dev-tools — no longer installs git/gh/git-lfs (2026-04 split)/ov-layers:agent-forwarding — pairs with gh for SSH/GPG agent access (you usually want both when driving gh from inside a container with the host's GPG keys forwarded)/ov-layers:github-runner — self-hosted Actions runner; different layer, different purpose/ov-layers:github-actions — installs act + actionlint for local Actions testing; also different from this layer/ov:secrets — provision GITHUB_TOKEN for gh auth login/ov:shell — run gh interactively inside a containerMUST be invoked when:
gh, git, or git-lfs to any other layer's packages).git-lfs install fails at build time (the noscripts +
post-install pattern here is the fix)./ov-layers:dev-tools no longer installs gh
(the 2026-04 single-responsibility split lives here)./ov:layer — layer authoring reference (layer.yml schema, task verbs, service declarations)/ov:test — declarative testing (tests: block, ov image test, ov test)tools
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).