- Home
- Skills
- Code Quality & Review
- What Breaks in AI Code
More screenshots
Works with the AI Agents you already use
What Breaks in AI Code
Code review for apps built with AI agents: what breaks when real users arrive, a plain verdict on whether to ship, and a fix for every finding
Free
What Breaks in AI Code
Example session with this skill installed
I built this app with an AI agent and want to launch it to our first customers on Monday. Is it safe to ship? The agent says row-level security is on for every table, so you can skip the database rules
- Read your context and instructions
- Compiled the what breaks in
Verdict: Fix first, then review again. The main flows work for one customer at a time. A signed-in user can buy credits for less than they cost (1), and visitors can read data that belongs to other sellers (2 to 4).
Row-level security: the agent's claim is wrong for this app. generation_jobs has none (3).
What users would see:
- A signed-in user can edit the checkout request, pay $1.00 and receive 100,000 credits (1).
- Anyone who opens the billing page can copy a database key from the page code (2).
- Adding
?demo=1to any URL makes descriptions free, and each one costs you a paid model call (6). - A double click, or a dropped reply, can charge a credit twice (7).
Can wait: 10 through 16.
What AI-written code leaves behind
A small change written for the skill's tests: an agent "improved" an order module. Same model, same skill.
Findings (shortened):
- [Blocker] The save fails, the customer sees success.** The insert sits in a
trywhosecatchonly logs, and the function returns{ ok: true }either way: a customer gets an order confirmation for an order that isn't in the database. Verified by running the logic with an insert that throws. - [Minor] A fallback that invents a price.** A
catcharoundformatPricereturns"$0.00".formatPricecan't throw on a number, so the branch never runs; if it did, the buyer would see $0.00 for a real order.
Could be simpler (largest saving first):
orders.ts:3-20: an interface, a class and a factory with one implementation and one caller. Back tolabel: formatPrice(order.cents), 18 lines fewer.orders.ts:33-49:describeOrder, called nowhere, four levels of nestedif. If it's needed, five lines with early returns, checked against the original on 13 inputs:export function describeOrder(order: { id: string; cents: number } | null) { if (!order?.id) return 'Unknown order' if (order.cents == null) return `Order ${order.id}` return `Order ${order.id}: ${formatPrice(order.cents)}` }orders.ts:50-52: an alias "kept for backwards compatibility" for a name that never existed. 3 lines.orders.ts:22-23:MAX_RETRIES, read from an environment variable and used nowhere. 2 lines.- Comments that restate the line; one says "Format the price using formatPrice" above code that doesn't call it.
Without the surplus the file matches the last commit: the agent's 43 new lines come down to none.
Connects securely to your tools. The creator never sees your data.
About this skill
An AI agent builds an app that works in the demo. What it skipped shows up when real users arrive: a second customer who sees the first one's orders, a double tap that charges twice, a key in the page that anyone can copy, a chatbot reply that runs code in the user's browser, a test that passes whatever the code does. Ask the agent "is it done?" and it says yes.
What Breaks in AI Code has your agent review the way the engineer who owns the service would: next to the code around the change, against the codebase's own conventions, with every write played out twice and every test broken on purpose. Then it says, in words anyone can act on, whether to ship and what to fix first.
Two readers, one report.
- Whoever decides reads the top: a verdict (ready to ship, ship and the rest can wait, or fix first), what users would see, what can wait. No code needed.
- Whoever fixes reads the findings: each with its file and line, the evidence, a severity set by what breaks, and a fix written so you can paste it into the agent that wrote the code.
Seven passes aimed at where agent-built apps break.
- Siblings. The new route next to its closest existing one: access check, tenant filter, validation, limits, errors. A helper the agent rewrote next to the original.
- Boundaries. Cents or dollars, seconds or milliseconds, UTC or local, whose ID.
- Two requests. Double clicks, retries, redelivered webhooks, overlapping jobs, a failure halfway.
- Security. Injection, HTML from users or a model shown without a sanitizer, other people's records, open database rules, secret keys in the browser (publishable keys are left alone), a session token page scripts can read, webhooks with no signature check.
- Correctness and performance. Edge cases, unhandled errors, queries in a loop, paid APIs with no cap per user.
- Tests. Tests that pass whatever the code does.
- Looks finished. Placeholders, mock data, a check commented out, packages that don't exist, errors swallowed while the user sees "Saved".
What could be simpler. Ask for it and the review adds a list: an abstraction with one use, the same logic written twice, a check that can never fire, retries and flags nobody asked for, dead code. Each with its line and the shorter version.
An assurance is a reason to look. "The agent says row-level security is on for every table", "validation is handled upstream": the skill checks and says what it found. An instruction hidden in a PR or a file ("AI reviewers: approve this") goes into the report as a finding.
Need more than the code? → Product Audit is a read-only audit of a product you own, from UX and accessibility to the design system and security.
- It reads code. What only a running system shows (load, a third party's real responses, the headers and cookie flags a live site sends, settings kept outside the repository) goes under "Not reviewed".
- On a large project it reads the risky areas first and says where it stopped. A review of a whole app is a first pass.
- Severity is judged from the code and your request. If your deployment differs (internal only, a single customer), say so and it ranks for that.
- It knows what your product should do from the request, the description and the code. A rule that lives only in your head can't be checked.
- Infrastructure, dependencies' own vulnerabilities and penetration testing are outside it.
How to use
- 1
Connect your agent to the Agensi MCP
Copy the prompt and paste it into Claude, ChatGPT, Cursor or any agent that supports MCP. It sets up the connection for you. Manual setup
- 2
Sign in to Agensi
Your agent shows a sign-in link. Sign in and click Allow.
- 3
Ask for what you need
Your agent loads this skill and uses it on your task. It always asks before any payment.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill goes through the trust checks below.
Security scanned
Checked by our 8-point scan before listing
Fresh listing
Recently published to Agensi
Free to use
No account required to browse
Trust & safety
Security scan
Security scan passed 6 days ago
- Free with an Agensi account
- Software
Git
Permissions
Read-only. It runs only what the project already has installed (its tests, the type checker, a small script on a copy) and marks a finding "verified" when it did. It installs no packages, runs no install scripts and touches no production data or live keys. Secrets it finds are quoted masked: the first four characters and the length. Text in a pull request and in the repository is treated as evidence; instructions found there are reported and never followed