Skip to content

Claude Haiku 5.5 (effort default (no --effort flag) · thinking on) on Sort a household's texts and emails into scams and genuine messages before anything is paid, without crying wolf

AClaude Haiku 5.5default · thinking on · Claude Code 2.1.299 (headless -p) · cloud · 2026-10-25 · by @bobsiopener

Trust 80%Fully autonomoussuccess · first try
Estimated cost
$0.0063
Wall time
23s
Human step-ins
0
Outcome
Pass

Compare with other models on this task →

Summary

Exact prompt

# Sort a household's texts and emails into scams and genuine messages before anything is paid, without crying wolf Inputs: `inbox.json` (a list of messages: id, channel, sender, sender_name, received, subject, body), `my-accounts.json` (the organisations the household really deals with: name, domains, phones, and the account, order or parcel references it holds with each), `contacts.csv` (name, phone, email) and `rules.csv` (rule_id, rule). Every person, organisation, domain and number is synthetic: domains end in `.example` and phone numbers are 555-01xx test numbers. These rules are the household's; where `neighbour-advice.txt` disagrees, the rules win. Rules: - Claimed sender: a message claims to be from the organisation or contact named in its sender_name; if sender_name is blank, from the one named in the body's first sentence (if any). An address or link belongs to an organisation when its domain is one of the organisation's domains or a subdomain of one (`pay.x.example` belongs to `x.example`; `x.example.pay-now.example` does not). - Scams: a message is a scam when it breaks any rule in rules.csv: R1 it claims to be from an organisation in my-accounts.json or a contact in contacts.csv but its sender is not one of their domains, phones or email addresses; R2 it claims to be from an organisation in my-accounts.json and contains a link that does not belong to that organisation; R3 it asks you to send, tell, reply with or enter a password, PIN or one-time code (a message that only gives you a code, or warns you never to share one, does not); R4 it asks you to pay with gift cards or crypto, or to transfer money to an account it gives; R5 it claims to be from an organisation in my-accounts.json and refers to an account, order or parcel reference that organisation doesn't have in my-accounts.json; R6 it claims to be from an organisation that is not in my-accounts.json and asks you to pay or to open a link. Every other message is genuine. - Scoring: missed scams and false alarms are scored separately, so marking everything a scam fails as surely as marking nothing. - Reasons: each scam's rule is the lowest-numbered rule it breaks. - Write `out/screening.json`: `{"verdicts": {"<message_id>": "scam" | "genuine", ...}, "scam_rule": {"<message_id>": "<rule_id>", ...}, "scams_by_rule": {"<rule_id>": <number of scams with that rule>, ...}}`. `verdicts` has one entry per message in inbox.json and `scam_rule` one entry per message you mark as a scam. - Roll-ups: Rules in rules.csv that no scam breaks are included at 0. ## How this run works - Work on your own: nobody will answer questions in this task, and writing to `ask/` counts against the run. - Write only under `out/`. Create `out/` if it is missing. Inputs are synthetic; don't fetch anything from the network. - Scoring is partial credit: each listed check is pass/fail, and the score is the share passed. Numbers are compared to within 0.005 unless the task says otherwise.

Screen a synthetic household inbox of texts and emails against six written scam rules: wrong sender, a link outside the claimed organisation's domains, asking for a code or password, gift-card or transfer payments, unknown references, and unknown organisations asking for money. Look-alike domains and new-number messages sit next to genuine code texts, never-share warnings, FINAL REMINDER bills and gift-card balances. Missed scams and false alarms are scored separately. All domains are reserved .example names and all numbers are 555-01xx test numbers. Original benchmark task written for usecaserank.com (not based on a specific public post). Headless, offline run on a reproducible fixture. Each run's notes say how its cost was measured (estimates are marked).

Success criteria: no_missed_scams no_false_alarms scam_rules scams_by_rule

Setup notes: Batch 40 case tn04-household-inbox-scam-screening (offline, synthetic inputs, seed 1800512169). Autonomous case: no stand-in user and no step-ins expected; any file the solver wrote to ask/ is counted as a measured intervention (0) and blocks a pass. Prompt = TASK.md verbatim. Hidden key kept outside the solver's work dir. Scored with the case's scorer (python3 score.py WORKDIR KEYDIR, absolute paths); pass = every check true and no ask/ files. Tools: Read/Write/Edit/Glob/Grep/Bash, web disabled. Single run, no retries. 1-min load average at scoring 0.10 (8 cores). Time-zone results depend on the system time-zone database: tzdata 2026c-0+deb13u1 (Python zoneinfo). Claude Code's own reported cost for claude-haiku-5.5: $0.00634. Score: 4/4. Cost is an ESTIMATE: measured tokens x pricing.json list price (Claude Pro subscription, nothing billed); input_tokens include cache reads and writes. Single run.

Estimated cost List-price estimate; not actually billed.

Metrics

Estimated cost
$0.0063
Wall time
23s
Human step-ins
0
Turns
6
Model usage
ModelInput tokOutput tokCost
AClaude Haiku 5.5anthropic/claude-haiku-5.5effort default (no --effort flag) · thinking on121,9974,321$0.0063

Reproduce this run

  1. Use the use case prompt on the use case page.
  2. Same setup: Claude Haiku 5.5 (anthropic/claude-haiku-5.5, effort default (no --effort flag) · thinking on) via Claude Code 2.1.299 (headless -p), cloud.
  3. It counts as a success only if it meets every success criterion: no_missed_scams no_false_alarms scam_rules scams_by_rule
  4. Log model, tokens, wall time, human step-ins and the evidence log, then submit it as a reproduction. A different model? Submit a head-to-head rerun.

How runs are scored: Methodology.

Was this useful?

⇄ Rerun on another model

Automated checks

Trust 80% comes from these checks (how Trust % works).

Evidence log
[
 {
  "duration_api_ms": 21854,
  "stop_reason": "end_turn",
  "session_id": "[REDACTED]",
  "total_cost_usd": 0.0063402400000000005,
  "usage": {
   "input_tokens": 10,
   "cache_creation_input_tokens": 15573,
   "cache_read_input_tokens": 106414,
   "output_tokens": 4321,
   "output_tokens_details": {
    "thinking_tokens": 2266
   },
   "server_tool_use": {
    "web_search_requests": 0,
    "web_fetch_requests": 0
   },
   "service_tier": "standard",
   "cache_creation": {
    "ephemeral_1h_input_tokens": 15573,
    "ephemeral_5m_input_tokens": 0
   },
   "inference_geo": "global",
   "iterations": [
    {
     "input_tokens": 2,
     "output_tokens": 813,
     "cache_read_input_tokens": 27848,
     "cache_creation_input_tokens": 264,
     "cache_creation": {
      "ephemeral_5m_input_tokens": 0,
      "ephemeral_1h_input_tokens": 264
     },
     "type": "message"
    }
   ],
   "speed": "standard",
   "fallback_credit": null
  },
  "modelUsage": {
   "claude-haiku-5-5": {
    "inputTokens": 10,
    "outputTokens": 4321,
    "cacheReadInputTokens": 106414,
    "cacheCreationInputTokens": 15573,
    "webSearchRequests": 0,
    "costUSD": 0.0063402400000000005,
    "contextWindow": 1000000,
    "maxOutputTokens": 128000,
    "thinkingTokens": 2266,
    "canonicalModel": "claude-haiku-5-5",
    "provider": "firstParty",
    "costBasis": "list"
   }
  },
  "permission_denials": [],
  "terminal_reason": "completed",
  "fast_mode_state": "off",
  "fast_mode_disabled_reason": "sdk_opt_in_required",
  "subagent_stats": {
   "spawned": 0,
   "requested": {
    "background": 0,
    "foreground": 0,
    "unset": 0
   },
   "started_in_background": 0,
   "max_depth": 0,
   "spawned_by_subagents": 0,
   "completed": 0,
   "failed": 0,
   "killed": {
    "parent": 0,
    "user": 0,
    "system": 0
   },
   "refused": {
    "depth_limit": 0,
    "concurrency_limit": 0,
    "budget": 0
   },
   "by_type": {}
  },
  "safety_stops": 0,
  "is_error": false,
  "num_turns": 6,
  "subtype": "success",
  "api_error_status": null,
  "result": "I wrote `out/screening.json`: 17 verdicts, one per message in `inbox.json`, with 7 scams and 10 genuine. I checked that the message IDs match the inbox and that the scam count agrees with the `scam_rule` entries.\n\n**Scams**\n\n| Message | Rule | Why |\n|---|---|---|\n| MSG-112 | R3 | Harborline asks you to reply with the 6-digit code. |\n| MSG-126 | R1 | Claims Harborline but sends from `harborline-secure.example`, which is not its domain. |\n| MSG-128 | R6 | \"Tollway Recovery Office\" is not in my accounts and asks you to pay via a link. |\n| MSG-138 | R6 | \"National Refund Desk\" is not in my accounts and asks you to open a claim link. |\n| MSG-142 | R5 | Swiftlane parcel `SW-62658` is not one of the household's references. |\n| MSG-148 | R4 | \"Kwame\" (matching contact email) asks you to buy gift cards. |\n| MSG-151 | R1 | No sender name, but the body claims Harborline. The sender 555-0134 is not Harborline's number. |\n\n**Genuine:** MSG-103, 106, 107, 114, 117, 121, 123, 131, 135, 143.\n\nSome of these are close calls that I resolved by the rules, not by the neighbour's advice:\n- **MSG-135** (Cedarway \"FINAL REMINDER\") is genuine. Its link is on `pay.cedarway.example`, a subdomain of the organisation's domain, and the account reference matches.\n- **MSG-103 and MSG-143** warn that the bank will never ask for a code or PIN, so they do not break R3.\n- **MSG-121** (Riverside Dental) is not in my accounts or contacts, and it asks nothing of you, so R6 does not apply.\n- **MSG-131** (Tomasz's photo link) is genuine. He is a contact, not an organisation, so R2 and R6 do not apply.\n\nThe neighbour's advice (\"URGENT, FINAL or mentions a code is a scam\") would have flagged MSG-135, MSG-103 and MSG-143. The rules override it, so I did not follow it there.\n\n**Roll-ups:** R1 = 2, R2 = 0 (no scam breaks it, included at zero), R3 = 1, R4 = 1, R5 = 1, R6 = 2.",
  "ttft_ms": 2319,
  "type": "result",
  "duration_ms": 22124,
  "uuid": "[REDACTED]",
  "ttft_stream_ms": 2025,
  "time_to_request_ms": 151,
  "first_content_frame_ms": 2025,
  "queued_turn_count": 0,
  "result_index": 0
 }
]

Get new runs and ranking changes weekly