CLI
Two layers, one engine:
kubelings— the TUI/CLI binary. This is the interface you normally use.scripts/run-challenge-local.sh— the bash engine the binary delegates every cluster/lesson action to. Still very much in use: it’s the single place that extracts a lesson’sinit/verifytask blocks and runs them — confined inside the kind node, never on your host (see Security). Call it directly for scripting/CI; the TUI calls the exact same code paths.
kubelings binary
Section titled “kubelings binary”kubelings # launch the TUIkubelings doctor # env, cluster status, and lessons (no TTY needed)kubelings shell <l> # task + cluster-wired shell for lesson <l>In the TUI: ↵ plays a lesson (cluster up → init → shell), v verifies,
r resets, ↵ on a reading marks it read. kubelings doctor is handy in CI
or over SSH — prerequisites, kind cluster status, and per-lesson progress
markers, no TTY required.
The engine: run-challenge-local.sh
Section titled “The engine: run-challenge-local.sh”Same verbs the TUI uses, callable directly:
scripts/run-challenge-local.sh up # create the 3-node kind clusterscripts/run-challenge-local.sh list # list runnable lessonsscripts/run-challenge-local.sh <lesson> init # build the scenarioscripts/run-challenge-local.sh <lesson> verify # run the checkscripts/run-challenge-local.sh <lesson> reset # wipe ns + re-initscripts/run-challenge-local.sh <lesson> solution # print the lesson contentscripts/run-challenge-local.sh <lesson> progress # print .labctl/progress.tsvscripts/run-challenge-local.sh down # delete the clusterOverride the cluster with KIND_WORKERS=N and KUBELINGS_CLUSTER=name.
When to reach for it instead of the TUI:
- CI pipelines (init + verify as a lesson smoke test)
- automation/scripting around lessons
- debugging a lesson you’re authoring (its output is the raw task output)
just tui # build + launch the TUIjust doctor # headless statusjust up # cluster upjust down # cluster downjust run <lesson> <verb>just test # go tests