K8s Openapi
jinnovation/kele.el
Reference the Kubernetes API. An agent skill from jinnovation/kele.el.
Design norms and locked decisions for the Kopiur Kopia-native Kubernetes backup operator (Rust/kube-rs).
$ npx skills add home-operations/kopiur --skill kopiur-design -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install home-operations/kopiur kopiur-design --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/home-operations/kopiur.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/kopiur-design .claude/skills/kopiur-design && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "kopiur-design" agent skill from https://github.com/home-operations/kopiur/tree/main/.claude/skills/kopiur-design into .claude/skills/kopiur-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kopiur-design", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/home-operations/kopiur/tree/main/.claude/skills/kopiur-designType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add home-operations/kopiur --skill kopiur-design -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install home-operations/kopiur kopiur-design --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/home-operations/kopiur.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/kopiur-design .agents/skills/kopiur-design && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "kopiur-design" agent skill from https://github.com/home-operations/kopiur/tree/main/.claude/skills/kopiur-design into .agents/skills/kopiur-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kopiur-design", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add home-operations/kopiur --skill kopiur-design -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install home-operations/kopiur kopiur-design --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/home-operations/kopiur.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/kopiur-design .cursor/skills/kopiur-design && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "kopiur-design" agent skill from https://github.com/home-operations/kopiur/tree/main/.claude/skills/kopiur-design into .cursor/skills/kopiur-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kopiur-design", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/home-operations/kopiur.git --path .claude/skills/kopiur-design--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add home-operations/kopiur --skill kopiur-design -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install home-operations/kopiur kopiur-design --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/home-operations/kopiur.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/kopiur-design .gemini/skills/kopiur-design && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "kopiur-design" agent skill from https://github.com/home-operations/kopiur/tree/main/.claude/skills/kopiur-design into .gemini/skills/kopiur-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kopiur-design", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install home-operations/kopiur kopiur-designInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add home-operations/kopiur --skill kopiur-design -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/home-operations/kopiur.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/kopiur-design .github/skills/kopiur-design && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "kopiur-design" agent skill from https://github.com/home-operations/kopiur/tree/main/.claude/skills/kopiur-design into .github/skills/kopiur-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kopiur-design", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add home-operations/kopiur --skill kopiur-design -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install home-operations/kopiur kopiur-design --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/home-operations/kopiur.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/kopiur-design .opencode/skills/kopiur-design && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "kopiur-design" agent skill from https://github.com/home-operations/kopiur/tree/main/.claude/skills/kopiur-design into .opencode/skills/kopiur-design/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kopiur-design", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
kopiur-designDesign norms and locked decisions for the Kopiur Kopia-native Kubernetes backup operator (Rust/kube-rs).
Kopiur Design is an agent skill from home-operations/kopiur. Design norms and locked decisions for the Kopiur Kopia-native Kubernetes backup operator (Rust/kube-rs). Use when adding or modifying CRD types, reconcilers, the admission webhook, the kopia client/mover, validators, or codegen in this repo — anything under crates/ or deploy/. Encodes the type-safety thesis, the externally-tagged-enum rule, k8s-openapi Eq constraints, the shared-validator pattern, retention/deletion semantics, and the build/test discipline. The code is the source of truth for current behavior…
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Container orchestration, Essays and academic help and OpenAPI specifications. It works with Kubernetes, Rust and OpenAPI. The repository describes itself as: A Kopia-native Kubernetes backup operator written in Rust. The licence is AGPL-3.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 906af4f. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
cargoFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Kopiur Design loads about 2.4k tokens when it runs. Until then it costs about 141 tokens; SKILL.md has 1,125 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from home-operations/kopiur at commit 906af4f, republished under its AGPL-3.0 licence (© home-operations). 1,125 words, ~2,358 tokens.
.claude/skills/kopiur-design/SKILL.md (or your agent's skills folder).Kopiur is a Kopia-native Kubernetes backup operator in Rust on kube-rs. The
source of truth for current behavior is the code: the CRD types live in
crates/api/src/, their generated schemas in deploy/crds/. Read
docs/dev/api-conventions.md for the encoding rulebook and CLAUDE.md for the
quick map. The ADRs (docs/adr/) are historical rationale — reach for one only
to recover the why behind a decision, not for current field names or behavior,
which they may pre-date.
Invalid states are unrepresentable; reconcilers handle every variant. Concretely:
enum, never a bag of mutually
exclusive Option fields + a runtime check.match — avoid _ => catch-alls
and if let ... else { /* ignore */ }. A new enum variant should fail to
compile until handled. This is the entire reason the project is Rust, not Go.backend: { s3: {...} },
not backend: { kind: S3, ... }. Do NOT use #[serde(tag = "...")]:
internally-tagged enums make kube's structural-schema rewriter panic
(property "kind" ... must be identical) because each variant needs a
distinct tag const. External tagging keeps the type-safety guarantee AND
produces valid structural schemas. Provide a kind_str() helper for
status/metrics/print-columns. Applies to Backend, AllowedNamespaces,
RestoreSource, RestoreTarget, Hook, etc.Eq when embedding k8s-openapi types. LabelSelector,
ResourceRequirements, SecurityContext, JobSpec, Condition, PodSpec
are PartialEq but not Eq. Derive PartialEq only on any struct that
contains one (directly or transitively). Reuse these types — never re-declare
them. The schemars feature is on for k8s-openapi so they derive JsonSchema.crates/api has no controller-runtime deps. No tokio, no
kube::Client. It's the shared types + pure logic crate. The
webhook and controller both import its validators so validation is identical.api::validate as
pure functions returning a typed error; the webhook calls them at admission
and the controller calls them defensively. Never fork validation logic.from_yaml = YAML → serde_json::Value
→ typed (crates/api/src/lib.rs::testutil). Direct serde_yaml::from_str::<T>
mis-encodes externally-tagged enums (serde_yaml 0.9 !Variant syntax) and is
not representative of the real wire format.SnapshotPolicy.spec.retention is the sole successful-
retention driver (operator prunes Snapshot CRs). Failures use a flat
SnapshotSchedule.spec.failedJobsHistoryLimit. There is deliberately no
successfulJobsHistoryLimit.Snapshot carries the
kopiur.home-operations.com/snapshot-cleanup finalizer. deletionPolicy:
Delete (default for produced) / Retain (FORCED for origin: discovered,
webhook-rejected otherwise) / Orphan. Match all three exhaustively; the
kopiur.home-operations.com/skip-snapshot-cleanup annotation is the repo-offline escape hatch.username=name, hostname=namespace,
sourcePath=/pvc/<name>; ClusterRepository.identityDefaults *Expr fields
evaluate as CEL at admission and are pinned to status.resolved.identity —
never re-rendered after admission.cron(now)), deterministic jitter seeded by
(scheduleUID, slot_start) (no RNG — must be identical across HA replicas and
restarts). runOnCreate: false and concurrencyPolicy: Forbid are defaults.onMissingSnapshot: Fail) except source.fromConfig,
which defaults to Continue for the GitOps deploy-or-restore pattern.cargo test --workspace # hermetic; must be green before claiming done
cargo clippy --workspace --all-targets -- -D warnings
cargo xtask gen-all --check # generated CRDs/RBAC must match checked-in
scripts/with-kind.sh cargo test --workspace --features integration -- --include-ignored#[ignore] + --features integration, run only on an
ephemeral kind cluster via scripts/with-kind.sh. Never point them at a
real/homelab cluster.T::crd() call doubles as the
schema-generation smoke test; it panics if an enum is mis-encoded).cargo test/clippy yourself before trusting the result.This is data-protection software: an untested path can silently lose backups. So every new feature AND every bug fix ships with tests — you have NOT finished until the work is proven by tests that would fail without it.
A new feature (a CRD field, a backend, a reconciler path, a mover op) is not done until it has, at minimum:
from_yaml round-trip), pure decision functions, and any
match-on-enum mapping. Cheapest tier; catches the most. Also test the
controller glue that maps a CRD field to a mover input (e.g. the function
that turns source.nfs into a mover volume mount) — extract it so it's
callable without a cluster, then assert on its output.Snapshot reaching
Succeeded with a real kopiaSnapshotID, a Repository Ready, a Restore
Completed). If the feature needs a new piece of cluster infrastructure to
test (an NFS server, an SFTP server, a new backend), stand it up in the e2e
World (Need/Fixture) — see [[error-handling-and-e2e]].#[ignore] + --features integration) when the surface is
an API-server interaction (admission, RBAC) that doesn't need the mover images.No e2e test is "too large" or "too expensive" to include. This tool guards real data; thorough end-to-end proof is the requirement, not a nice-to-have. If a feature can be exercised against a live operator, it gets an e2e scenario — even when that means provisioning a server, building an image, or a multi-minute run. The only acceptable reason to skip an e2e is that the feature genuinely has no runtime-observable behavior (a pure type/refactor) — and then say so explicitly.
When you fix a bug — especially one a user hit at runtime — you have NOT finished until a test would fail without your fix and passes with it. A fix without a test is an invitation for the same bug to return. Default to writing the test first (reproduce the failure), then fix.
Pick the cheapest tier that actually exercises the broken path:
repository ref as a namespaced
Repository regardless of kind) became io::repo_lookup(&RepositoryRef, …) -> RepoLookup with unit tests asserting kind: ClusterRepository maps to a
cluster-scoped lookup, never a namespaced get. Runs in cargo test, no cluster.Succeeded, a missing dependency, an
RBAC/SA gap, a dropped option), add a scenario to crates/e2e/tests/lifecycle.rs
that reproduces the exact user-visible symptom and asserts the success
condition (e.g. a Snapshot reaching Succeeded with a real kopiaSnapshotID). Write
the test so it would have timed out / failed on the buggy code. See
cluster_repository_backup_lifecycle for the template.#[ignore] + --features integration) for API-server
interactions that don't need the mover images.Then record the bug + its guard in the operator-bugs-fixed-by-e2e auto-memory so
the class of failure stays visible across sessions.
© home-operations, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/kopiur-design of home-operations/kopiur.
Open the folder on GitHubat commit 906af4f
Kopiur Design next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Kopiur Design this skillhome-operations/kopiur | 115 | — | ~2.4k | Automated safety check: Pass | AGPL-3.0 | |
| K8s Openapijinnovation/kele.el | 108 | — | ~171 | Automated safety check: Pass | Apache-2.0 | |
| SpikardGoldziher/spikard | 124 | — | ~799 | Automated safety check: Pass | MIT | |
| Helm Chart ScaffoldingCybereason-Public/owLSM | 280 | 13 repos | ~381 | Automated safety check: Pass | GPL-2.0 | |
| Tokf Runmpecan/tokf | 199 | — | ~571 | Automated safety check: Pass | MIT | |
| Helm Chart Scaffoldingdiegosouzapw/awesome-omni-skills | 159 | — | ~2.4k | Automated safety check: Pass | MIT |
jinnovation/kele.el
Reference the Kubernetes API. An agent skill from jinnovation/kele.el.
Goldziher/spikard
Scaffold Spikard projects and generate code from OpenAPI, AsyncAPI, OpenRPC, GraphQL, and Protobuf schemas using the Spikard CLI or its MCP server.
Cybereason-Public/owLSM
Comprehensive guidance for creating, organizing, and managing Helm charts for packaging and deploying Kubernetes applications.
mpecan/tokf
Compress verbose CLI output with tokf before returning results.
diegosouzapw/awesome-omni-skills
Helm Chart Scaffolding workflow skill. An agent skill from diegosouzapw/awesome-omni-skills.
fluxcd/agent-skills
Debug and troubleshoot Flux CD on live Kubernetes clusters (not local repo files) via the Flux MCP server — inspects Flux resource status, reads controller logs, traces dependency chains, and…
home-operations/kopiur
How Kopiur writes and maintains user-facing docs — the MkDocs Material site under docs/ and the example manifests under deploy/examples/.
home-operations/kopiur
How Kopiur does strongly-typed, actionable error handling and end-to-end testing.
Works with
Categories
Design norms and locked decisions for the Kopiur Kopia-native Kubernetes backup operator (Rust/kube-rs). Kopiur Design is an agent skill from home-operations/kopiur. Design norms and locked decisions for the Kopiur Kopia-native Kubernetes backup operator (Rust/kube-rs).
Kopiur Design fits situations like: modifying CRD types; the admission webhook; the kopia client/mover; codegen in this repo — anything under crates/.
Run `npx skills add home-operations/kopiur --skill kopiur-design -a claude-code`. Or copy the skill folder (.claude/skills/kopiur-design in home-operations/kopiur) into .claude/skills/kopiur-design in your project. Claude Code loads it when a task matches its description.
Run `npx skills add home-operations/kopiur --skill kopiur-design -a codex`. Or copy the skill folder (.claude/skills/kopiur-design in home-operations/kopiur) into .agents/skills/kopiur-design in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add home-operations/kopiur --skill kopiur-design -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/kopiur-design, .gemini/skills/kopiur-design, .github/skills/kopiur-design and .opencode/skills/kopiur-design in your project.
Going by SKILL.md and its folder, Kopiur Design needs the command-line tools its instructions call (cargo).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Kopiur Design is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Kopiur Design: K8s Openapi (jinnovation/kele.el, 108 stars), Spikard (Goldziher/spikard, 124 stars), Helm Chart Scaffolding (Cybereason-Public/owLSM, 280 stars) and Tokf Run (mpecan/tokf, 199 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
home-operations (a GitHub organization) maintains it in home-operations/kopiur, which has 115 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 11, 2026.
Source: home-operations/kopiur on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.