@boopkit/cli 0.4.1 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -10
- package/dist/capability-catalog.json +7 -0
- package/dist/capability-versions.json +12 -11
- package/dist/cli.js +40 -19
- package/dist/commands/loop-merge.d.ts +83 -0
- package/dist/commands/loop-merge.js +436 -0
- package/dist/commands/loop.d.ts +143 -0
- package/dist/commands/loop.js +572 -60
- package/docs/init.md +179 -0
- package/docs/loop.md +204 -0
- package/docs/skills.md +88 -0
- package/package.json +5 -1
package/docs/init.md
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# boop init
|
|
2
|
+
|
|
3
|
+
`boop init` is the command you run when you want a real starting point quickly. It creates a new project directory, applies a boop profile, writes a `.boop.json` manifest, and, unless you opt out, installs npm dependencies. The goal is simple: get you to a local project you can run, extend, and keep clean as both humans and agents start contributing.
|
|
4
|
+
|
|
5
|
+
## Synopsis
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
boop init <name> --profile <profile>
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
If you omit `--profile`, Boop uses `web-app`.
|
|
12
|
+
|
|
13
|
+
## Before You Run It
|
|
14
|
+
|
|
15
|
+
The current `web-app` profile requires Node 24 or newer. If your Node version is too old, `boop init` exits before creating the directory and prints an upgrade hint.
|
|
16
|
+
|
|
17
|
+
## Available Profiles
|
|
18
|
+
|
|
19
|
+
List the profiles Boop knows about with:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
boop list profiles
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Current output:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
Available profiles:
|
|
29
|
+
|
|
30
|
+
web-app
|
|
31
|
+
Full-stack web application (Express + Handlebars + Tailwind + Postgres)
|
|
32
|
+
capabilities: web, api, database
|
|
33
|
+
runtime: node | deploy: heroku | port: 3000
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Right now the built-in profile is `web-app`.
|
|
37
|
+
|
|
38
|
+
## What It Creates
|
|
39
|
+
|
|
40
|
+
Running `boop init my-saas --profile web-app --no-install` creates a project like this:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
my-saas/
|
|
44
|
+
.boop.json
|
|
45
|
+
.gitignore
|
|
46
|
+
Procfile
|
|
47
|
+
README.md
|
|
48
|
+
package.json
|
|
49
|
+
reference/
|
|
50
|
+
architecture.ref.md
|
|
51
|
+
message-queue-patterns.ref.md
|
|
52
|
+
skills/
|
|
53
|
+
boop-api-rest-api-design/
|
|
54
|
+
SKILL.md
|
|
55
|
+
boop-coding-beads-flow/
|
|
56
|
+
SKILL.md
|
|
57
|
+
boop-coding-commit-changes/
|
|
58
|
+
SKILL.md
|
|
59
|
+
boop-coding-development/
|
|
60
|
+
SKILL.md
|
|
61
|
+
boop-coding-review-changes/
|
|
62
|
+
SKILL.md
|
|
63
|
+
boop-database-data-model/
|
|
64
|
+
SKILL.md
|
|
65
|
+
boop-database-prisma/
|
|
66
|
+
SKILL.md
|
|
67
|
+
boop-product-design-engineering-design/
|
|
68
|
+
SKILL.md
|
|
69
|
+
boop-product-design-feature-documentation/
|
|
70
|
+
SKILL.md
|
|
71
|
+
boop-product-design-feature-requirements/
|
|
72
|
+
SKILL.md
|
|
73
|
+
boop-product-design-reference-integration/
|
|
74
|
+
SKILL.md
|
|
75
|
+
boop-project-mgmt-beads-planning/
|
|
76
|
+
SKILL.md
|
|
77
|
+
boop-project-mgmt-engineering-planning/
|
|
78
|
+
SKILL.md
|
|
79
|
+
boop-services-controllers/
|
|
80
|
+
SKILL.md
|
|
81
|
+
boop-services-services/
|
|
82
|
+
SKILL.md
|
|
83
|
+
boop-skill-authoring/
|
|
84
|
+
SKILL.md
|
|
85
|
+
boop-testing-tdd-light/
|
|
86
|
+
SKILL.md
|
|
87
|
+
boop-testing-testing/
|
|
88
|
+
SKILL.md
|
|
89
|
+
boop-testing-testing-express-web/
|
|
90
|
+
SKILL.md
|
|
91
|
+
boop-web-web-ui-design/
|
|
92
|
+
SKILL.md
|
|
93
|
+
src/
|
|
94
|
+
lib/
|
|
95
|
+
.gitkeep
|
|
96
|
+
server.ts
|
|
97
|
+
tsconfig.json
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
That scaffold breaks down into a few parts:
|
|
101
|
+
|
|
102
|
+
- Kernel files: `.gitignore`, `Procfile`, `README.md`, `package.json`, `tsconfig.json`, `src/server.ts`, and `src/lib/.gitkeep`
|
|
103
|
+
- Profile reference docs: copied into `reference/`
|
|
104
|
+
- Profile and capability skills: copied into `skills/`
|
|
105
|
+
- Project manifest: `.boop.json` records the project name, profile, boop version, installed capabilities, and creation timestamp
|
|
106
|
+
- Capability install effects: default capability dependencies and scripts are merged into `package.json`, and the installed capability names are recorded in `.boop.json`
|
|
107
|
+
|
|
108
|
+
For the `web-app` profile, the default capabilities are:
|
|
109
|
+
|
|
110
|
+
- `web`
|
|
111
|
+
- `api`
|
|
112
|
+
- `database`
|
|
113
|
+
|
|
114
|
+
At the moment, those capabilities show up most clearly in `package.json`, `skills/`, and `.boop.json`. The initial source tree is still small: the kernel server entry point plus the copied reference and skill material.
|
|
115
|
+
|
|
116
|
+
Beyond the defaults, optional capabilities are available to add later with `boop add <capability>`. For example, `users-and-accounts` adds user management and authentication, and `noticeboard` provides a fuller service-layer reference demo. See the profile documentation for the complete list.
|
|
117
|
+
|
|
118
|
+
## Options
|
|
119
|
+
|
|
120
|
+
- `--profile <profile>`: choose which profile to initialize. Defaults to `web-app`.
|
|
121
|
+
- `--no-install`: skip `npm install`. This is useful if you want to inspect or adjust the scaffold before installing dependencies.
|
|
122
|
+
|
|
123
|
+
If you do not pass `--no-install`, Boop runs `npm install` after scaffolding and then prints the same next-step summary.
|
|
124
|
+
|
|
125
|
+
## Example: Initialize Without Installing
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
boop init my-saas --profile web-app --no-install
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Expected output:
|
|
132
|
+
|
|
133
|
+
```text
|
|
134
|
+
Created project "my-saas" with profile "web-app"
|
|
135
|
+
|
|
136
|
+
Kernel files:
|
|
137
|
+
.gitignore
|
|
138
|
+
Procfile
|
|
139
|
+
README.md
|
|
140
|
+
package.json
|
|
141
|
+
src/lib/.gitkeep
|
|
142
|
+
src/server.ts
|
|
143
|
+
tsconfig.json
|
|
144
|
+
|
|
145
|
+
Capabilities: web, api, database
|
|
146
|
+
|
|
147
|
+
Scripts added:
|
|
148
|
+
tailwind:build: npx @tailwindcss/cli -i src/public/css/input.css -o src/public/css/style.css --minify
|
|
149
|
+
tailwind:watch: npx @tailwindcss/cli -i src/public/css/input.css -o src/public/css/style.css --watch
|
|
150
|
+
db:migrate: prisma migrate dev --schema=prisma/schema/
|
|
151
|
+
db:deploy: prisma migrate deploy --schema=prisma/schema/
|
|
152
|
+
db:seed: prisma db seed --schema=prisma/schema/
|
|
153
|
+
db:generate: prisma generate --schema=prisma/schema/
|
|
154
|
+
db:studio: prisma studio --schema=prisma/schema/
|
|
155
|
+
|
|
156
|
+
Next steps:
|
|
157
|
+
cd my-saas
|
|
158
|
+
npm install
|
|
159
|
+
npm run dev
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## What To Do After Init
|
|
163
|
+
|
|
164
|
+
If you used `--no-install`, run:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
cd my-saas
|
|
168
|
+
npm install
|
|
169
|
+
npm run dev
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
If you let Boop install dependencies for you, the shorter version is:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
cd my-saas
|
|
176
|
+
npm run dev
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
That gets you to a local project quickly, with the reference material and agentic skills already in place so the next changes do not have to start from scratch.
|
package/docs/loop.md
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# boop loop
|
|
2
|
+
|
|
3
|
+
`boop loop` continuously processes ready beads issues through Claude Code sessions. It finds issues matching a prefix, launches Claude to work each one, and resumes if the issue isn't closed — all with dry-run safety by default. By default each loop runs inside its own git worktree (see [Worktree Isolation](#worktree-isolation-default)) so several loops can run concurrently without colliding.
|
|
4
|
+
|
|
5
|
+
It also supports a **planning mode** via `--work` and `--flow` flags, which bootstraps a feature issue tree from a spec file before looping through the created tasks.
|
|
6
|
+
|
|
7
|
+
## Synopsis
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Process existing issues by prefix
|
|
11
|
+
boop loop --prefix <prefix> [--run] [--max N] [--budget N.NN]
|
|
12
|
+
|
|
13
|
+
# Plan-then-execute: create a feature tree from a spec, then process tasks
|
|
14
|
+
boop loop --work <spec-file> --flow <workflow-file> [--run] [--prefix <hint>]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Without `--run`, the command shows what it would do without executing anything.
|
|
18
|
+
|
|
19
|
+
## How It Works
|
|
20
|
+
|
|
21
|
+
### Standard mode (`--prefix`)
|
|
22
|
+
|
|
23
|
+
1. Queries `bd ready` for leaf tasks in `--prefix` scope. Scope is two-layer: an issue matches if its ID starts with the prefix string, **or** if any ancestor in its parent chain has an ID that does — so issues re-parented under a matching epic or feature are processed even when their own IDs are unrelated. To run a group of related issues that don't share a prefix, create an epic, `bd update <id> --parent <epic-id>` each one, and pass the epic's ID as `--prefix`. Always pass a complete issue ID: matching is raw `startsWith`, so a truncated prefix like `boop-4` also matches `boop-45j`. Epics themselves and feature issues that own children are never claimed as work.
|
|
24
|
+
2. Picks the first ready issue and launches a Claude Code session
|
|
25
|
+
3. When Claude exits, checks if the issue was closed
|
|
26
|
+
4. If not closed, resumes the session with a continuation prompt (up to `--resume-limit` times)
|
|
27
|
+
5. Moves to the next ready issue and repeats
|
|
28
|
+
6. Exits when no more ready issues exist (or keeps polling with `--poll`)
|
|
29
|
+
|
|
30
|
+
Each Claude session gets a full prompt with issue details and instructions to work autonomously through the complete workflow: claim, implement, test, commit, close, and push.
|
|
31
|
+
|
|
32
|
+
### Planning mode (`--work` + `--flow`)
|
|
33
|
+
|
|
34
|
+
When `--work` and `--flow` are provided, boop loop runs a **plan-then-execute pipeline**:
|
|
35
|
+
|
|
36
|
+
1. **Planning phase** — Reads the spec file (`--work`) and workflow file (`--flow`), builds a planning prompt, and launches a Claude session that creates a feature issue with child tasks in beads.
|
|
37
|
+
2. **Feature ID extraction** — Parses the planning session output for `FEATURE_ID=<id>`. If not found, falls back to querying `bd list` for recently created features matching the spec's title.
|
|
38
|
+
3. **Loop phase** — Uses the extracted feature ID as the prefix and processes all child tasks through the standard loop, with `--features` automatically enabled.
|
|
39
|
+
|
|
40
|
+
If `--prefix` is also provided, it is passed to the planning session as a naming hint for the feature title (e.g., `--prefix boop-abc` suggests the feature should use that prefix).
|
|
41
|
+
|
|
42
|
+
## Flags
|
|
43
|
+
|
|
44
|
+
| Flag | Default | Description |
|
|
45
|
+
|------|---------|-------------|
|
|
46
|
+
| `--prefix <prefix>` | — | Issue ID prefix to filter. Required unless `--work`/`--flow` are used |
|
|
47
|
+
| `--work <path>` | — | Spec file for planning phase. Must be used with `--flow` |
|
|
48
|
+
| `--flow <path>` | — | Workflow file for planning phase. Must be used with `--work` |
|
|
49
|
+
| `--run` | off | Actually execute. Without this flag, dry-run mode shows what would happen |
|
|
50
|
+
| `--max <n>` | unlimited | Stop after processing N issues |
|
|
51
|
+
| `--budget <amount>` | `5.00` | Budget cap in USD, applied to both planning and per-issue phases |
|
|
52
|
+
| `--resume-limit <n>` | `3` | Maximum resume attempts if issue isn't closed |
|
|
53
|
+
| `--poll` | off | Keep polling when no ready issues found |
|
|
54
|
+
| `--poll-interval <s>` | `60` | Seconds between polls |
|
|
55
|
+
| `--model <model>` | `claude-opus-4-6` | Claude model to use |
|
|
56
|
+
| `--per-issue-branch` | off | Create a `fix/<issue-id>` branch per issue (nested inside the worktree) |
|
|
57
|
+
| `--no-branch` | off | Opt out of worktree isolation; run in-place on the current branch |
|
|
58
|
+
| `--features` | off | Include feature-type issues (auto-enabled in planning mode) |
|
|
59
|
+
| `--no-skip-perms` | off | Don't skip Claude permission prompts |
|
|
60
|
+
| `--json` | off | Output summary as JSON |
|
|
61
|
+
|
|
62
|
+
## Worktree Isolation (default)
|
|
63
|
+
|
|
64
|
+
By default, `boop loop` runs **inside its own git worktree** so that N loops can run concurrently without colliding. On start (with `--run`) the loop:
|
|
65
|
+
|
|
66
|
+
1. Creates a worktree at `../boop-<scope>` on a new branch `work/<scope>`, where `<scope>` is the feature ID (planning mode) or the `--prefix` value.
|
|
67
|
+
2. Runs `npm install --prefer-offline` in the worktree to pre-warm dependencies (so the agent doesn't spend budget on a deterministic step).
|
|
68
|
+
3. Writes `.boop-worktree.json` into the worktree root recording the beads scope, branch, and provenance (read by future integration tooling).
|
|
69
|
+
4. Runs the whole loop — every Claude session, commit, and `git push` — with its working directory set to the worktree.
|
|
70
|
+
|
|
71
|
+
**Your main working tree is never checked out or mutated by the loop.** When the loop finishes it **leaves the worktree and branch in place** for integration. Use `boop loop --merge` (see [Merging completed work](#merging-completed-work-boop-loop---merge)) for automated, test-gated integration, or merge by hand:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
git -C <main-repo> merge work/<scope> # or open a PR from the branch
|
|
75
|
+
git worktree remove ../boop-<scope> # clean up when done
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
If you re-run a loop for the same scope, an existing worktree on the matching `work/<scope>` branch is reused; a path occupied by something else is reported as an error rather than silently renamed.
|
|
79
|
+
|
|
80
|
+
### Dolt server-mode requirement
|
|
81
|
+
|
|
82
|
+
Concurrent worktrees share **one** beads issue database over a TCP Dolt server. The loop therefore requires beads to be in **Dolt server mode**:
|
|
83
|
+
|
|
84
|
+
- It reads `.beads/metadata.json` and refuses to start unless `dolt_mode` is `"server"`, pointing you to `skills/boop-dolt-recovery` otherwise.
|
|
85
|
+
- It discovers the running server's port from `.beads/dolt-server.port` (it never starts a server itself) and copies the `dolt-server.port`/`dolt-server.pid` discovery files into the new worktree's `.beads/` so `bd` inside the worktree connects to the shared server instead of auto-starting a rogue one.
|
|
86
|
+
|
|
87
|
+
Start the shared server with `bd dolt start` before running the loop.
|
|
88
|
+
|
|
89
|
+
### Branching alternatives
|
|
90
|
+
|
|
91
|
+
- **`--no-branch`** — Opts out of worktree isolation entirely and runs **in-place on the current branch** (the original single-tenant behavior). Use this when you've already set up the branch/tree you want and are running only one loop.
|
|
92
|
+
- **`--per-issue-branch`** — Creates a separate `fix/<issue-id>` branch for each issue. Under worktree isolation these branches are created **inside** the loop's worktree (nested under `work/<scope>`), keeping main untouched. Combine with `--no-branch` to get the old in-place per-issue behavior.
|
|
93
|
+
|
|
94
|
+
## Merging completed work (`boop loop --merge`)
|
|
95
|
+
|
|
96
|
+
Once feature loops finish, `boop loop --merge` integrates their branches back into `main` sequentially. No individual loop merges its own branch — this dedicated integrator does it, so failures in one feature never block others.
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
boop loop --merge # dry-run: list branches ready to merge
|
|
100
|
+
boop loop --merge --run # integrate every ready branch
|
|
101
|
+
boop loop --merge work/<scope> --run # merge one named branch, skipping the readiness check
|
|
102
|
+
boop loop --merge --run --watch # poll and merge branches as they become ready
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
For each ready branch (one at a time, with `main` as the integration branch):
|
|
106
|
+
|
|
107
|
+
1. **Readiness** — a branch is ready when every beads issue in its scope is closed (scope is read from the worktree's `.boop-worktree.json`). `bd ready` is insufficient here — it only lists *unblocked* issues — so `--merge` lists by status and filters by scope. An explicit `boop loop --merge work/<scope>` skips this check.
|
|
108
|
+
2. **Rebase onto main** inside the worktree. Only **`package.json` dependency conflicts** are auto-resolved (union of dependencies; same-key version conflicts take the higher semver). Any other conflict aborts the rebase, files a beads bug, and skips to the next branch.
|
|
109
|
+
3. **Run `npm test`** in the worktree. On failure the branch is reset to its pre-rebase commit, a beads bug is filed, and the branch is skipped.
|
|
110
|
+
4. **Fast-forward merge** into `main`, then remove the worktree and delete the merged branch.
|
|
111
|
+
|
|
112
|
+
**Safety contract:** `main` is never left dirty. The integration tree must be on a clean `main` before merging; a rebase conflict aborts cleanly, and a post-rebase test failure resets the feature branch. Every merge runs the test suite before completing, so no merge lands untested.
|
|
113
|
+
|
|
114
|
+
## Logs
|
|
115
|
+
|
|
116
|
+
Session logs are written to `labs/claude-runs/` in the project directory. Each issue produces a log file named `<issue-id>_<timestamp>.log` containing the full Claude stream-json output.
|
|
117
|
+
|
|
118
|
+
## Safety
|
|
119
|
+
|
|
120
|
+
- **Dry-run by default** — nothing executes without `--run`
|
|
121
|
+
- **Budget caps** — each issue is capped at `--budget` USD
|
|
122
|
+
- **Resume limits** — prevents infinite retry loops (default: 3 attempts)
|
|
123
|
+
- **Permission skipping** — enabled by default for unattended operation; use `--no-skip-perms` to require approval for each tool call
|
|
124
|
+
|
|
125
|
+
## Planning Mode
|
|
126
|
+
|
|
127
|
+
### Dry-run
|
|
128
|
+
|
|
129
|
+
Without `--run`, planning mode shows the prompt that would be sent to Claude and exits:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
boop loop --work specs/foo.spec.md --flow skills/bar.skill.md
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Output:
|
|
136
|
+
```
|
|
137
|
+
[bd-loop] PLANNING MODE (dry-run)
|
|
138
|
+
[bd-loop] Work file: specs/foo.spec.md
|
|
139
|
+
[bd-loop] Flow file: skills/bar.skill.md
|
|
140
|
+
[bd-loop] Planning prompt that would be sent:
|
|
141
|
+
---
|
|
142
|
+
<planning prompt content>
|
|
143
|
+
---
|
|
144
|
+
[bd-loop] After planning, loop would process tasks under the created feature.
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Full run
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
boop loop --work specs/foo.spec.md --flow skills/bar.skill.md --run
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
This launches a Claude session to create the feature tree, extracts the feature ID, then loops through all child tasks.
|
|
154
|
+
|
|
155
|
+
### Using `--prefix` as a naming hint
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
boop loop --work specs/foo.spec.md --flow skills/bar.skill.md --prefix boop-foo --run
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
The prefix is included in the planning prompt as a suggestion for naming the feature. After planning, the prefix is overridden with the actual feature ID for the loop phase.
|
|
162
|
+
|
|
163
|
+
### Error handling
|
|
164
|
+
|
|
165
|
+
- **Missing files** — If the `--work` or `--flow` file doesn't exist, the command exits with an error before launching any session.
|
|
166
|
+
- **Flags used separately** — `--work` without `--flow` (or vice versa) prints an error. They must be used together.
|
|
167
|
+
- **Feature ID not found** — If the planning session doesn't output `FEATURE_ID=<id>` and the fallback query finds no matching recent feature, the command exits with an error and points to the session log for debugging.
|
|
168
|
+
- **Planning session limit hit** — If the Claude session hits a usage limit, the command exits without proceeding to the loop phase.
|
|
169
|
+
|
|
170
|
+
Planning session logs are written to `labs/claude-runs/` with the prefix `_planning_`.
|
|
171
|
+
|
|
172
|
+
### Budget and planning
|
|
173
|
+
|
|
174
|
+
The `--budget` value is a **per-session cap**, applied identically to the planning phase and to each task in the loop phase. A complex spec can consume a large portion of the budget during planning, leaving the same cap for each task — but if tasks are simpler than the plan, this is usually fine since each task gets its own independent budget allowance.
|
|
175
|
+
|
|
176
|
+
However, be aware:
|
|
177
|
+
- A spec that requires extensive decomposition (many tasks, deep dependency trees) may use most of the budget during planning.
|
|
178
|
+
- If the planning session hits the budget limit, it exits without creating the full task tree and the loop phase does not start.
|
|
179
|
+
- At runtime, boop loop warns if the planning phase consumes more than 50% of the budget.
|
|
180
|
+
|
|
181
|
+
To mitigate, increase `--budget` when using complex specs, or break large specs into smaller ones.
|
|
182
|
+
|
|
183
|
+
### Interaction with other flags
|
|
184
|
+
|
|
185
|
+
- **`--budget`** — The same budget value is used for both the planning phase and each task in the loop phase.
|
|
186
|
+
- **`--features`** — Automatically enabled after planning, so the feature issue itself is included in the loop queue.
|
|
187
|
+
- **`--model`**, **`--no-skip-perms`** — Applied to both planning and task sessions.
|
|
188
|
+
- **`--poll`**, **`--max`**, **`--resume-limit`** — Apply only to the loop phase (not planning).
|
|
189
|
+
|
|
190
|
+
## Workflow Integration
|
|
191
|
+
|
|
192
|
+
`boop loop` works with the beads issue tracker. Typical workflows:
|
|
193
|
+
|
|
194
|
+
### Manual issue setup
|
|
195
|
+
1. Plan work with `bd create` and set up dependencies
|
|
196
|
+
2. Run `boop loop --prefix <prefix>` to preview the queue
|
|
197
|
+
3. Run `boop loop --prefix <prefix> --run` to execute
|
|
198
|
+
4. After completion, integrate with `boop loop --merge --run` (or review the `work/<prefix>` branch in the `../boop-<prefix>` worktree and merge it by hand)
|
|
199
|
+
|
|
200
|
+
### Automated planning
|
|
201
|
+
1. Write a spec in `specs/` and choose a workflow skill from `skills/`
|
|
202
|
+
2. Preview: `boop loop --work specs/my-feature.spec.md --flow skills/dev-workflow.skill.md`
|
|
203
|
+
3. Execute: `boop loop --work specs/my-feature.spec.md --flow skills/dev-workflow.skill.md --run`
|
|
204
|
+
4. The planning phase creates the feature tree, then the loop processes each task
|
package/docs/skills.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# boop skills index
|
|
2
|
+
|
|
3
|
+
> Generated by `tools/generate-skills-index.js` (`npm run skills:index`). Do not edit by hand.
|
|
4
|
+
|
|
5
|
+
Every capability ships **agent skills** — focused `SKILL.md` guides that `boop add` installs into your project's `skills/` directory. This index lists them by capability so you can see what guidance each one brings before installing it.
|
|
6
|
+
|
|
7
|
+
## Development capabilities (skills only — no runtime code)
|
|
8
|
+
|
|
9
|
+
### `coding` — Development tools and conventions
|
|
10
|
+
|
|
11
|
+
- **boop-coding-beads-flow** — When you need to work through the beads issue lifecycle from claiming work to pushing final code.
|
|
12
|
+
- **boop-coding-development** — When you need to build features or implement changes, follow these core development principles and workflows.
|
|
13
|
+
- **boop-coding-commit-changes** — When you need to commit code changes, use **Conventional Commits** to write clear, machine-readable commit messages that communicate the nature of each change.
|
|
14
|
+
- **boop-coding-review-changes** — When you need to review uncommitted code changes, use this skill to perform a judgment-level code review using git diffs.
|
|
15
|
+
- **boop-coding-debugging** — When you need to diagnose a bug, crash, or failing test, debug from the data and the observation — not from the first familiar mechanism.
|
|
16
|
+
|
|
17
|
+
### `product-design` — Product design skills
|
|
18
|
+
|
|
19
|
+
- **boop-product-design-engineering-design** — When you need to design a feature or system and communicate the technical decisions — including when you frame the task as writing a design doc, drafting the technical or engineering section of a spec, deciding the architecture, or choosing how to build something. Reaching for an existing design to imitate its structure is not a substitute for the method. For UI features, includes a per-affordance interaction-shapes pass that derives page/surface count from job-anchored mechanism choices rather than asserting it up front.
|
|
20
|
+
- **boop-product-design-feature-documentation** — When you need to document a complex feature, function, or system — including when you frame the task as 'write the docs', 'write a README', 'write up how X works', or 'explain this for the next reader who picks it up cold'.
|
|
21
|
+
- **boop-product-design-feature-requirements** — When you need to write a feature spec, draft a spec document, or turn a brief or vague directive into requirements — i.e. define what a feature should accomplish before designing how to build it. This fires even when you frame the task to yourself as just 'writing a spec' or 'matching the house spec format': reading an existing spec to imitate its shape is not a substitute for the method, and the more competent you feel at the raw task the more this applies. Start with the user's jobs to be done, in frequency order; take and defend a stance; then derive goals, non-goals, and success metrics.
|
|
22
|
+
- **boop-product-design-reference-integration** — When you need to integrate new knowledge into the project's `reference/` directory after completing a feature, fixing a bug that changes behavior, or adding a capability.
|
|
23
|
+
- **boop-product-design-thought-partnership** — When the user wants to think out loud through a design — a feature, a capability, a strategic direction — be a thought partner, not an implementer: hold the conversation at user-and-value altitude, honor uncertainty with hypotheses rather than pretend-decisions, and keep software-shaped concerns downstream of the user's lived problems.
|
|
24
|
+
- **boop-writing-technical-prose** — When writing chat responses, bd issue bodies, or any artifact a fresh reader will pick up cold, write grammatical conversational English. Avoid the agent-shorthand patterns that compress meaning at the cost of legibility.
|
|
25
|
+
|
|
26
|
+
### `project-mgmt` — Project management with beads
|
|
27
|
+
|
|
28
|
+
- **boop-project-mgmt-beads-planning** — When you need to write and organize beads issues so that any fresh agent can pick up work.
|
|
29
|
+
- **boop-project-mgmt-engineering-planning** — When you need to decompose a design into an executable plan of work — including when you frame the task as 'make a plan', 'break this into tasks or steps', 'figure out the order of work', or planning a build before you start writing issues. Order the work by uncertainty reduction, not just demonstrable value.
|
|
30
|
+
|
|
31
|
+
### `skills` — Skill authoring
|
|
32
|
+
|
|
33
|
+
- **boop-skill-authoring** — When you need to add or update an agent skill in this project, follow this format and checklist.
|
|
34
|
+
- **boop-skills-discovery** — When you pick up a non-trivial task, sweep the available skills for ones relevant to the work before you start, as a backstop for an issue that missed a breadcrumb.
|
|
35
|
+
- **boop-skills-agent-surface-design** — When you design or audit tool surfaces (tools, schemas, APIs, conventions) that LLM agents will reach for, decide where to put the friction — adapt the system to the agent, or make the existing thing more discoverable. Last resort: prompt-engineer.
|
|
36
|
+
|
|
37
|
+
### `testing` — Jest testing setup
|
|
38
|
+
|
|
39
|
+
- **boop-testing-tdd-light** — When you need to build features, implement changes, or fix bugs, follow the Light TDD Flow. This includes bug fixes found during UAT — write the failing test *before* applying the fix.
|
|
40
|
+
- **boop-testing-testing-express-web** — When you need to write or run tests for the Express server — services, controllers, middleware, and HTTP routes.
|
|
41
|
+
- **boop-testing-testing** — When you need to write, run, or reason about tests in this project.
|
|
42
|
+
|
|
43
|
+
### `ux` — UX design judgement and the discovery/delivery workflows that operate it
|
|
44
|
+
|
|
45
|
+
- **boop-ux-purpose-judgement** — When you are evaluating a rendered page and need to judge whether each thing on it belongs there, in the right shape, for the right job. Asks the structural question that the visual lens does not — is this affordance the right idea, not just rendered well. Pairs with ux-visual-judgement (the question of how things look and scan).
|
|
46
|
+
- **boop-ux-visual-judgement** — When you are evaluating a rendered page and need to form a principled judgement about how it looks and scans. Visual lens only — eye-path, register, anatomy, scan-line, gestalt, density, voice. Pairs with ux-purpose-judgement (the question of whether each element belongs at all) and with the CSS skill (the grammar of how things are rendered).
|
|
47
|
+
- **boop-ux-eval-and-refine-workflow** — When you are tasked with iteratively evaluating and improving an existing rendered page (discovery, not delivery), follow this workflow. Inner loop: capture → eval → recommend → implement → re-capture. Outer: knowledge integration.
|
|
48
|
+
- **boop-ux-app-ui-dev-workflow** — When you are tasked with improving an existing app-side page (app UX, not marketing) end-to-end and the input is a target page rather than a written spec, follow this beads-issue-per-step workflow. Sibling to feature-dev-workflow but stripped of backend phases. The judgement lenses are the planning input.
|
|
49
|
+
|
|
50
|
+
## Application capabilities
|
|
51
|
+
|
|
52
|
+
### `api` — REST API with Express
|
|
53
|
+
|
|
54
|
+
- **boop-api-rest-api-design** — When you need to design or implement REST-style HTTP APIs — including when you frame the task as 'add an endpoint', 'add a route', 'build the API', or 'decide the request and response shape' — follow these principles.
|
|
55
|
+
|
|
56
|
+
### `background-jobs` — Background job processing with RabbitMQ via CloudAMQP
|
|
57
|
+
|
|
58
|
+
- **boop-background-jobs-background-jobs-design** — When you need to add a background job consumer, publish messages, or work with the message queue infrastructure, follow these principles.
|
|
59
|
+
|
|
60
|
+
### `cloud-storage` — Cloud storage service for files and assets (AWS S3)
|
|
61
|
+
|
|
62
|
+
- **boop-cloud-storage-cloud-storage** — When you need to work with cloud storage for files and assets in a boop project (using AWS S3).
|
|
63
|
+
|
|
64
|
+
### `database` — Postgres via Prisma ORM
|
|
65
|
+
|
|
66
|
+
- **boop-database-prisma** — When you need to design, modify, or migrate the app database schema.
|
|
67
|
+
- **boop-database-data-model** — When you need to design data models for new features or extend existing entities.
|
|
68
|
+
|
|
69
|
+
### `email` — Transactional email via Sendgrid with Handlebars templates
|
|
70
|
+
|
|
71
|
+
- **boop-email-email-design** — When you need to design, implement, or work with transactional email, follow these guidelines.
|
|
72
|
+
|
|
73
|
+
### `services` — Service layer with controllers and business logic
|
|
74
|
+
|
|
75
|
+
- **boop-services-controllers** — When you need to design, implement, or review a controller, follow these principles.
|
|
76
|
+
- **boop-services-services** — When you need to design, implement, or review a service, follow these principles.
|
|
77
|
+
|
|
78
|
+
### `users-and-accounts` — Users, identities, properties, and authentication via Prisma
|
|
79
|
+
|
|
80
|
+
- **boop-users-user-data-modeling** — When you need to add, store, or query a field related to users, identities, or accounts in a boop project, decide *where* the field belongs before writing the schema or service.
|
|
81
|
+
|
|
82
|
+
### `web` — Web UI with Handlebars + Tailwind
|
|
83
|
+
|
|
84
|
+
- **boop-web-web-ui-design** — When you need to design and implement user interfaces — including when you frame the task as 'build a page', 'add a component', 'style this surface', or 'wire up the UI' — following established patterns and philosophy.
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
Standalone workflow skills (e.g. `boop-feature-dev-workflow`, `boop-light-dev-workflow`, `boop-issue-sweep-workflow`, `boop-design-handoff-workflow`) live in the repo's top-level `skills/` directory rather than in a capability package, so they are not listed above.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@boopkit/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "boop: the opinionated bootstrap for founder friendly, AI-first web apps - code plus agent skills, composable from day one.",
|
|
5
5
|
"main": "dist/cli.js",
|
|
6
6
|
"workspaces": [
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
13
|
"dist/",
|
|
14
|
+
"docs/init.md",
|
|
15
|
+
"docs/loop.md",
|
|
16
|
+
"docs/skills.md",
|
|
14
17
|
"profiles/",
|
|
15
18
|
"src/templates/"
|
|
16
19
|
],
|
|
@@ -19,6 +22,7 @@
|
|
|
19
22
|
},
|
|
20
23
|
"scripts": {
|
|
21
24
|
"build": "tsc && node tools/generate-version-manifest.js",
|
|
25
|
+
"skills:index": "node tools/generate-skills-index.js",
|
|
22
26
|
"build:caps": "./tools/build-caps.sh",
|
|
23
27
|
"publish": "./tools/publish-caps.sh",
|
|
24
28
|
"release": "./tools/publish-caps.sh --release",
|