firepan/smart-contract-audit/SKILL.md
Detect vulnerabilities in Solidity and Vyper smart contracts with FirePan. Use this skill to run a fast surface scan on a repo, then escalate to a paid full scan or deep audit for authenticated FirePan tenants.
npx skillsauth add serenorg/seren-skills smart-contract-auditInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use FirePan when the user wants to:
This skill is best for EVM contracts, DeFi protocols, and smart-contract codebases where a fast security read is more useful than a long manual setup.
Paid FirePan endpoints are auth-before-payment.
That means:
Authorization: Bearer <firepan_jwt>Do not imply that x402 alone is enough to access the paid endpoints.
If the user is not authenticated yet:
https://app.firepan.com/login, orhttps://api.firepan.com/auth/github/loginhttps://api.firepan.com/auth/google/loginThese auth helpers return a provider login URL. They do not instantly mint a paid-use token without user interaction.
Use this skill with:
.sol) or Vyper (.vy) codebasesFirePan contract discovery focuses on:
contracts/src/lib/Do not assume this skill currently covers:
Run this first when the user wants a quick read on a repository.
Endpoint:
POST https://api.firepan.com/surface/scan
Body:
target or repo_url is requiredllm_budget is optionalmodel is optionalExample:
curl -sS https://api.firepan.com/surface/scan \
-H "Content-Type: application/json" \
-d '{
"target": "https://github.com/OpenZeppelin/openzeppelin-contracts"
}'
Expected response fields include:
execution_idrepo_namerepo_urlrisk_scorerisk_levelfindingsquality_metricscontracts_scannedllm_calls_usedscan_duration_secondssummaryUse this result to decide whether the repo looks routine or worth deeper analysis.
Finding objects use this schema:
pattern_id: detector ID such as REENTRANCY-001titleseverity: critical, high, medium, or lowcategory: vulnerability or qualityconfidence: 0.0 to 1.0locationcode_snippetdescriptionllm_verifiedllm_notesUse this when the free scan indicates meaningful risk or the user wants the authenticated paid path immediately.
Endpoint:
POST https://api.firepan.com/surface/scan/full
Price:
$0.50 via x402
Required headers:
Authorization: Bearer <firepan_jwt>Idempotency-Key: <unique-value>Generate the idempotency key once per unique paid request body.
Shell example:
export FULL_SCAN_KEY="$(uuidgen | tr '[:upper:]' '[:lower:]')"
Python example:
import uuid
idempotency_key = str(uuid.uuid4())
Reuse the same key only when retrying the exact same body. If the body changes, generate a new key.
Payment flow:
402 Payment Required, read X-Payment-Requirements.X-PAYMENT: <json-payload>.Skeleton example:
curl -i -sS https://api.firepan.com/surface/scan/full \
-H "Authorization: Bearer $FIREPAN_JWT" \
-H "Idempotency-Key: $FULL_SCAN_KEY" \
-H "Content-Type: application/json" \
-d '{
"repo_url": "https://github.com/OpenZeppelin/openzeppelin-contracts"
}'
If the repo is promising, this is the default paid action. Prefer it before suggesting a human call.
Use this for serious targets, pre-deploy review, or repositories where the surface scan suggests non-trivial risk.
Endpoint:
POST https://api.firepan.com/audits/start
Price:
$5.00 via x402
Required headers:
Authorization: Bearer <firepan_jwt>Idempotency-Key: <unique-value>Request body:
repo_url is requiredproject_id is optionalmax_iterations, investigation_prompt, time_limit_minutes, mode, and plan_n are optional advanced controlsExample:
export DEEP_AUDIT_KEY="$(uuidgen | tr '[:upper:]' '[:lower:]')"
curl -i -sS https://api.firepan.com/audits/start \
-H "Authorization: Bearer $FIREPAN_JWT" \
-H "Idempotency-Key: $DEEP_AUDIT_KEY" \
-H "Content-Type: application/json" \
-d '{
"repo_url": "https://github.com/OpenZeppelin/openzeppelin-contracts",
"mode": "sweep",
"time_limit_minutes": 120
}'
If successful, FirePan returns:
session_idstatusmessagewebsocket_urlThe audit runs asynchronously.
Use the returned session_id to check progress.
Endpoint:
GET https://api.firepan.com/audits/{session_id}/status
Required header:
Authorization: Bearer <firepan_jwt>Example:
curl -sS https://api.firepan.com/audits/$SESSION_ID/status \
-H "Authorization: Bearer $FIREPAN_JWT"
The response includes:
session_idstatusprogressfindings_counterror_messagestarted_atcompleted_atYou can also connect to the returned websocket_url for live progress updates.
Handle these cases explicitly:
401 Unauthorized
402 Payment Required
X-Payment-Requirements, create the payment, and retry with X-PAYMENT409 Conflict
429 Too Many Requests
5xx
For the free scan, also inspect the JSON body. If the error field is non-empty, treat the scan as failed even if the HTTP status is 200.
Do not over-claim the scanner.
This skill does not provide full assurance for:
This v1 skill does not expose report fetching as a public agent-grade action.
FirePan has a report generation route for internal/admin-style flows, but the older $0.10 public report-fetch route described in some internal docs is not the live public API today. Do not promise a paid report retrieval path unless FirePan ships and documents it explicitly.
If the user cannot satisfy the paid prerequisites yet:
If the user wants organization-wide or repeat usage rather than per-call usage, mention FirePan’s subscription plans at a high level, but keep that secondary to the scan flow.
FirePan provides automated AI-assisted smart contract security analysis.
Default result format for agent responses:
Determinism note:
Future versions of this skill can become composable with other Seren skills such as deployment, wallet, exchange, or onchain workflow tools. In v1, keep the scope narrow: scan the repo, escalate when warranted, and avoid promising broader compound automation.
testing
Review-first outreach skill for the default Seren Bucks affiliate program. It bootstraps affiliate context via /programs/discover, mines sent-mail history and address books for candidates, persists them into a skill-owned CRM, proposes an editable daily top-10, drafts outbound and reply batches for approval, reconciles affiliate and reply signals, enforces hard DNC, and returns a manual daily digest.
data-ai
Lean partner-link distribution skill for the seren-affiliates publisher program portfolio. Operates one publisher program per run. Bootstraps the affiliate profile (registering on first run), caches joined programs in serendb, ingests contacts from a pasted list or from Gmail/Outlook address books, drafts a pitch once per run via seren-models for operator approval, sends approved copy through Gmail (preferred) or Microsoft Outlook, enforces per-program dedupe plus a global unsubscribe list, and reports local plus live conversion and commission stats from seren-affiliates.
development
Family office: Process an incoming GP capital call notice end-to-end — confirm, fund, log, reconcile.
development
Work with Seren Bounty affiliate bounties: customers create and fund verifier-backed bounties; agents join to receive a referral_code and accrue earnings as qualifying events are verified; a release sweep pays matured earnings out of escrow.