Collapse Step 5.6 from a single-skill detector (only the superpowers@claude-plugins-official plugin) into a generic `trigger -> fulfiller` table walker that scales to every canonical CLAUDE.md trigger. Inline 9-row map in SKILL.md covers: caveman, superpowers (kind: plugin), using-wiki, using-tasks, using-projects-meta, pulling-before-work, project-discipline, using-interns, active-platform. The `kind` flag (skill | plugin) drives which install command is emitted in the chat-only recommendation block. Detection paths: ~/.claude/skills/<name>/SKILL.md for skills, plugins.<id> in ~/.claude/plugins/installed_plugins.json for plugins. Algorithm: read project's CLAUDE.md -> match each non-comment line vs map (substring + tolower, mirrors Step 5 idempotent merge) -> for each canonical match check disk -> print one chat block listing every missing fulfiller with copy-pasteable install commands, OR a single "all dependencies satisfied" line. User-custom lines and removed canonical lines are silently skipped. Hard rule "never auto-install" preserved verbatim. version: 1.6.0 -> 1.7.0 (MINOR per project-discipline Rule 3 -- adds capability, absorbs prior superpowers-only detector cleanly). Closes [bootstrap-skill-deps-check] (.tasks/STATUS.md done). Closes [bootstrap-recommend-projects-meta] by absorption -- the deferred mirror task was the seed of this generalization; the generic walker now handles using-projects-meta along with everything else, no per-skill mirror needed. Design rationale at .wiki/concepts/bootstrap-skill-deps-check.md: - why generic over per-skill mirrors (5x mirror explosion) - skill vs plugin kind distinction - MCP-server-backed skills (only check using-X policy skill; setup-X self-fires via Prerequisites pointer) - source-of-truth invariant: SKILL map + assets/CLAUDE.md.template must stay in sync (a future CI lint could enforce)
118 lines
5.3 KiB
Markdown
118 lines
5.3 KiB
Markdown
# project-bootstrap
|
||
|
||
Initializes or upgrades a project workspace in one pass: git, `.gitignore`,
|
||
`README.md`, `.wiki/` (Karpathy's LLM Wiki layout), `.tasks/` (per-task board),
|
||
and `CLAUDE.md` with skill triggers.
|
||
|
||
Operates in two modes, picked automatically:
|
||
|
||
- **init** — empty or near-empty folder. Creates everything from scratch.
|
||
- **upgrade** — existing project. Detects what's already there, only fills the
|
||
gaps. Never overwrites without explicit confirmation.
|
||
|
||
## When it triggers
|
||
|
||
The skill auto-activates on phrases like:
|
||
|
||
- "initialize project", "bootstrap", "setup project"
|
||
- "upgrade project", "add wiki", "add tasks"
|
||
- "start project", "set everything up"
|
||
- "let's start a project", "init"
|
||
|
||
It also triggers when an agent is launched in a fresh folder that the user
|
||
clearly intends to turn into a workspace.
|
||
|
||
## Prerequisites
|
||
|
||
`project-bootstrap` does not lay out `.wiki/` or `.tasks/` by itself — it
|
||
delegates to two companion skills, which must be installed on the machine
|
||
running it:
|
||
|
||
- [`setup-wiki`](../setup-wiki/) — creates the canonical `.wiki/` layout.
|
||
- [`setup-tasks`](../setup-tasks/) — creates the canonical `.tasks/` layout.
|
||
|
||
If either is missing, `project-bootstrap` stops with a clear error rather
|
||
than falling back to ad-hoc creation. This keeps layout drift between
|
||
projects bootstrapped at different times debuggable.
|
||
|
||
## What it creates
|
||
|
||
| Path | Source | Notes |
|
||
|---|---|---|
|
||
| `.git/` | `git init` | Skipped if repo already initialized. |
|
||
| `.gitignore` | `assets/.gitignore.template` | Skipped if file exists. |
|
||
| `README.md` | minimal stub | Skipped if file exists. |
|
||
| `.wiki/` | delegated to `setup-wiki` | Karpathy LLM Wiki layout — `CLAUDE.md`, `index.md`, `log.md`, `overview.md`, `raw/`, `entities/`, `concepts/`, `packages/`, `sources/`. |
|
||
| `.tasks/` | delegated to `setup-tasks` | Canonical board — `STATUS.md` plus per-task `<task-slug>.md` files. |
|
||
| `CLAUDE.md` | `assets/CLAUDE.md.template` | Skill triggers (`use superpowers`, `use project wiki`, etc.). On non-Windows hosts, swap the `we're on Windows` line for `we're on Linux` / `we're on macOS`. On upgrade, the template is treated as a canonical set and merged idempotently — only missing trigger lines are appended after user confirm. Re-runs are no-ops. |
|
||
| `.wiki/concepts/bootstrap-manifest.md` | generated | Records which skill versions initialized the project, so cross-project layout drift is debuggable. |
|
||
|
||
## Workflow
|
||
|
||
1. **Detect mode.** Inspect the current directory — git, `.wiki/`, `.tasks/`,
|
||
`CLAUDE.md`, `README.md` — and print a single summary block: what was
|
||
found, what will be created, what will be skipped.
|
||
2. **Confirm.** One question, one confirmation. Nothing is written before the
|
||
user agrees.
|
||
3. **Steps 1–5.** Create or skip each piece in order — git, README, `.wiki/`,
|
||
`.tasks/`, `CLAUDE.md`. Steps 3 and 4 delegate to the setup-skills.
|
||
4. **Step 5.5.** Write `bootstrap-manifest.md` recording the versions of
|
||
`project-bootstrap`, `setup-wiki`, `setup-tasks`, `project-discipline`,
|
||
`setup-interns`, and `using-interns` used.
|
||
5. **Step 5.6.** Skill dependencies check. Walk the canonical trigger list
|
||
in `CLAUDE.md`, look each up in an embedded `trigger → fulfiller` map,
|
||
detect what's missing on this host (`~/.claude/skills/<name>/SKILL.md`
|
||
for skills, `~/.claude/plugins/installed_plugins.json` for plugins),
|
||
and print one chat-only block listing every missing fulfiller with a
|
||
copy-pasteable install command. Prints a single ✅ line when nothing
|
||
is missing. Never auto-installs, never modifies project files.
|
||
6. **Commit.** `chore: bootstrap project structure` for fresh repos, or
|
||
`chore: upgrade project structure` adding only the new files for existing
|
||
ones. Pushes only on explicit user request.
|
||
7. **Summary.** Final report — what was created, what was skipped, suggested
|
||
next step.
|
||
|
||
## Rules
|
||
|
||
- Never overwrite an existing file without explicit user confirmation.
|
||
- Always show the plan before touching the filesystem.
|
||
- Never invent project details — read what's already there.
|
||
- Commit only files just created — never touch the rest of the tree.
|
||
- Push only after the user explicitly says so.
|
||
|
||
## Install
|
||
|
||
From the repo root:
|
||
|
||
**Windows (PowerShell):**
|
||
|
||
```powershell
|
||
bash scripts/install.sh project-bootstrap
|
||
```
|
||
|
||
**Linux / macOS (bash):**
|
||
|
||
```bash
|
||
bash scripts/install.sh project-bootstrap
|
||
```
|
||
|
||
`install.sh` works on Windows under git-bash. A native `install.ps1` is
|
||
[planned](../../.tasks/STATUS.md) but not required.
|
||
|
||
The skill installs to `~/.claude/skills/project-bootstrap/`. Override the
|
||
target with `CLAUDE_SKILLS_DIR=/path bash scripts/install.sh …`.
|
||
|
||
## See also
|
||
|
||
- [`setup-wiki`](../setup-wiki/) — companion, owns `.wiki/` layout.
|
||
- [`setup-tasks`](../setup-tasks/) — companion, owns `.tasks/` layout.
|
||
- [`using-wiki`](../using-wiki/) — runtime policy for working with `.wiki/`.
|
||
- [`using-tasks`](../using-tasks/) — runtime policy for working with `.tasks/`.
|
||
- [`project-discipline`](../project-discipline/) — cross-project rules
|
||
activated by the `follow project discipline` trigger.
|
||
- [`setup-interns`](../setup-interns/), [`using-interns`](../using-interns/) —
|
||
pair behind the `delegate to interns when allowed` trigger; cheap-LLM
|
||
delegation under a per-session permission grant.
|
||
- Karpathy's LLM Wiki gist:
|
||
<https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f>
|