Lab Setup
Installs the toolkit recommended for a lab meeting: Claude Code skills, plugins, and supporting software.
Language
Default: English. Switch to Russian if the user writes in Russian.
Inputs
1. Curriculum manifest
Same source, cohort resolution, caching, and failure rules as lab-homework:
https://agency-lab.glebkalinin.com/api/curriculum/<cohort>.json
- Cohort slug from
<vault>/.config.md under cohort:. If missing, ask via AskUserQuestion — options: goal-driven-design-ru, goal-driven-design-en, claude-code-lab-05, claude-code-lab-04.
- Cache in
<vault>/.cache/curriculum-<cohort>.json (reuse if younger than 24h; "refresh curriculum" / «обнови программу» forces a re-fetch).
- Schema:
schema_version: 2. Each meeting MAY have a toolkit array — see ../lab-homework/references/curriculum-schema.md. A meeting without toolkit simply has nothing to install; say so and stop.
2. Toolkit entries
Each toolkit item:
{
"name": "design-tokens",
"kind": "skill" | "plugin" | "app",
"install": "npx skills add glebis/claude-skills --skill design-tokens -g -y" | null,
"why": "one-line reason",
"optional": false
}
Flow
Resolve cohort and meeting. Read .config.md; ask which meeting via AskUserQuestion populated from manifest.meetings[] (default: the latest meeting whose has_content is true).
Detect what is already installed. Run these checks, do not guess:
- Skills:
npx -y skills ls -g (fall back to listing ~/.claude/skills/).
- Plugins:
claude plugin list if available, else check ~/.claude/plugins/known_marketplaces.json.
- Apps:
which <binary> / command -v.
Items bundled with this plugin are always already available — never install those. Detect them dynamically: list ${CLAUDE_PLUGIN_ROOT}/skills/ (fall back to the hardcoded set below if the variable is unset). As of v0.4.0 the bundle is the full humane cycle at 0.19.0:
setup, jtbd, prototype, persona-review, respondent-panel, before-after, brandkit, design-tokens, type-specimen, brand-illustrate, layout-rules, ux-writing, nielsen-heuristics, walkthrough, review, using-humane — plus de-ai and the lab-* skills.
Report these as "already available (bundled with lab-coach)" together with their why from the manifest, so the participant knows they are part of the lesson toolkit even though nothing is installed. If a bundled skill is missing from the plugin directory, the plugin is outdated — tell the user to run /plugin update lab-coach@claude-code-lab-coach.
Name collision warning. These skills also ship in the humane plugin, which the curriculum's toolkit entries name directly. If the participant has both installed, the same skill exists twice and a bare /jtbd is ambiguous. When a toolkit entry is satisfied by the bundle, tell them to call it with an explicit prefix — /humane:jtbd for the standalone plugin, /lab-coach:jtbd for this one — and note that the bundle tracks humane releases rather than leading them, so /plugin update on both is what keeps the two identical.
Show the checklist via AskUserQuestion (multiSelect): one option per MISSING item, label = name, description = why. Pre-explain that required items come first, optional: true items are marked "(optional)". Skip the question entirely if nothing is missing — report "all set" and stop.
Install the selected items, one at a time, running each install command verbatim. Defaults:
- Skill installs are global — commands in the manifest already carry
-g -y; if one doesn't, append them.
install: null means manual — show the why (it contains the URL or instruction) and mark the item as "manual step" in the summary.
- On failure: show the exact error, do NOT retry more than once, continue with the remaining items.
Verify — re-run the detection from step 2 for the items just installed.
Record — append installed tools to <vault>/tools-learned.md (create if missing) as - <name> — <why> (meeting <NN>, <ISO date>). Do not duplicate existing lines.
Summarize — installed / failed / manual / skipped, plus how to invoke each installed skill (/name).
Rules
- Never install anything the user did not select in step 3.
- Never run install commands with
sudo.
- API keys are out of scope: if a
why mentions a required key (e.g. OPENAI_API_KEY), tell the user after installing, do not prompt for the key value.
- If
npx skills is unavailable (no Node), stop and explain that Node.js ≥ 18 is required, with a link to https://nodejs.org.
1---2name: lab-setup3description: Use when the user wants to install the tools, skills, and software recommended for a specific lab meeting — the lesson's toolkit. Triggers on "set up tools for meeting 1", "install lesson toolkit", "what do I need installed", "установи инструменты урока", "поставь скиллы занятия", "что нужно установить к занятию". Fetches the cohort curriculum from agency-lab.glebkalinin.com, reads the meeting's toolkit list, checks what is already installed, installs the missing pieces (globally by default), and records them in the lab vault.4---56# Lab Setup78Installs the toolkit recommended for a lab meeting: Claude Code skills, plugins, and supporting software.910## Language1112**Default: English.** Switch to Russian if the user writes in Russian.1314## Inputs1516### 1. Curriculum manifest1718Same source, cohort resolution, caching, and failure rules as `lab-homework`:1920```21https://agency-lab.glebkalinin.com/api/curriculum/<cohort>.json22```2324- Cohort slug from `<vault>/.config.md` under `cohort:`. If missing, ask via `AskUserQuestion` — options: `goal-driven-design-ru`, `goal-driven-design-en`, `claude-code-lab-05`, `claude-code-lab-04`.25- Cache in `<vault>/.cache/curriculum-<cohort>.json` (reuse if younger than 24h; "refresh curriculum" / «обнови программу» forces a re-fetch).26- Schema: `schema_version: 2`. Each meeting MAY have a `toolkit` array — see `../lab-homework/references/curriculum-schema.md`. A meeting without `toolkit` simply has nothing to install; say so and stop.2728### 2. Toolkit entries2930Each toolkit item:3132```json33{34 "name": "design-tokens",35 "kind": "skill" | "plugin" | "app",36 "install": "npx skills add glebis/claude-skills --skill design-tokens -g -y" | null,37 "why": "one-line reason",38 "optional": false39}40```4142## Flow43441. **Resolve cohort and meeting.** Read `.config.md`; ask which meeting via `AskUserQuestion` populated from `manifest.meetings[]` (default: the latest meeting whose `has_content` is true).452. **Detect what is already installed.** Run these checks, do not guess:46 - Skills: `npx -y skills ls -g` (fall back to listing `~/.claude/skills/`).47 - Plugins: `claude plugin list` if available, else check `~/.claude/plugins/known_marketplaces.json`.48 - Apps: `which <binary>` / `command -v`.49 Items bundled with this plugin are always already available — **never install those**. Detect them dynamically: list `${CLAUDE_PLUGIN_ROOT}/skills/` (fall back to the hardcoded set below if the variable is unset). As of v0.4.0 the bundle is the full humane cycle at 0.19.0:5051 `setup`, `jtbd`, `prototype`, `persona-review`, `respondent-panel`, `before-after`, `brandkit`, `design-tokens`, `type-specimen`, `brand-illustrate`, `layout-rules`, `ux-writing`, `nielsen-heuristics`, `walkthrough`, `review`, `using-humane` — plus `de-ai` and the `lab-*` skills.5253 Report these as "already available (bundled with lab-coach)" together with their `why` from the manifest, so the participant knows they are part of the lesson toolkit even though nothing is installed. If a bundled skill is missing from the plugin directory, the plugin is outdated — tell the user to run `/plugin update lab-coach@claude-code-lab-coach`.5455 **Name collision warning.** These skills also ship in the `humane` plugin, which the curriculum's toolkit entries name directly. If the participant has both installed, the same skill exists twice and a bare `/jtbd` is ambiguous. When a toolkit entry is satisfied by the bundle, tell them to call it with an explicit prefix — `/humane:jtbd` for the standalone plugin, `/lab-coach:jtbd` for this one — and note that the bundle tracks humane releases rather than leading them, so `/plugin update` on **both** is what keeps the two identical.563. **Show the checklist** via `AskUserQuestion` (multiSelect): one option per MISSING item, label = name, description = `why`. Pre-explain that required items come first, `optional: true` items are marked "(optional)". Skip the question entirely if nothing is missing — report "all set" and stop.574. **Install the selected items**, one at a time, running each `install` command verbatim. Defaults:58 - Skill installs are **global** — commands in the manifest already carry `-g -y`; if one doesn't, append them.59 - `install: null` means manual — show the `why` (it contains the URL or instruction) and mark the item as "manual step" in the summary.60 - On failure: show the exact error, do NOT retry more than once, continue with the remaining items.615. **Verify** — re-run the detection from step 2 for the items just installed.626. **Record** — append installed tools to `<vault>/tools-learned.md` (create if missing) as `- <name> — <why> (meeting <NN>, <ISO date>)`. Do not duplicate existing lines.637. **Summarize** — installed / failed / manual / skipped, plus how to invoke each installed skill (`/name`).6465## Rules6667- Never install anything the user did not select in step 3.68- Never run install commands with `sudo`.69- API keys are out of scope: if a `why` mentions a required key (e.g. `OPENAI_API_KEY`), tell the user after installing, do not prompt for the key value.70- If `npx skills` is unavailable (no Node), stop and explain that Node.js ≥ 18 is required, with a link to https://nodejs.org.