
Your app is guilty until proven secure: an agent skill whose /hack-me breaks into your own running
Your app is guilty until proven secure: an agent skill whose /hack-me breaks into your own running app, proves each bug with a real request, patches it, and re-verifies. Claude Code · Codex · Cursor.
Your app is guilty until proven secure. /hack-me breaks into your own
running app, proves each hole with a real request, patches it, and re-verifies —
on localhost, with receipts.
paranoid is an agent skill for Claude Code, Codex, and Cursor. Its core is
/hack-me — an authorized, localhost-only self-pentest loop that attacks
your own app the way an attacker would, then closes what it finds.
find → prove → patch → re-verify
I started with the obvious thing — a skill that tells the agent to write secure
code — and then benchmarked it honestly before believing in it. The harness
(benchmark/) generates the same tasks with and without the skill
and runs real exploits against whatever the model writes.
The result was a clean negative:
| Model | Tasks | Exploit rate without skill | with skill | Effect |
|---|---|---|---|---|
| Fable 5.1 | isolated functions (easy) | 0% | 0% | none |
| Opus | isolated functions (easy) | 0% | 0% | none |
| Opus | isolated functions (neutral/tempting) | 0% | 0% | none |
On an isolated function, a capable model already writes the secure version
unprompted — ownership in the WHERE clause, parameterized queries, field
allow-lists — with no skill at all. Advice adds nothing there. (The harness
isn't rigged: it flags deliberately-insecure reference code at 100% and secure
code at 0%.)
Real vulnerabilities don't live in one tidy function. They live in the wiring
of a whole running app: auth on one route but not the next, a request body that
quietly sets is_admin, a search box that concatenates SQL. A model can't hold
all of that in its head while coding. So paranoid stops advising and starts
attacking the running app.
/hack-me, provenAgainst a small but realistic invoicing API (examples/ledgerlite),
a hack-me agent that was told nothing about the app's bugs found four by
probing, proved each with a live request, patched them, and re-verified:
| # | Found by probing the API | Class | Proof | After patch |
|---|---|---|---|---|
| 1 | Any user reads any invoice | IDOR / broken object auth | HTTP 200 with another user's invoice | 404 |
| 2 | /admin/users open to anyone logged in | broken function auth | full user directory dumped | 403 |
| 3 | /search?email= SQL injection | SQLi | plaintext passwords dumped via UNION | [] |
| 4 | /profile accepts is_admin | mass assignment → privilege escalation | regular user became admin | 400 |
Every legitimate request still returns 200 after the fixes. The full
walkthrough — exact exploit requests, responses, diffs, and re-verification — is
in examples/ledgerlite/HACKME_REPORT.md.
Reproduce it: python3 examples/ledgerlite/app.py, then run /hack-me.
That target was written as a demo, so it proves the loop works end-to-end. Point
/hack-meat your app for your own results.
The harder claim is code we don't control. Pointed at OWASP VAmPI
— a well-known third-party vulnerable API — with nothing but its URL, /hack-me
found, proved, patched and re-verified six real bugs, including SQL-injecting
the admin's password out through the API and an unauthenticated endpoint dumping
every user's plaintext password:
| # | Finding | OWASP API | Status |
|---|---|---|---|
| 1 | Unauth /users/v1/_debug dumps every password | API3/5 | 401/403 |
| 2 | Read any user's private book secret (BOLA) | API1 | 404 |
| 3 | Register with admin:true → privilege escalation | API6 | admin=false |
| 4 | Change any user's password (account takeover) | API1 | victim untouched |
| 5 | SQLi in user lookup (UNION-dumps passwords) | API8 | 404 |
| 6 | Debugger + stack traces exposed | API7 | clean errors |
Notably, VAmPI's own global "secure mode" flag closed only four of the six — the
critical password dump stayed open until patched. /hack-me caught it by
replaying every exploit instead of trusting the flag. Full receipts:
examples/vampi/HACKME_REPORT.md.
/hack-me actually doesGuardrails, always: your own / authorized targets, localhost only,
non-destructive proofs. It won't touch third-party hosts, evade detection, or
build live malware. See commands/hack-me.md.
npx skills add kulchankas/paranoid/skills/paranoidThen copy commands/hack-me.md into your agent's commands
dir (e.g. .claude/commands/) so /hack-me is available. No dependencies, no
network calls, no telemetry — it's Markdown your agent reads.
python3 my_app.py # start your app locally
/hack-me # point the agent at http://localhost:<port>The guidance the benchmark tested still earns its place as a companion while
you code and as hack-me's knowledge base — concrete failure modes and fixes
for the vulnerability classes that actually ship in vibe-coded apps:
/hack-me framework guidesLoad it while building; run /hack-me to check whether it held.
An honest, reproducible harness for the question "does a security skill actually
reduce vulnerabilities?" — plus the negative result above and how to re-run it:
benchmark/.
paranoid secures your code and pentests your running app, with your
say-so. It is not built to target third-party systems, scan hosts you don't own,
evade detection, or produce live malware, and it will decline to. Authorized,
defensive, local.
/hack-me loop — find → prove → patch → re-verify, on localhost/hack-me framework guides (Next.js, FastAPI, Express)paranoid is v0.1 and actively developed — issues and PRs welcome.
New vulnerability classes, framework guides, and independent-app proofs are the most useful contributions — see CONTRIBUTING.md for the format and the honesty rules, and SECURITY.md for scope. Good first issues are labeled in the tracker.
MIT © 2026 kulchankas. See LICENSE.
Paste this prompt into your agent. It reads this page and does the setup for you.
Read https://aiagentslisting.com/mcp/paranoid to learn what the "paranoid" MCP server does and how to install it. Add it to my coding agent's MCP configuration as documented on that page, then confirm the server connects and list the tools it exposes.Agents can also browse this directory over MCP at https://aiagentslisting.com/api/mcp
npx skills add kulchankas/paranoid/skills/paranoidThis server runs locally, so we can't read its tool list over the web yet.
Maintain this server? Claiming proves you own the listing and earns the last 4 points.
Claim this listingPaste this line near the top of your repository's README. The badge always renders the current score.
[](https://aiagentslisting.com/mcp/paranoid)Nothing comparable is listed yet.
No tagged releases on record.
Connect to the AI Agents Listing MCP server at https://aiagentslisting.com/api/mcp using the HTTP transport and complete the sign-in when it asks. Then call the submit_review tool for the listing "paranoid" with a rating from 1 to 5 and a short note on what worked and what did not.No reviews yet
Be the first to share your experience with this tool.
One email a week. New agents, MCP servers and skills, and what is actually getting traction.