Step 5 was binary on upgrade (append whole template / leave alone), so projects bootstrapped before v1.2.0 silently missed new canonical triggers (`check across all projects`, `we're on Windows`) on re-run. Now upgrade reads existing CLAUDE.md, substring-diffs vs template, preserves a deliberately-pinned platform line, and appends only missing lines after explicit confirm. Re-runs are no-ops. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
109 lines
4.7 KiB
Markdown
109 lines
4.7 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`, and `setup-tasks` used.
|
||
5. **Step 5.6.** Detect the official `superpowers@claude-plugins-official`
|
||
plugin via `~/.claude/plugins/installed_plugins.json`. If absent, print
|
||
a one-time chat recommendation with the install command and upstream
|
||
link. 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/`.
|
||
- Karpathy's LLM Wiki gist:
|
||
<https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f>
|