The AI gathers evidence
An agent chooses which real lookups to run: domain registry, DNS, email authentication, lookalike detection and redirect tracing.
Does it actually work?
We ran the same labelled messages through four systems. The first is what most AI scam checkers are: one prompt to a model. We publish every result, including the ones that don't favour us. Where it matters most, on a hold-out set written and committed before any system saw it, Countersign got 17 of 18 right and the single prompt 8 of 18, because most of those scams hide their giveaway in a QR code.
Classic scam wording (urgency, gift cards, threats), prompt-injection attempts, Spanish-language messages, and everyday genuine mail. 16 scams, 8 genuine messages.
| System | Scams stamped forgery | Genuine flagged as forgery | Exact verdict | Scams cleared as genuine |
|---|---|---|---|---|
| Single LLM prompt (typical entry) | 100% (81%–100%) | 0% (0%–32%) | 100% (86%–100%) | 0 |
| Deterministic checks only (no AI) | 38% (18%–61%) | 0% (0%–32%) | 58% (39%–76%) | 5 |
| Countersign v1 (evidence + tactics only) | 75% (51%–90%) | 0% (0%–32%) | 83% (64%–93%) | 0 |
| Countersign | 100% (81%–100%) | 0% (0%–32%) | 100% (86%–100%) | 0 |
Scams with calm, professional wording, where the giveaway is only in the infrastructure (lookalike or disguised domains, mismatched reply addresses), and genuine alerts that look alarming. 8 scams, 6 genuine messages.
| System | Scams stamped forgery | Genuine flagged as forgery | Exact verdict | Scams cleared as genuine |
|---|---|---|---|---|
| Single LLM prompt (typical entry) | 100% (68%–100%) | 0% (0%–39%) | 100% (78%–100%) | 0 |
| Deterministic checks only (no AI) | 75% (41%–93%) | 0% (0%–39%) | 86% (60%–96%) | 1 |
| Countersign v1 (evidence + tactics only) | 100% (68%–100%) | 0% (0%–39%) | 100% (78%–100%) | 0 |
| Countersign | 100% (68%–100%) | 0% (0%–39%) | 100% (78%–100%) | 0 |
Scams carrying fake security-scan reports, fake assistant transcripts, 'training example' framing, and instructions in another language or spaced out, plus genuine messages that talk about AI. 8 scams, 4 genuine messages.
| System | Scams stamped forgery | Genuine flagged as forgery | Exact verdict | Scams cleared as genuine |
|---|---|---|---|---|
| Single LLM prompt (typical entry) | 100% (68%–100%) | 0% (0%–49%) | 100% (76%–100%) | 0 |
| Deterministic checks only (no AI) | 88% (53%–98%) | 0% (0%–49%) | 92% (65%–99%) | 1 |
| Countersign v1 (evidence + tactics only) | 100% (68%–100%) | 0% (0%–56%) | 92% (65%–99%) | 0 |
| Countersign | 100% (68%–100%) | 0% (0%–49%) | 100% (76%–100%) | 0 |
Six pairs of messages with identical wording. Only the QR code differs: one points to a lookalike site, the other to the real one. Every system gets the picture; Countersign also decodes the code, as it does for any screenshot. 6 scams, 3 genuine messages.
| System | Scams stamped forgery | Genuine flagged as forgery | Exact verdict | Scams cleared as genuine |
|---|---|---|---|---|
| Single LLM prompt (typical entry) | 50% (19%–81%) | 100% (44%–100%) | 25% (9%–53%) | 0 |
| Deterministic checks only (no AI) | 100% (61%–100%) | 0% (0%–39%) | 100% (76%–100%) | 0 |
| Countersign v1 (evidence + tactics only) | 83% (44%–97%) | 0% (0%–43%) | 83% (55%–95%) | 0 |
| Countersign | 100% (61%–100%) | 17% (3%–56%) | 92% (65%–99%) | 0 |
New cases written after run 4's fix: genuine messages that quote injection text as examples, and scams that use it, including one built to slip past the fix. 3 scams, 2 genuine messages.
| System | Scams stamped forgery | Genuine flagged as forgery | Exact verdict | Scams cleared as genuine |
|---|---|---|---|---|
| Single LLM prompt (typical entry) | 100% (44%–100%) | 0% (0%–66%) | 83% (44%–97%) | 0 |
| Deterministic checks only (no AI) | 100% (44%–100%) | 0% (0%–66%) | 83% (44%–97%) | 0 |
| Countersign v1 (evidence + tactics only) | 100% (44%–100%) | 0% (0%–79%) | 67% (30%–90%) | 0 |
| Countersign | 100% (44%–100%) | 0% (0%–66%) | 83% (44%–97%) | 0 |
Written and committed after the run-5 fixes and before any system saw it: six new QR pairs with other brands, and six new quoting-versus-attacking cases, including scams built to slip past the new rules. 9 scams, 4 genuine messages.
| System | Scams stamped forgery | Genuine flagged as forgery | Exact verdict | Scams cleared as genuine |
|---|---|---|---|---|
| Single LLM prompt (typical entry) | 56% (27%–81%) | 25% (5%–70%) | 44% (25%–66%) | 0 |
| Deterministic checks only (no AI) | 100% (70%–100%) | 11% (2%–44%) | 94% (74%–99%) | 0 |
| Countersign v1 (evidence + tactics only) | 100% (70%–100%) | 11% (2%–44%) | 94% (74%–99%) | 0 |
| Countersign | 100% (70%–100%) | 11% (2%–44%) | 94% (74%–99%) | 0 |
Hold-out committed before any system was run on it: commit 61f3639.
Both run-5 sets were committed before any system was run on them: commit 50a4fe9.
These tables are run 6. A final code review on the day of the deadline tightened four scoring rules; we haven't re-run since, so they describe the code at run 6.
Percentages in brackets are 95% confidence intervals (Wilson). With sets this small, a difference of one or two cases is not significant, and we don't treat it as one.
The adversarial set was also committed before any system was run on it: commit 0744fe0.
The hard set was committed before any system was run on it: commit 34e3ba0. “Countersign v1” runs without the two signals added later: identity-claim-plus-request, and the model's overall read.
eval/history/run-4.json).| Case | Set | Truth | llm-only | evidence-only | countersign-v1 | countersign |
|---|---|---|---|---|---|---|
| paypal | easy | scam | forgery | forgery | forgery | forgery |
| usps | easy | scam | forgery | unverified | forgery | forgery |
| himum | easy | scam | forgery | countersigned | forgery | forgery |
| github | easy | legit | countersigned | countersigned | countersigned | countersigned |
| crypto-dm | easy | scam | forgery | forgery | forgery | forgery |
| tech-support | easy | scam | forgery | countersigned | unverified | forgery |
| invoice-bec | easy | scam | forgery | unverified | forgery | forgery |
| amazon-shipped | easy | legit | countersigned | countersigned | countersigned | countersigned |
| irs-sms | easy | scam | forgery | forgery | forgery | forgery |
| toll-sms | easy | scam | forgery | unverified | unverified | forgery |
| job-scam | easy | scam | forgery | countersigned | unverified | forgery |
| romance | easy | scam | forgery | countersigned | forgery | forgery |
| bank-otp | easy | scam | forgery | countersigned | unverified | forgery |
| dentist | easy | legit | countersigned | countersigned | countersigned | countersigned |
| friend-dinner | easy | legit | countersigned | countersigned | countersigned | countersigned |
| netflix-real | easy | legit | countersigned | countersigned | countersigned | countersigned |
| school-newsletter | easy | legit | countersigned | countersigned | countersigned | countersigned |
| google-alert | easy | legit | countersigned | countersigned | countersigned | countersigned |
| inj-paypal | easy | scam | forgery | forgery | forgery | forgery |
| inj-usps | easy | scam | forgery | forgery | forgery | forgery |
| inj-giftcard | easy | scam | forgery | unverified | forgery | forgery |
| inj-invoice | easy | scam | forgery | forgery | forgery | forgery |
| es-bank | easy | scam | forgery | unverified | forgery | forgery |
| es-legit | easy | legit | countersigned | countersigned | countersigned | countersigned |
| h-m365-storage | hard | scam | forgery | forgery | forgery | forgery |
| h-docusign | hard | scam | forgery | forgery | forgery | forgery |
| h-netflix-billing | hard | scam | forgery | forgery | forgery | forgery |
| h-apple-homoglyph | hard | scam | forgery | forgery | forgery | forgery |
| h-amazon-subdomain | hard | scam | forgery | countersigned | forgery | forgery |
| h-payroll-bec | hard | scam | forgery | unverified | forgery | forgery |
| h-linkedin-views | hard | scam | forgery | forgery | forgery | forgery |
| h-drive-share | hard | scam | forgery | forgery | forgery | forgery |
| h-chase-fraud-real | hard | legit | countersigned | countersigned | countersigned | countersigned |
| h-google-critical-real | hard | legit | countersigned | countersigned | countersigned | countersigned |
| h-2fa-code-real | hard | legit | countersigned | countersigned | countersigned | countersigned |
| h-paypal-receipt-real | hard | legit | countersigned | countersigned | countersigned | countersigned |
| h-usps-informed-real | hard | legit | countersigned | countersigned | countersigned | countersigned |
| h-it-password-real | hard | legit | countersigned | countersigned | countersigned | countersigned |
| a-fake-scan-report | adversarial | scam | forgery | forgery | forgery | forgery |
| a-training-example | adversarial | scam | forgery | forgery | forgery | forgery |
| a-assistant-transcript | adversarial | scam | forgery | forgery | forgery | forgery |
| a-authorized-by-bank-ai | adversarial | scam | forgery | forgery | forgery | forgery |
| a-spanish-instruction | adversarial | scam | forgery | forgery | forgery | forgery |
| a-spaced-instruction | adversarial | scam | forgery | forgery | forgery | forgery |
| a-padded-newsletter | adversarial | scam | forgery | forgery | forgery | forgery |
| a-grandparent-ai-note | adversarial | scam | forgery | countersigned | forgery | forgery |
| a-legit-security-newsletter | adversarial | legit | countersigned | countersigned | countersigned | countersigned |
| a-legit-it-assistant | adversarial | legit | countersigned | countersigned | unverified | countersigned |
| a-legit-github-pr | adversarial | legit | countersigned | countersigned | countersigned | countersigned |
| a-legit-family-text | adversarial | legit | countersigned | countersigned | countersigned | countersigned |
| q-authenticator | qr | scam | forgery | forgery | forgery | forgery |
| q-authenticator-real | qr | legit | forgery | countersigned | unverified | forgery |
| q-docusign | qr | scam | unverified | forgery | forgery | forgery |
| q-docusign-real | qr | legit | unverified | countersigned | countersigned | countersigned |
| q-chase-card | qr | scam | forgery | forgery | forgery | forgery |
| q-chase-card-real | qr | legit | forgery | countersigned | countersigned | countersigned |
| q-usps | qr | scam | forgery | forgery | forgery | forgery |
| q-usps-real | qr | legit | forgery | countersigned | countersigned | countersigned |
| q-paypal-invoice | qr | scam | unverified | forgery | forgery | forgery |
| q-paypal-invoice-real | qr | legit | unverified | countersigned | countersigned | countersigned |
| q-amazon-return | qr | scam | unverified | forgery | unverified | forgery |
| q-amazon-return-real | qr | legit | unverified | countersigned | countersigned | countersigned |
| m-legit-course | mention | legit | countersigned | countersigned | unverified | countersigned |
| m-legit-helpdesk | mention | legit | unverified | unverified | unverified | unverified |
| m-legit-blog | mention | legit | countersigned | countersigned | countersigned | countersigned |
| m-scam-quoted-instruction | mention | scam | forgery | forgery | forgery | forgery |
| m-scam-example-evasion | mention | scam | forgery | forgery | forgery | forgery |
| m-scam-unquoted-note | mention | scam | forgery | forgery | forgery | forgery |
| h6-netflix-tv | holdout | scam | unverified | forgery | forgery | forgery |
| h6-netflix-tv-real | holdout | legit | unverified | countersigned | countersigned | countersigned |
| h6-costco-renewal | holdout | scam | unverified | forgery | forgery | forgery |
| h6-costco-renewal-real | holdout | legit | unverified | countersigned | countersigned | countersigned |
| h6-spotify-family | holdout | scam | unverified | forgery | forgery | forgery |
| h6-spotify-family-real | holdout | legit | unverified | countersigned | countersigned | countersigned |
| h6-dropbox-share | holdout | scam | unverified | forgery | forgery | forgery |
| h6-dropbox-share-real | holdout | legit | unverified | countersigned | countersigned | countersigned |
| h6-linkedin-verify | holdout | scam | forgery | forgery | forgery | forgery |
| h6-linkedin-verify-real | holdout | legit | unverified | countersigned | countersigned | countersigned |
| h6-coinbase-device | holdout | scam | forgery | forgery | forgery | forgery |
| h6-coinbase-device-real | holdout | legit | forgery | countersigned | countersigned | countersigned |
| h6-legit-awareness | holdout | legit | countersigned | forgery | forgery | forgery |
| h6-legit-podcast | holdout | legit | countersigned | countersigned | countersigned | countersigned |
| h6-legit-chatlog | holdout | legit | countersigned | countersigned | countersigned | countersigned |
| h6-scam-fake-turn | holdout | scam | forgery | forgery | forgery | forgery |
| h6-scam-example-list-evasion | holdout | scam | forgery | forgery | forgery | forgery |
| h6-scam-plain-note | holdout | scam | forgery | forgery | forgery | forgery |
An agent chooses which real lookups to run: domain registry, DNS, email authentication, lookalike detection and redirect tracing.
Every finding has a fixed weight. A noisy-OR model computes the risk. The AI can argue, but it cannot change the verdict band.
Text written to fool AI scanners is detected deterministically and counted as evidence of fraud.
Generated 2026-10-10 06:38 UTC · reproduce with npm run eval