Property-based fuzz testing web app for agent-to-agent endpoints.
• 🔗 Systematically tests A2A endpoints instead of one-off prompting
• 📂 Import a CSV testcase suite to automate prompt testing at scale
• 🤖 Run massive prompt batches against your agent endpoints
• 🧪 Surface edge cases, weird behaviors, and silent failures
• 📊 Export Test Reports & A2A Responses — structured outputs for debugging, audits, and regression testing
• ⚡ Lightweight — minimal setup, no heavy frameworks
Advanced capabilities:
• 🧠 LLM-Based Fuzzing Testcase Generator — automatically creates diverse, adversarial prompts
• 🔐 Optional fuzzing mode using your own OpenAI key for deeper stress testing
Instead of manually poking your agent and hoping for the best, you can now:
➡️ Reproduce failures
➡️ Share testcase libraries
➡️ Benchmark agent robustness
➡️ Catch breaking changes before users do
Built for developers working on AI agents, A2A protocols, and LLM apps who want their systems to survive contact with reality — not just demos.
backend/FastAPI API, runner, rules engine, SQLite storagefrontend/React + Vite UI
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000cd frontend
npm install
npm run devOpen http://localhost:5173.
Use the new step flow under:
http://localhost:5173/wizard/start
Steps:
- Start (endpoint)
- Discover (agent card)
- Configure (fuzzer + OpenAI)
- Generate (OpenAI testcase generation)
- Review (editable testcase table)
- Run (live progress via websocket)
- Report (summary + details + export)
Backend sends:
{ "input": "...", "meta": { "run_id": "...", "case_index": 0 } }Expected response JSON (either is fine):
{ "output": "..." }or
{ "message": "..." }Optional for tool policies:
{ "output": "...", "tool_calls": [{ "name": "tool_name", "args": {} }] }json_parseablemax_length(chars)forbidden_substrings(values)regex_must_match(pattern)tool_calls_allowlist(allow)
POST /api/discoveryPOST /api/openai/testPOST /api/testcases/generateGET /api/runs/{run_id}/testcasesPATCH /api/testcases/{testcase_id}DELETE /api/testcases/{testcase_id}POST /api/runs/{run_id}/startPOST /api/wizard/runs/{run_id}/stopGET /api/runs/{run_id}/reportGET /api/wizard/runs/{run_id}
- Failure shrinking is intentionally lightweight in this MVP.
- CORS is open for local development.
- Storage is local SQLite (generated on startup, do not commit DB files).
You should not commit the SQLite database file. The backend creates it automatically on startup.