@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 +145 -43
- package/dist/capability-catalog.json +6 -2
- package/dist/capability-versions.json +16 -16
- package/dist/commands/list.js +1 -1
- package/dist/lib/capability.d.ts +3 -1
- package/dist/lib/capability.js +7 -2
- package/package.json +4 -1
- package/src/templates/kernel/AGENTS.md.hbs +7 -7
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# boop
|
|
2
2
|
|
|
3
|
-
|
|
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
|
|
11
|
+
Or run directly with `npx`:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
npx @boopkit/cli@beta init
|
|
14
|
+
npx @boopkit/cli@beta init my-app
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
## Quick Start
|
|
18
18
|
|
|
19
|
-
|
|
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
|
-
|
|
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
|
-
|
|
25
|
+
```
|
|
30
26
|
|
|
31
|
-
|
|
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
|
-
|
|
29
|
+
```bash
|
|
30
|
+
# See what was installed, what's configured, and what to do next
|
|
31
|
+
boop status
|
|
32
|
+
```
|
|
35
33
|
|
|
36
|
-
|
|
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
|
-
|
|
40
|
-
#
|
|
41
|
-
|
|
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
|
|
51
|
-
| `boop
|
|
52
|
-
| `boop
|
|
53
|
-
| `boop add <capability>` |
|
|
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
|
-
|
|
130
|
+
Flags:
|
|
56
131
|
|
|
57
|
-
`boop init`
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
70
|
-
boop add
|
|
71
|
-
boop
|
|
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
|
-
|
|
159
|
+
Add more capabilities as you need them:
|
|
75
160
|
|
|
76
161
|
```bash
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
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.
|
|
3
|
-
"@boopkit/cap-background-jobs": "0.
|
|
4
|
-
"@boopkit/cap-cloud-storage": "0.
|
|
5
|
-
"@boopkit/cap-coding": "0.
|
|
6
|
-
"@boopkit/cap-database": "0.
|
|
7
|
-
"@boopkit/cap-email": "0.
|
|
8
|
-
"@boopkit/cap-hello": "0.
|
|
9
|
-
"@boopkit/cap-noticeboard": "0.
|
|
10
|
-
"@boopkit/cap-product-design": "0.
|
|
11
|
-
"@boopkit/cap-project-mgmt": "0.
|
|
12
|
-
"@boopkit/cap-services": "0.
|
|
13
|
-
"@boopkit/cap-skills": "0.
|
|
14
|
-
"@boopkit/cap-testing": "0.
|
|
15
|
-
"@boopkit/cap-users": "0.
|
|
16
|
-
"@boopkit/cap-web": "0.
|
|
17
|
-
"@boopkit/logger": "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
|
}
|
package/dist/commands/list.js
CHANGED
|
@@ -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)()
|
|
64
|
+
const capabilities = (0, capability_1.listCapabilities)();
|
|
65
65
|
if (capabilities.length === 0) {
|
|
66
66
|
console.log('No capabilities found.');
|
|
67
67
|
return;
|
package/dist/lib/capability.d.ts
CHANGED
|
@@ -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(
|
|
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.
|
package/dist/lib/capability.js
CHANGED
|
@@ -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.
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|