Skip to main content

swarmr-kubiq

Exam authoring team for swarmr. Writes a Kubernetes mock exam for kubiq — the drill files and the exam manifest — and proves every question on a live kubiq session before the files are handed to you for review.

Nothing is filed on trust. An author drafts each question against the official CNCF curriculum and the existing catalogue so it is neither out of scope nor a rewording of one already there; the harness runs every question through a real candidate shell in one session; a critic tries to disprove each proof from its record. Verdicts are kept under ~/.cache/swarmr-kubiq/, so a rerun proves only what changed. A question the harness cannot prove is reported as unproven, never quietly dropped or quietly kept.

Install

Core and this team must land in the same environment.

uv tool install "swarmr[kubiq]" --with-executables-from swarmr-kubiq

That exposes teams and teams-mcp on your PATH; this team ships no command of its own. From a checkout: uv tool install ../swarmr --with ../swarmr-kubiq.

Run it from inside the kubiq checkout:

cd kubiq
teams --target exam_author --exam ckad-mock-7            # profile only, no model
teams exam_author --exam ckad-mock-7 --version 1.35 "create a new CKAD mock exam"
teams exam_author --exam cka-mock-6 --certification cka "21 questions, two recent-feature questions"

Over MCP the tool is start_exam_author(request, exam, kubiq?, certification?, server?, version?, questions?).

Prerequisites

  • A running kubiq serving the checkout, built from a checkout with hot reload: docker compose up -d --build once. Its compose file bind-mounts drills/ and exams/, so the files the team stages are visible to the server at once; the tools ask kubiq to check they load (POST /api/check) and reload the catalogue before a proof (POST /api/reload). kubiq refuses a reload while any session is open — it would change the exam someone is sitting — and the team then stops touching the cluster and reports it. The team never rebuilds or stops kubiq.
  • KUBECONFIG pointing at the cluster kubiq provisions sessions on. The harness types into the candidate shell with kubectl exec -n kubiq-sessions cand-<session> -- bash -lc '<cmd>', and reads the cluster's version from it.
  • Model credentials come from swarmr (KIMI_*).
  • lodestar (optional): the author and the critic read the indexed Kubernetes documentation through the lodestar MCP — launched over stdio from LODESTAR_COMMAND or the lodestar entry in ~/.omp/agent/mcp.json, or reached over HTTP at LODESTAR_URL. Unreachable means empty search results and no recent-feature questions, not a failure.

What the team holds a question to

  • The official curriculum. The CNCF domain list for the chosen certification — percentages and competencies verbatim from cncf/curriculum — is in every prompt. The commander assigns each slot one competency through plan_exam, which allocates the weights from the domain shares so they sum to exactly 100 and refuses a slot whose competency is not quoted verbatim; the critic refutes a question no competency covers: a CKAD exam never administers the control plane, a CKA exam is not application packaging.
  • The test cluster. --version names the Kubernetes minor to author against. If it is above the cluster's version the run stops before the first model call: a 1.37 question cannot be proven on a 1.35 cluster.
  • Competencies the cluster cannot host (kubeadm, control-plane manifests, kubelet/apiserver flags, audit policy, CIS, AppArmor) are planned as file-graded questions: the drill places the file in the candidate shell, the task asks for the exact change, exec checks grade the file. The report says which questions prove an effect and which prove a file.
  • Uniqueness. Every drill is scored against the whole catalogue and the other questions of the exam before staging; a neighbour at 0.62 or above is refused, and the author redesigns around a different mechanic in the same domain.

What the harness proves

For every question, in ONE kubiq session for the whole exam (a fixed question is re-proven by its author in a session of its own), in this order:

  1. Negative control — check must fail before anything is done. A check that passes on an untouched namespace proves nothing. The result is kept in the verdict for the critic.
  2. Settle — the setup's Pods must be running, finished or deliberately stuck before the solution runs, so a grade never depends on a race with image pulls.
  3. Solve — the drill's solution runs in the candidate shell, exactly as written. The rule is fix the solution, never the task: the task text is frozen at first staging and stage_drill refuses a changed task.
  4. Check — polled every 3 s until every check passes or KUBIQ_SETTLE_SECONDS (default 90) elapses, with the grader's per-check detail kept as evidence.
  5. End — the session is finished and graded.
  6. Teardown proof — after the session is deleted, no namespace, CRD, PersistentVolume, ClusterRole or ClusterRoleBinding from the drill remains.

Only one kubiq session can exist at a time. The harness creates its own and never deletes one it did not create; a foreign session is a refusal, not a cleanup.

Finishing

The team never runs git. When every question has a verdict, finalize_exam writes the exam — confirmed questions only — into the kubiq checkout under exams/<exam>.yaml and drills/<exam>/ (a draft when fewer than planned survived), and the report lists those paths with the git checkout -b exam/<exam>, git add, git commit, git push and gh pr create lines to run after you have reviewed the files.

The report lists each question with its weight, verdict (confirmed, refuted, unproven) and the number of author briefings it took, the questions covering recent-version material, and any caveats.

Arguments

Per call, as --flags on the CLI or arguments of the MCP tool. Nothing about the target comes from the environment: a process serving several callers cannot have one checkout.

exam is the identifier to author, e.g. ckad-mock-7 — required, must not exist yet. kubiq is the checkout to write into, the root holding drills/ and exams/; defaults to the current directory. certification is CKAD (default), CKA or CKS. version is the Kubernetes minor to author against, e.g. 1.35; must not exceed the test cluster's. server is the running kubiq, default http://localhost:8080. questions defaults to 21 (CKAD/CKA) or 16 (CKS).

Tuning: KUBIQ_SOLVE_BUDGET (seconds a solution plus convergence may take, default 120), KUBIQ_SETTLE_SECONDS (cap on grader convergence after a solution, default 90), XDG_CACHE_HOME (where proven verdicts are kept, default ~/.cache), LODESTAR_COMMAND / LODESTAR_URL (how to reach lodestar).

References

Metadata

Release files for swarmr-kubiq 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for swarmr-kubiq 0.2.0
File Size Uploaded Provenance Actions
swarmr_kubiq-0.2.0.tar.gz 108.8 kB Without provenance Details for swarmr_kubiq-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for swarmr-kubiq 0.2.0
File Interpreter ABI Platform Actions
swarmr_kubiq-0.2.0-py3-none-any.whl Python 3 none any Details for swarmr_kubiq-0.2.0-py3-none-any.whl

Total release size: 186.8 kB

Release files / swarmr_kubiq-0.2.0.tar.gz

Download URL swarmr_kubiq-0.2.0.tar.gz
Size 108.8 kB
Tags Source
SHA-256 checksum
How to use checksums
5d6f272b7d361f9dc3df524a2ba6dbd04261514ec93a43ef753dfa0ee8a3ab29
BLAKE2b-256 checksum
How to use checksums
8855be5afe93d8cc04cf1994cd7e03b803c676487f2026c52908772e4a2865d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / swarmr_kubiq-0.2.0-py3-none-any.whl

Download URL swarmr_kubiq-0.2.0-py3-none-any.whl
Size 78.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c564b733225f91fc246ff0998e02d67c9a58929544f73cf14708684236827311
BLAKE2b-256 checksum
How to use checksums
de1cba83f6748be8788343a1277818353276ad88a46f7a824998c0a8b3d58595
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for swarmr-kubiq 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page