# Lab Setup

> 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.

- Skill: `glebis/lab-setup` (Agent Skill)
- Install (CLI): `npx skillmds@latest add glebis/lab-setup`
- Raw SKILL.md: https://api.skillmd.com/api/skills/glebis/lab-setup/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: glebis (https://skillmd.com/u/glebis)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/glebis/lab-setup

---


# 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:

```json
{
  "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

1. **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).
2. **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.
3. **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.
4. **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.
5. **Verify** — re-run the detection from step 2 for the items just installed.
6. **Record** — append installed tools to `<vault>/tools-learned.md` (create if missing) as `- <name> — <why> (meeting <NN>, <ISO date>)`. Do not duplicate existing lines.
7. **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.

