{"id":"776b8392-9dfe-4067-a09b-72f9e2e575d0","slug":"codelabgen","kind":"skill","name":"codelabgen","summary":"AI skills and agents that research technologies and generate structured learning paths with runnable code labs, detailed explanations, and guided walkthroughs.","owner":"cheyuriy","repoUrl":"https://github.com/cheyuriy/codelabgen","license":"MIT","licenseTier":"permissive","trust":"community","stars":1,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-10-15T23:08:54.000Z","addedAt":"2026-10-22T03:48:55.815Z","logoUrl":"https://avatars.githubusercontent.com/u/6412917?u=8e5f819a8349bf87d29d2b1b731a6f7b618c622f&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools"],"tags":["ai-tools","claude","claude-plugin","course"],"runtime":"python","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-25T21:16:16.758Z","sample":false,"url":"https://conduits.dev/tools/codelabgen","language":"Python","transports":["stdio"],"install":{"pypi":"codelabgen"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# codelabgen\n\nA Claude Code plugin that generates hands-on courses for a technology, language, framework or library. Every lesson is built around a runnable, tested code example and has three parts: the code, a read-along walkthrough of the code, and book-style notes.\n\n## Layout\n\n| Path | What it holds |\n|---|---|\n| `.claude-plugin/plugin.json` | Plugin manifest |\n| `commands/` | Slash commands (`/codelabgen:status`, …) |\n| `skills/` | Procedural knowledge loaded by the orchestrator and the agents |\n| `agents/` | Subagent definitions (leaf workers) |\n| `hooks/` | Plugin hooks: state-file guard, subagent log |\n| `src/codelabgen/`, `tests/` | The `codelabgen` CLI with every deterministic step; the repo root is its uv project |\n| `src/codelabgen/templates/` | Templates for generated course files |\n| `schemas/` | JSON Schemas of the data files, generated from `src/codelabgen/models.py` |\n\n## Setup\n\nThe repo root is a uv project with a single virtual environment in `.venv`. `uv sync` installs the `codelabgen` CLI into it in editable mode, so changes to `src/` take effect immediately. Always work with that environment activated: Claude Code started from an activated shell passes it on to every command it runs, so agents find `codelabgen` on `PATH`.\n\n```bash\nuv sync\nsource .venv/bin/activate\ncodelabgen doctor        # which external tools are present, and what a missing one disables\nclaude --plugin-dir .    # load the plugin from this checkout\n```\n\nOptional tools, each enabling one feature (`codelabgen doctor` shows what is missing):\n\n| Tool | Feature | Install (Ubuntu) |\n|---|---|---|\n| Docker | services such as Postgres in lessons | [docs.docker.com/engine/install](https://docs.docker.com/engine/install/ubuntu/) |\n| `asciinema` 3.x, `agg` | terminal recordings | binaries from the GitHub releases of `asciinema/asciinema` and `asciinema/agg` (apt's asciinema 2.x is too old) |\n| `d2` | D2 diagrams | `curl -fsSL https://d2lang.com/install.sh \\| sh -s --` |\n| Graphviz (`dot`) | Graphviz diagrams | `sudo apt install graphviz` |\n| `gh` | GitHub source discovery | `sudo apt install gh`, then `gh auth login` |\n| `yt-dlp` | talk transcripts | `uv tool install yt-dlp` |\n\n## Runtimes\n\n| `runtime.kind` | Lessons | Needs |\n|---|---|---|\n| `python-uv` | uv workspace per module; ruff, pytest | `uv` |\n| `node` | npm workspace per module; TypeScript (tsx, tsc), Biome, vitest | `node`, `npm` (Node 24 LTS or later) |\n| `go` | `go.work` per module, one Go module per lesson; go vet, gofmt, go test | `go` |\n| `rust` | Cargo workspace per module, one package per lesson; clippy, rustfmt, cargo test | `cargo` with `clippy` and `rustfmt` (rustup's default profile), a C linker (`cc`) |\n\n## Making a course\n\nIn Claude Code started with the plugin:\n\n```\n/codelabgen:new LangGraph --target ~/courses/langgraph --lang en\n```\n\n`/codelabgen:new` builds the course in one session: research, the source review, topics and the curriculum, the plan review, every lesson, assembly and the evaluation. The reviews and other questions (LLM provider, keys) are asked in the chat. Useful options: `--version` pins the technology version, `--source <url>` adds sources you want included, `--source-type` and `--sources-per-type` narrow the research, and `--wishes \"…\"` sets scope or size (\"at most 3 lessons\").\n\nOther commands:\n\n| Command | What it does |\n|---|---|\n| `/codelabgen:resume <dir>` | Continue a course from wherever it stopped, including work interrupted in an earlier session |\n| `/codelabgen:status <dir>` | Phase, lesson stages and blocked lessons |\n| `/codelabgen:sources`, `/codelabgen:plan` | Review sources or the plan of a course stopped at that review, then continue to the end |\n| `/codelabgen:lesson <id\\|all>` | Produce (or redo, with `--redo <stage>`) single lessons |\n| `/codelabgen:build` | Assemble the course: glossary, READMEs, `run.sh`, checks, the MkDocs site, a git commit |\n| `/codelabgen:extend <dir> \"<request>\"` | Deepen a topic or add new ones to a finished course |\n\n## Evaluating generated courses\n\n`codelabgen eval --course <dir> [--reverify] [--site]` scores a course (`.codelabgen/eval.md`, `eval.json`):\n\n| Dimension | Weight | What it measures |\n|---|---|---|\n| completion | 20% | lessons done; blocked lessons |\n| verification | 25% | latest (or, with `--reverify`, fresh) verify runs pass |\n| consistency | 15% | `check all` problems; strict site build with `--site` |\n| content | 25% | per lesson: snippets, real output, experiments, diagrams, self-check, further reading, tests, comment density |\n| process | 15% | review rounds and fix attempts |\n\nThe automatic score catches broken and incomplete courses; quality needs a reader. `eval` writes `.codelabgen/eval-human.md`, a checklist for two sampled lessons (the first, and the most reworked one). Fill it in and run `eval` again.\n\n## Development\n\nWith the environment activated:\n\n```bash\npytest\nruff check . && ruff format --check .\ncodelabgen schema export   # after changing models.py\n```\n"}