@boopkit/cli 0.1.15 → 0.3.0

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # boop
2
2
 
3
- CLI tool to scaffold new projects from reusable profiles and capabilities. Get a running web app with proven architecture, conventions, and AI agent skills — in one command.
3
+ Boop is a bootstrap platform for AI-first builders — founders, small teams, and anyone chasing product-market fit without sliding into a vibe-coded swamp. One command gives you a running project with the capabilities you pick: web server, APIs, database, and the design and coding skills your agents need to keep the code clean as it grows. Code plus expertise, already in the box.
4
4
 
5
5
  ## Install
6
6
 
@@ -8,78 +8,180 @@ CLI tool to scaffold new projects from reusable profiles and capabilities. Get a
8
8
  npm install -g @boopkit/cli@beta
9
9
  ```
10
10
 
11
- Or use directly:
11
+ Or run directly with `npx`:
12
12
 
13
13
  ```bash
14
- npx @boopkit/cli@beta init myapp
14
+ npx @boopkit/cli@beta init my-app
15
15
  ```
16
16
 
17
17
  ## Quick Start
18
18
 
19
- ```bash
20
- # go to your projects directory
21
- cd ~/projects
22
-
23
- # install the boop CLI globally
24
- npm install -g @boopkit/cli@beta
19
+ Six commands from nothing to a running local app with agent-ready skills already in place.
25
20
 
26
- # scaffold a new app from the default profile (web-app)
21
+ ```bash
22
+ # Scaffold a new project from the default profile (web-app)
27
23
  boop init my-app
28
24
  cd my-app
29
- boop status # have your agent follow instructions to finish setup
25
+ ```
30
26
 
31
- # start your web server
32
- npm run dev
27
+ `boop init` creates the project directory, applies the `web-app` profile, installs capability packages from npm, and scaffolds files into your project — including a `.boop.json` manifest that records what profile and capabilities are installed.
33
28
 
34
- # stop the server...
29
+ ```bash
30
+ # See what was installed, what's configured, and what to do next
31
+ boop status
32
+ ```
35
33
 
36
- # see available capabilities to add new features
37
- npm caps
34
+ `boop status` prints post-install instructions from every capability — environment variables to set, services to start, migrations to run. Hand it to your AI agent as a checklist.
38
35
 
39
- # add user authentication and account management features
40
- # have your agent follow instructions to finish setup
41
- boop add users-and-accounts
36
+ ```bash
37
+ # Start the dev server
38
+ npm run dev
39
+ ```
42
40
 
41
+ You now have an Express + Handlebars + Tailwind app running on port 3000, backed by PostgreSQL via Prisma.
42
+
43
+ ```bash
44
+ # Browse available capabilities and add one
45
+ boop caps
46
+ boop add users-and-accounts
43
47
  ```
44
48
 
49
+ `boop add` resolves transitive dependencies, installs packages, merges scaffold files, wires middleware hooks into your server, and installs agent skills — all declaratively driven by each capability's `capability.json`.
50
+
51
+ ## The Capability Model
52
+
53
+ Start simple, grow deliberately. That's the shape of a boop project: a strong starting point you can extend without collecting scaffolding debt.
54
+
55
+ A **profile** is a named starting point. It defines the kernel (TypeScript config, `package.json`, `src/server.ts`, deployment setup) and a set of default capabilities.
56
+
57
+ A **capability** is a composable feature bundle. Each capability package ships:
58
+
59
+ - **Scaffold files** — code, configs, templates copied into your project
60
+ - **npm dependencies** — merged into your `package.json`
61
+ - **Middleware hooks** — lines wired into `src/server.ts` at the right phase (imports, pre-routes, routes, error-handling)
62
+ - **Scripts** — added to `package.json` (e.g. `db:migrate`, `tailwind:build`)
63
+ - **Post-install steps** — human/agent-readable instructions printed by `boop status`
64
+ - **Agent skills** — `.skill.md` files that teach AI agents the conventions this capability uses
65
+
66
+ Capabilities can declare `requires` relationships (e.g. `users-and-accounts` requires `database`, `services`, and `web`). `boop add` resolves the dependency graph and installs everything needed.
67
+
68
+ ## Profiles
69
+
70
+ A profile is where a project starts. Today there's one; more will follow as the common shapes of AI-first products become clearer.
71
+
72
+ ### `web-app`
73
+
74
+ Full-stack web application — Express + Handlebars + Tailwind CSS + PostgreSQL via Prisma, deployable to Heroku.
75
+
76
+ Ships with application capabilities (`web`, `api`, `services`, `database`), development skills (`coding`, `testing`, `project-mgmt`, `product-design`, `skills`), and the `hello` demo capability.
77
+
78
+ List profiles with `boop list profiles`.
79
+
80
+ ## Available Capabilities
81
+
82
+ Pick what the product needs. `boop add <name>` handles the wiring — npm dependencies, scaffold files, middleware hooks, and the agent skills that go with the feature.
83
+
84
+ ### Application
85
+
86
+ | Name | What it adds | Requires |
87
+ |------|--------------|----------|
88
+ | `web` | Handlebars view engine, Tailwind CSS, static asset serving, request logging | — |
89
+ | `api` | Express API middleware — error handling, request ID, 404 handler, health checks | — |
90
+ | `services` | Service-layer pattern — controllers, auto-discovered `*.service.ts` files, factory-based data access | — |
91
+ | `database` | PostgreSQL via Prisma — schema, migrations, transaction helper, health check | — |
92
+ | `users-and-accounts` | User accounts, identities, properties, and session-based authentication | `database`, `services`, `web` |
93
+ | `email` | Transactional email via SendGrid with Handlebars templates | `services` |
94
+ | `background-jobs` | Background job processing with RabbitMQ (CloudAMQP) | `services` |
95
+ | `cloud-storage` | File and asset storage via AWS S3 | `services` |
96
+ | `noticeboard` | Reference demo feature showing the full service-layer pattern end-to-end | — |
97
+
98
+ ### Development (skills-only — no runtime code)
99
+
100
+ | Name | What it adds |
101
+ |------|--------------|
102
+ | `coding` | Development conventions and coding skills for AI agents |
103
+ | `testing` | Jest setup and testing skills (TDD workflow, Express testing patterns) |
104
+ | `project-mgmt` | Beads issue-tracking and planning skills |
105
+ | `product-design` | Feature-requirements and product-design skills |
106
+ | `skills` | Skill-authoring guidance for extending the skill library |
107
+
108
+ ### Demo
109
+
110
+ | Name | What it adds |
111
+ |------|--------------|
112
+ | `hello` | Minimal capability used to validate the install pipeline |
113
+
45
114
  ## Commands
46
115
 
116
+ Most days you'll use `init`, `add`, and `status`. The rest are there when you need them.
117
+
47
118
  | Command | Description |
48
119
  |---------|-------------|
120
+ | `boop init <name>` | Create a new project from a profile (default: `web-app`) |
49
121
  | `boop list profiles` | List available profiles |
50
- | `boop init <name>` | Create a new project from a profile (default profile is `web-app`) |
51
- | `boop status` | Show current project status |
52
- | `boop caps` | List available capabilities (alias for `boop list capabilities`) |
53
- | `boop add <capability>` | Add a capability to an existing project |
122
+ | `boop list capabilities` | List available capabilities |
123
+ | `boop caps` | Shortcut for `list capabilities` |
124
+ | `boop status` | Show installed capabilities and pending post-install steps |
125
+ | `boop add <capability>` | Install a capability into an existing project |
126
+ | `boop update [capability]` | Re-scaffold files from installed capability packages |
127
+ | `boop adopt <capability>` | Copy a capability's source into your project for full ownership |
128
+ | `boop loop` | (Advanced) A hands-off spec-to-code workflow. Continuously process ready beads issues through Claude Code sessions. |
54
129
 
55
- ## What You Get
130
+ Flags:
56
131
 
57
- `boop init` scaffolds a full-stack web application with:
132
+ - `boop init --no-install` / `boop add --no-install` — skip `npm install`
133
+ - `boop add --dry-run` — preview changes without writing
134
+ - `boop update --force` — overwrite locally modified scaffold files (creates `.bak` backups)
135
+ - `boop update --prune` — remove scaffold files no longer shipped by the capability
58
136
 
59
- - **Express** server with Handlebars views and Tailwind CSS
60
- - **REST API** with controllers, routes, and middleware
61
- - **TypeScript** with strict mode and path aliases
62
- - **Jest** testing setup with TDD workflow
63
- - **Multi-process architecture** (web, worker, scheduler)
64
- - **Heroku deployment** via Procfile
65
- - **AI agent skills** for development, testing, design, and project management
137
+ ## Working with AI Agents
66
138
 
67
- Capabilities are additive. Start simple, add complexity when you need it:
139
+ Boop is built for agent-assisted work — the skills and conventions ship with the code so your agent has real guidance, not just a blank repo. Every scaffolded project includes:
68
140
 
69
- ```bash
70
- boop add users-and-accounts # Adds user authentication and account management features
71
- boop add email # Adds email sending capabilities with templates
72
- ```
141
+ - **Skills** — every capability installs `.skill.md` files into `skills/`. These are focused, task-specific instructions (e.g. `design.rest-api-design.skill.md`, `test.tdd-light.skill.md`) that tell an agent the conventions this project uses.
142
+ - **`boop status`** — after `boop init` or `boop add`, run `boop status`. It prints every capability's post-install steps. Hand this to your agent and say "finish setup."
143
+ - **`boop loop`** — Uses Claude for 'unattended work', building working code and UI from your specifications.
144
+ - `prefix` mode: Plan work as a tree of issues, then `boop loop --prefix <id>` processes them one at a time, each in its own Claude Code session. Dry-run by default; budget-capped; resumes unfinished work. See [docs/loop.md](docs/loop.md).
145
+ - `workflow` mode: Provide your spec and the bundled `feature-dev-workflow` skill to `boop loop --work <spec> --flow <skill>`. It processes the spec requirements into a technical design, a set of linked tasks and then continuously processes issues until the work is complete. See [docs/loop.md](docs/loop.md#workflow-mode).
146
+
147
+ The workflow is designed so a human sets direction, an agent does the implementation, and boop provides the rails.
148
+
149
+ ## Post-Init: What to Do Next
150
+
151
+ After `boop init`, `boop status` will list the specific steps for the capabilities you installed. Typical setup for a `web-app` project:
152
+
153
+ 1. **Set environment variables** — `.env` values for `DATABASE_URL`, and anything capabilities you added need (`SENDGRID_API_KEY`, `CLOUDAMQP_URL`, `AWS_ACCESS_KEY_ID`, etc.)
154
+ 2. **Start Postgres** — e.g. `brew services start postgresql` or a Docker container
155
+ 3. **Run migrations** — `npm run db:migrate`
156
+ 4. **Build CSS** — `npm run tailwind:build`
157
+ 5. **Start the dev server** — `npm run dev`
73
158
 
74
- ## Development
159
+ Add more capabilities as you need them:
75
160
 
76
161
  ```bash
77
- npm install
78
- npm run build
79
- npm run test
80
- npm run dev -- init test-project # Run from source
162
+ boop add email # transactional email
163
+ boop add background-jobs # async job processing
164
+ boop add cloud-storage # S3 file uploads
81
165
  ```
82
166
 
167
+ ## Requirements
168
+
169
+ Boop itself is light — Node and npm. The other requirements come from whichever capabilities you install, so you're not signing up for them until you opt in.
170
+
171
+ - **Node.js 24+** (the `web-app` profile enforces this)
172
+ - **npm** (or any package manager that respects workspaces)
173
+ - **PostgreSQL** — if the `database` capability is installed
174
+ - **RabbitMQ / CloudAMQP account** — if `background-jobs` is installed
175
+ - **SendGrid account** — if `email` is installed
176
+ - **AWS S3 bucket** — if `cloud-storage` is installed
177
+
178
+ ## Links
179
+
180
+ - **[docs/init.md](docs/init.md)** — detailed `boop init` walkthrough
181
+ - **[docs/loop.md](docs/loop.md)** — automated agent workflow
182
+ - **[GitHub repo](https://github.com/boop-labs/boop)** — source and issues
183
+ - **[Contributing](https://github.com/boop-labs/boop/blob/main/CONTRIBUTING.md)** — dev setup, architecture, how to add a capability
184
+
83
185
  ## License
84
186
 
85
- Private
187
+ ISC
@@ -4,7 +4,9 @@
4
4
  "description": "REST API with Express",
5
5
  "type": "application",
6
6
  "package": "@boopkit/cap-api",
7
- "requires": []
7
+ "requires": [
8
+ "web"
9
+ ]
8
10
  },
9
11
  {
10
12
  "name": "background-jobs",
@@ -59,7 +61,9 @@
59
61
  "description": "Notice board demo — data service, business service, handler set, and router factory",
60
62
  "type": "demo",
61
63
  "package": "@boopkit/cap-noticeboard",
62
- "requires": []
64
+ "requires": [
65
+ "web"
66
+ ]
63
67
  },
64
68
  {
65
69
  "name": "product-design",
@@ -1,18 +1,18 @@
1
1
  {
2
- "@boopkit/cap-api": "0.1.0",
3
- "@boopkit/cap-background-jobs": "0.2.0",
4
- "@boopkit/cap-cloud-storage": "0.1.0",
5
- "@boopkit/cap-coding": "0.1.0",
6
- "@boopkit/cap-database": "0.1.3",
7
- "@boopkit/cap-email": "0.1.0",
8
- "@boopkit/cap-hello": "0.1.0",
9
- "@boopkit/cap-noticeboard": "0.1.1",
10
- "@boopkit/cap-product-design": "0.1.0",
11
- "@boopkit/cap-project-mgmt": "0.1.0",
12
- "@boopkit/cap-services": "0.1.0",
13
- "@boopkit/cap-skills": "0.1.0",
14
- "@boopkit/cap-testing": "0.1.0",
15
- "@boopkit/cap-users": "0.1.0",
16
- "@boopkit/cap-web": "0.1.1",
17
- "@boopkit/logger": "0.1.0"
2
+ "@boopkit/cap-api": "0.3.0",
3
+ "@boopkit/cap-background-jobs": "0.3.0",
4
+ "@boopkit/cap-cloud-storage": "0.3.0",
5
+ "@boopkit/cap-coding": "0.3.0",
6
+ "@boopkit/cap-database": "0.3.0",
7
+ "@boopkit/cap-email": "0.3.0",
8
+ "@boopkit/cap-hello": "0.3.0",
9
+ "@boopkit/cap-noticeboard": "0.3.0",
10
+ "@boopkit/cap-product-design": "0.3.0",
11
+ "@boopkit/cap-project-mgmt": "0.3.0",
12
+ "@boopkit/cap-services": "0.3.0",
13
+ "@boopkit/cap-skills": "0.3.0",
14
+ "@boopkit/cap-testing": "0.3.0",
15
+ "@boopkit/cap-users": "0.3.0",
16
+ "@boopkit/cap-web": "0.3.0",
17
+ "@boopkit/logger": "0.3.0"
18
18
  }
@@ -61,7 +61,7 @@ function listProfilesCommand() {
61
61
  * Reused by both `boop list capabilities` and `boop add` (no arg).
62
62
  */
63
63
  function printGroupedCapabilities() {
64
- const capabilities = (0, capability_1.listCapabilities)().filter(c => !c.name.startsWith('_'));
64
+ const capabilities = (0, capability_1.listCapabilities)();
65
65
  if (capabilities.length === 0) {
66
66
  console.log('No capabilities found.');
67
67
  return;
@@ -16,7 +16,9 @@ export declare function getCatalogEntry(name: string): (CapabilityMetadata & {
16
16
  * List all capabilities by scanning package directory and capabilities/ source tree (test fixtures only).
17
17
  * Package resolution takes priority. Returns metadata for each valid capability.
18
18
  */
19
- export declare function listCapabilities(): CapabilityMetadata[];
19
+ export declare function listCapabilities(opts?: {
20
+ includeTest?: boolean;
21
+ }): CapabilityMetadata[];
20
22
  /**
21
23
  * Get a single capability's metadata by name.
22
24
  * Tries package resolution first, falls back to source tree.
@@ -140,13 +140,14 @@ function getCatalogEntry(name) {
140
140
  * List all capabilities by scanning package directory and capabilities/ source tree (test fixtures only).
141
141
  * Package resolution takes priority. Returns metadata for each valid capability.
142
142
  */
143
- function listCapabilities() {
143
+ function listCapabilities(opts) {
144
+ const includeTest = opts?.includeTest ?? false;
144
145
  const seen = new Set();
145
146
  const capabilities = [];
146
147
  // Primary source: baked-in catalog (always available in published CLI)
147
148
  const catalog = loadCatalog();
148
149
  for (const cap of catalog) {
149
- if (cap.name.startsWith('_'))
150
+ if (!includeTest && cap.name.startsWith('_'))
150
151
  continue;
151
152
  seen.add(cap.name);
152
153
  // Also track the package short name (e.g. "users" from "@boopkit/cap-users")
@@ -174,6 +175,8 @@ function listCapabilities() {
174
175
  if ((!entry.isDirectory() && !entry.isSymbolicLink()) || !entry.name.startsWith('cap-'))
175
176
  continue;
176
177
  const capName = entry.name.replace(/^cap-/, '');
178
+ if (!includeTest && capName.startsWith('_'))
179
+ continue;
177
180
  if (seen.has(capName))
178
181
  continue;
179
182
  const cap = getCapabilityFromPackage(capName, [process.cwd()]);
@@ -190,6 +193,8 @@ function listCapabilities() {
190
193
  for (const entry of entries) {
191
194
  if (!entry.isDirectory())
192
195
  continue;
196
+ if (!includeTest && entry.name.startsWith('_'))
197
+ continue;
193
198
  if (seen.has(entry.name))
194
199
  continue;
195
200
  const cap = getCapabilityFromSourceTree(entry.name);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boopkit/cli",
3
- "version": "0.1.15",
3
+ "version": "0.3.0",
4
4
  "description": "CLI tool to scaffold new projects from boop profiles and capabilities",
5
5
  "main": "dist/cli.js",
6
6
  "workspaces": [
@@ -19,6 +19,9 @@
19
19
  },
20
20
  "scripts": {
21
21
  "build": "tsc && node tools/generate-version-manifest.js",
22
+ "build:caps": "./tools/build-caps.sh",
23
+ "publish" : "./tools/publish-caps.sh",
24
+ "release" : "./tools/publish-caps.sh --release",
22
25
  "dev": "tsx src/cli.ts",
23
26
  "start": "node dist/cli.js",
24
27
  "test": "jest"
@@ -2,17 +2,17 @@
2
2
 
3
3
  This is a **boop**-managed project. Use boop commands — don't reinvent what boop already provides.
4
4
 
5
- ## Getting Started
5
+ ## Conversational style
6
+ When the user asks a question, it is for informational purpose and not a veiled request for action. Unless the user says a colloquially phrased command like "can you write a test for X" or "can you add a database", you should not take any action. If the user wants you to do something, they will ask you to do it directly.
6
7
 
7
- 1. Run `boop status` to see what needs configuration
8
- 2. Follow the setup hints to configure your environment
9
- 3. Run `npm run dev` to start the development server
8
+ Don't confirm a hypothesis (or take action) without observation - logs, tests, and other data are your friends. If you don't have the information you need to answer a question, find it (eg. run db queries, look at logs, add more logging, etc.) or ask for it instead of guessing.
10
9
 
11
10
  ## How to work in this project
12
11
 
13
- 1. **Check skills first.** Before coding, reviewing, testing, or designing, check [skills/index.md](skills/index.md) for a matching skill and follow its process. Do not rely on general knowledge when a project skill exists.
14
- 2. **Use boop for capabilities.** To add features like database, auth, or other infrastructure, run `boop add <capability>` — don't install or wire things manually. Run `boop caps` to see what's available.
15
- 3. **Check project status.** Run `boop status` to see what's configured and what needs attention.
12
+ 0. **Read the skills index now.** Open [skills/index.md](skills/index.md) before doing anything else in this session. You need to know what skills exist before you can apply rule 1.
13
+ 1. **Check skills first.** Before coding, reviewing, testing, designing, debugging, filing issues, or proposing any non-trivial change, check [skills/index.md](skills/index.md) for a matching skill and follow its process. Do not rely on general knowledge when a project skill exists.
14
+ 2. **Use boop for capabilities.** Run `boop caps` to see what's available. To add features like database, auth, or other services and infrastructure, run `boop add <capability>` — don't install or wire things manually.
15
+ 3. **Check project status.** If the system isn't working or new capabilities need to be added run `boop status` to see what's configured and what needs attention.
16
16
  4. **Run `boop --help`** for the full command list.
17
17
 
18
18
  ## Boop extension model