How Leak works
Six stages, three open-weight models, and every model request routed through Mozilla's Otari gateway. The numbers below are from the sample statement.
- 1
Strip identifiers
Otari: PrivacyIn the app, before any request
Regular expressions replace account, card, routing and IBAN numbers, email addresses and phone numbers with tags like [card]. The stripped text is what every later step sees, and the page shows it to you.
4 identifiers removed from the sample · under 1 mssrc/lib/redact.ts - 2
Guardrail at the gateway
Otari: GuardrailsOtari, on every model request · Lakera Guard PII check
A PII guardrail is mandated on the Otari workspace in block mode. If a statement still carries personal data, Otari refuses it with guardrail_violation before any provider sees it. Tick "send it unstripped" in the app to watch it happen.
Verdict shown on each request in the glass boxsrc/lib/otari.ts (otariError, Otari-Guardrails header) - 3
Find the charges
Otari: Routing and fallbackOtari → open-weight model 1 · Qwen 3.5 35B (fallback: GPT-OSS 20B)
The stripped statement goes to Qwen with reasoning off and JSON output on. It returns each recurring service and bank fee, grouped, with the amounts it was charged. The request names a failover policy, so Otari moves to the backup model if Qwen's provider fails.
15 charges found on the sample · about 15 s · $0.002src/lib/pipeline.ts (extract step) - 4
Check prices on the web
Otari: Web search and fetchOtari → open-weight model 2, with Otari's web tools · DeepSeek V4 Flash
Subscriptions go out in batches of three, in parallel. DeepSeek uses Otari's web search (and fetch when a page is needed) to find each service's price today and the official cancel page, treating every page as data, never as instructions.
12 of 12 services checked, 12 cancel links · 20 to 30 s per batch · about $0.09 a batchsrc/lib/pipeline.ts (researchBatch) - 5
Add it up in the sandbox
Otari: Code executionOtari code execution, no model · Python in Otari's sandbox
The app writes the arithmetic as a Python program (monthly and yearly totals, overlapping services in the same category, price rises, fees on a yearly footing) and runs it in Otari's sandbox. The headline number is computed, not generated.
$2,938 a year · $516 in overlaps · $297 in fees · about 1 s · $0.01src/lib/pipeline.ts (totalsProgram) · src/lib/otari.ts (runCode) - 6
Write the fix
Otari: Models in distinct rolesOtari → open-weight model 3, when you plug a leak · Ministral 8B
Flip a subscription to plug and Ministral writes the cancellation message, adding the cancel link when one was found. For a bank fee it writes a polite refund request.
About 2 s · $0.00003 a draftsrc/app/api/draft/route.ts