terminalskills/skills/bruno
- community
Checking that the SKILL.md file is still in the repository.
Tests and debugs APIs with Bruno, the open-source API client that keeps collections as plain files in a Git repository. Use when a user asks to create API requests, organize collections, write test scripts, use environments and variables, run a collection from the terminal or CI with the bru CLI, or collaborate on API workflows stored in Git.
Install
npx vskill@latest install terminalskills/skills/brunoSKILL.md
Bruno — Git-Friendly API Client
Overview
Bruno is an open-source API client that stores collections as plain text files in a folder, so they live in the Git repository next to the code: versioned, reviewable in pull requests, with no account and no cloud sync (unlike Postman). The desktop app edits the files; the bru CLI runs them in a terminal or in CI.
A collection uses one of two file formats, never both:
- OpenCollection YAML (
.yml, root fileopencollection.yml) — the default for new and imported collections since Bruno 3.1. - Bru (
.bru, root filebruno.json) — the original format, still supported. The desktop app converts a Bru collection with Migrate to YML (Bruno 4.1 and later).
Instructions
Installation
Other installers are on https://www.usebruno.com/downloads. The CLI is also published as the Docker image usebruno/cli (mount the collection at /bruno).
Collection Structure
The root file opencollection.yml needs only opencollection: 1.0.0 and an info: block with the collection name.
Request File (YAML)
Script types are before-request, after-response and tests. Tests use Chai's expect. {{variable}} is replaced in the URL, headers and body but not inside scripts: read values there with bru.getEnvVar() or bru.getVar().
Bru File Format
The same request in an older .bru collection. Bru has no comment syntax: a # line at the top of a file is a parse error and the CLI skips the file.
Environments
One file per environment in environments/. A value written as {{process.env.NAME}} comes from the shell or from a .env file at the collection root. A variable marked secret keeps its value outside the file (the desktop app stores it encrypted on the machine), so the CLI must receive it with --env-var.
In a Bru collection the same file is environments/local.bru: a vars { … } block with one baseUrl: http://localhost:3000 pair per line (a block written on a single line is a parse error) and a vars:secret [ apiSecret ] list for secret names.
Scripting
Scripts run in Safe Mode by default (CLI 3.0 and later). Safe Mode offers require() for the bundled libraries chai, crypto-js, uuid, nanoid, moment, axios, jsonwebtoken, tv4, ajv, atob and btoa. Node built-ins such as crypto and fs, npm packages, lodash, xml2js and node-fetch need Developer Mode: bru run --sandbox=developer.
Useful calls: bru.setVar / bru.getVar (runtime variables), bru.getEnvVar / bru.setEnvVar, bru.getProcessEnv("NAME"), bru.runner.skipRequest(), bru.runner.stopExecution(), req.setHeader(name, value), res.status, res.body, res.getHeader(name).
CLI for CI/CD
bru run exits with a non-zero code when a request gets no response or a test or assertion fails; a 4xx or 5xx response alone does not fail the run. The older --output results.xml --format junit pair still works but is deprecated in favour of the --reporter-* options.
Examples
Example 1: Add an authenticated request and run the collection
User: "Add a request to our Bruno collection that lists users with the token from login, then run everything locally."
Result: the login request stores authToken and the next request sends it as a Bearer token. Running bru run users --env local alone returns 401, because nothing has set authToken.
Example 2: Run the collection in GitHub Actions against staging
User: "Run our Bruno tests on every pull request and show the results in CI."
Result: the job fails when any test or assertion fails, and results.xml holds one <testsuite> per request with a <testcase> for every test and assertion.
Guidelines
- Git-first workflow — Store Bruno collections in your repo next to application code; review API changes in PRs
- Environment files for config — Use environments for base URLs; keep credentials out of them with
{{process.env.NAME}}or secret variables, and add.envto.gitignore - Secrets in the CLI — Secret variables are stored by the desktop app, not in the collection, so a CLI run sees them empty unless
--env-var name=valuesupplies them - Test assertions — Write tests in every request; run them in CI to catch API regressions
- Script chaining — Use
bru.setVar()in after-response scripts to pass data between requests (token → subsequent calls); the request that sets a variable has to run first - Folder organization — Mirror your API structure (auth/, users/, orders/); a folder can carry its own auth, variables and scripts in
folder.yml(folder.bru) - One format per collection — Do not mix
.bruand.ymlrequests; after migrating, change.brupaths passed tobru.runRequest()to.yml - Safe Mode first — Use
--sandbox=developeronly for collections you trust: Developer Mode scripts can read files and run system commands - CI/CD integration — Run
bru run --env stagingafter deployment to verify the API contract; the exit code fails the pipeline. In CLI 4 the JUnitclassnameis the request's path in the collection, not its URL - Reports can leak — The JSON report records request and response headers and bodies, including a login password and the returned token; add
--reporter-skip-all-headers --reporter-skip-bodybefore publishing JSON or HTML reports as CI artifacts
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/bruno/SKILL.md
Popularity
- Repository stars
- 157
- Repository forks
- 21
- 7-day trend score
- 25
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/terminalskills/skills/bruno)