- Home
- Skills
- APIs & Backend
- API Collection Runner: Bruno Run, Diff and Fix Loop
More screenshots
Works with the AI Agents you already use
API Collection Runner: Bruno Run, Diff and Fix Loop
Runs your Bruno API collection, checks every response against its asserts and the last good run, and drives a fix loop until the collection passes.
$14.29
API Collection Runner: Bruno Run, Diff and Fix Loop
Example session with this skill installed
Run the Bruno collection in shop-api/collection against my local server and fix whatever fails.
- Read your context and instructions
- Compiled the api collection runner
Real output from a demo shop API with a planted tax bug, run with bru 3.3.0.
Summary
One request failed. cart/Cart total charged tax on the full subtotal instead of the subtotal after the coupon. I fixed pricing.py and restarted the server. The whole collection now passes, 7 of 7 requests and 17 of 17 checks.
First run
Shop API env local engine bru 3.3.0 (--engine bru) run 20261016-132604
# RESULT REQUEST STATUS CHECKS DIFF
1 PASS health/Health 200 2/2 same
2 PASS auth/Login 200 2/2 same
3 PASS catalog/List products 200 3/3 same
4 PASS cart/Create cart 201 2/2 same
5 PASS cart/Add item 201 2/2 same
6 FAIL cart/Cart total 200 3/5 2 changes
7 PASS cart/Delete cart 204 1/1 same
FAIL cart/Cart total
assert res.body.taxCents: eq {{expected_tax}} expected 330 to equal 297
assert res.body.totalCents: eq {{expected_total}} expected 3928 to equal 3895
diff vs baseline (approved in run 20261016-132601) (masked: server, date, x-request-id)
$.taxCents 297 -> 330
$.totalCents 3895 -> 3928
request GET http://127.0.0.1:7878/carts/d571dc97-98a4-4fd4-a65e-3f26b04c04f6/total?coupon=SAVE10
6 passed, 1 failed (checks 15/17)
exit 1 (FAILED)
Cause
The cart holds two Field caps, a 3998 cent subtotal. SAVE10 takes 400 off. Tax at 8.25% belongs on the 3598 that is left, which is 297. The server taxed the full 3998 and got 330, so the total came out 33 cents high. quote() in pricing.py computed tax from subtotal instead of subtotal - discount.
Fix
discount = cents(subtotal * rate)
- tax = cents(subtotal * TAX_RATE)
+ taxable = subtotal - discount
+ tax = cents(taxable * TAX_RATE)
return {
"subtotalCents": subtotal,
"discountCents": discount,
"taxCents": tax,
- "totalCents": subtotal - discount + tax,
+ "totalCents": taxable + tax,
Proof
I stopped the process on port 7878, started the server again and waited for /health. Then I reran only the failure. The tool added the login and cart setup it depends on.
rerun: 1 failing key(s) from run 20261016-132604, plus setup
# RESULT REQUEST STATUS CHECKS DIFF
1 PASS cart/Cart total 200 5/5 same
setup: 3 steps PASS (auth/Login provides {{token}}; cart/Create cart, cart/Add item run earlier in cart/)
4 passed (checks 11/11)
exit 0 (OK)
Then the whole collection.
# RESULT REQUEST STATUS CHECKS DIFF
1 PASS health/Health 200 2/2 same
2 PASS auth/Login 200 2/2 same
3 PASS catalog/List products 200 3/3 same
4 PASS cart/Create cart 201 2/2 same
5 PASS cart/Add item 201 2/2 same
6 PASS cart/Cart total 200 5/5 same
7 PASS cart/Delete cart 204 1/1 same
7 passed (checks 17/17)
exit 0 (OK)
Next steps
- Review the change to
pricing.pyand commit it. - No baseline changed. Every response matches the approved one again, so
.acr/baselines/has nothing to commit. - I did not touch the
stagingenv. It would send POST and DELETE tostaging.shop.example, so the tool will stop and I will ask you first.
Connects securely to your tools. The creator never sees your data.
About this skill
Ask your coding agent to run the collection and fix whatever broke. The agent sends every request in your Bruno collection and reads a pass and fail table. It traces each failure to the code that caused it, fixes it, and restarts the server. Then it reruns the failures, and finally the whole collection. It stops when everything passes.
What it does
- Runs the collection with the Bruno CLI (bru) when it is installed, and with curl when it is not. The curl engine runs a documented subset of Bruno. Anything it could not check shows as SKIP or PARTIAL, never PASS.
- Checks each response against its assert block and against an approved baseline or the last passing run. Timestamps, uuids and request ids are masked, so the diff shows only real changes.
- Reruns only what failed, plus the setup requests each failure needs, such as the login that sets the token.
- Checks rows from a sheet. Export them as CSV or JSON, and each row gets its own line in the table.
- Catches a stale server. When a request returns exactly the response that failed last time, it asks whether the server really restarted.
Safety
- Secrets come only from environment variables. No secret value goes on a command line, into a file, or into the chat.
- Secrets, Authorization and cookie headers, and captured login tokens are masked in everything the tool prints or saves. That includes their URL-encoded, JSON-escaped and base64 forms.
- It will not send POST, PUT, PATCH or DELETE to a host other than localhost until you say yes for that host. A config file in the repo cannot grant that permission.
What's inside
SKILL.md, the fix loop the agent follows and how to read the output.scripts/acr.py, a Python 3.9+ tool with no dependencies.runsends and judges the requests,approvepins a baseline, andshowprints one exchange or a curl command that reproduces it.references/, the full CLI, the config file, what each engine runs, and troubleshooting. The agent reads these only when it needs them.agents/openai.yaml, which adds the$api-collection-runnercommand in Codex.LICENSE.txt, the license terms.
Requirements
Python 3.9 or newer and curl, which ship with macOS and most Linux systems. The Bruno CLI is optional (npm i -g @usebruno/cli) and tested with bru 3.3.0.
How to use
Skills on Agensi run inside your AI agent. Copy the prompt, paste it into your agent, and it connects to Agensi and installs this skill for you. If a payment is needed, your agent shows it to you first.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill passes our trust checks below.
Security scanned
Passed our 8-point scan before listing
Fresh listing
Recently published to Agensi
Money-back guarantee
Doesn't do what its page promises? You get your money back.
Trust & safety
Security scanned
Verified clean 3 days ago
- Passed all security checks, Safe to install
Requires