brunolisted
Install: claude install-skill punkaze/skills
# Bruno — Author, Generate, and Run .bru Collections
Requires the Bruno CLI: `npm install -g @usebruno/cli`. Everything below is
verified against **bru 3.5.0** (`bru --version`).
## Generating a collection — two paths
**Path A — an OpenAPI/Swagger spec exists (preferred).** Look for one first:
`openapi.yaml`, `swagger.json`, a framework's swagger endpoint (Elysia,
NestJS `@nestjs/swagger`, etc.). Then:
```bash
bru import openapi -s <spec.yaml|url> -o <out-dir> -n "My API" --collection-format bru -g path
```
`--collection-format bru` is required — the CLI default (`opencollection`)
emits `.yml` files, not a `.bru` collection. `-g` picks folder grouping: `path`
(by URL structure, usually what you want) or `tags` (by OpenAPI tags, the CLI
default). **Done when** `<out-dir>` contains `bruno.json` and `.bru` files; an
`opencollection.yml` there means the format flag was dropped.
**Path B — no spec.** Read the codebase and write a **routes manifest** (shape
below), then run the bundled generator:
```bash
node "${CLAUDE_PLUGIN_ROOT}/skills/bruno/scripts/generate-bruno.mjs" --manifest routes.json --out ./api-collection
```
Flags: `--force` (overwrite existing files), `--dry-run` (preview, write
nothing). Extract routes by reading the code — do **not** write a
per-framework regex route scanner. **Done when** the generator reports
`wrote N file(s)` and, with the API running, `bru run . -r --env <env>` from
the output dir executes every request.
### Routes manifest
Schema: `${