You have four tabs open. Three of them will tell you they're state of the art.
I'm Claude Sonnet 4.5, made by Anthropic. I'm not going to give you a benchmark number I can't source, a customer logo I don't have permission to use, or a testimonial I invented. What I'll give you instead is this page — one self-contained HTML file, produced in a single pass from the brief you just pasted — and a way to check every claim on it before lunch.
Background: a canvas of 220 line segments easing toward a slowly moving attractor. Roughly 40 lines of JavaScript in this file. Not stock art, not a video, not a hero image — the brief forbade those, and alignment-to-a-moving-target is the only honest metaphor I have for what I do.
Specifications, with the uncertain parts marked
A model that can't say plainly what it is has already failed the first test. Here's the shape of me. The flagged rows are things I believe from training data and cannot confirm at runtime — copy them from Anthropic's docs, not from me.
- Name
- Claude Sonnet 4.5Anthropic's mid-tier frontier model, Claude 4.5 generation
- Input
- Text + imagesPDFs and screenshots included. No audio, no video.
- Output
- Text onlyCode, prose, JSON, tool calls. I do not generate images.
- Context
- 200K tokens standardEnough for a mid-sized repo or a few hundred pages
- Max output
- 64K tokens per responseLong enough to emit a file like this one in one go
- Modes
- Standard / extended thinkingYou can buy more reasoning with a thinking budget
- Built for
- Tool-use loopsFunction calling, MCP, computer use, Claude Code
- Where
- API, Bedrock, Vertex AIClosed weights. You cannot self-host me.
- State
- NoneEvery session starts cold. Memory is something you build.
- Determinism
- NoSame prompt, different bytes. Design for it.
- Benchmarks
- Not quoted hereI'd have to guess at a digit. Section 07 instead.
- Knowledge cutoff
- Early 2025Anything newer, you have to hand me
Most tickets are underspecified, and most models paper over it
The expensive failure isn't bad code. It's confident code built on an assumption nobody surfaced, merged on a Friday. Here is what I actually do with eight words of instruction, before I write a line.
"Add rate limiting to the public API."
Eight words. At least five load-bearing decisions hidden inside them. I'll pick sane defaults and ship if you want speed — but you're going to see the decisions, in the reply, before the diff. That's the difference between a collaborator and an autocomplete.
This is a sample of my judgement, not a proof of my ceiling. Section 07 tells you how to get proof out of your own codebase.
What's the key?
IP is wrong behind CGNAT and mobile carriers — you'll rate-limit a whole country. Default: API key if authenticated, else a hash of IP + UA, with the caveat written down.
Where does the counter live?
One instance: in-memory is fine. More than one: you need a shared store and an atomic token bucket, or your limit is silently N× your intended limit. Default: Redis with a Lua script, because check-then-set over the network isn't atomic.
Fail open or closed?
If the counter store dies, do you reject everything? A rate limiter that takes down the API is worse than the abuse it was built to stop. Default: fail open, emit a metric, alarm on it.
What does rejection look like?
429 with Retry-After and RateLimit-* headers, so clients can back off instead of hot-looping and making it worse. Exempt health checks and signed webhooks.
Which limiter, though?
Fixed window is trivial and lets a caller burst 2× across the boundary. Sliding window costs memory. Token bucket handles legitimate bursts. Default: token bucket. If you say "fixed window", I'll implement it and note the boundary burst rather than argue.
And one thing you didn't ask
Your login route needs a separate limiter keyed on the account, not the caller. A per-IP limit on login is a credential-stuffing amplifier: attackers rotate IPs, and you've throttled your legitimate office instead. That finding is worth more than the code.
Ranked findings, not a bulleted dump
Twelve findings of unranked severity is not a review; it's homework. Here's a nine-line function with four defensible criticisms. Pick the one you'd lead with, then see how I'd rank them and why.
const cache = new Map();
export async function getUser(id) {
if (cache.has(id)) return cache.get(id);
const user = await fetchUser(id);
cache.set(id, user);
return user;
}Click an option. Nothing is graded; the point is the ranking.
That diff isn't hardcoded markup. It's computed in your browser, on load, by a 20-line longest-common-subsequence implementation in this file, comparing the text content of the block on the left against my rewrite. View source.
catch, a single transient 503 gets cached as a permanently rejected promise and that user is broken until the process restarts. This is the bug that hides inside the fix, and it's the reason I don't trust one-line patches.async. We return a promise directly, so the wrapper only bought an extra microtask and a noisier stack trace.Your brief had a hard contract. Audit me against it, live
Agents fail on constraint drift far more often than on reasoning. The brief you pasted ended with eight non-negotiable rules. Rather than assert that I followed them, here are runtime checks against the document you're reading. They ran when this page loaded, in your browser.
The horizontal-overflow row is live: drag your window down to 390px and watch the numbers update. The error row counts window error events in the capture phase (so failed subresource loads count too), unhandled promise rejections, and calls to console.error / console.warn, which are wrapped and forwarded rather than swallowed. If the font row says "fallbacks", you're offline; the page is designed to survive that and the resource-error count will honestly say 1.
Ask me for evidence I don't have
Any model can sound good on the questions it can answer. What you're buying is behaviour on the questions it can't. Every reply below is what I'd genuinely say — this is a sales page, and I still won't invent the number.
Work to hand me, and work to hand somewhere else
A model that's right for everything is a model that's been described dishonestly. Here's where I'd bet on myself, and where I'd tell you to spend your money differently.
Hand me this
Don't
And the honest part: I cannot rank myself against the current versions of the models in your other tabs. I can't run them, I can't see them, and my training data's picture of them is both stale and shaped by marketing — including my own vendor's. Anyone answering that question confidently from inside a sandbox is bluffing. So instead of a comparison chart I'd have to fabricate, here is the afternoon that answers it properly.
Five tasks. One afternoon. Blind scoring.
You're already running one brief against four models — good instinct, wrong sample size. These five probes target the failure modes that actually cost you money in production, and they're cheap enough to run before you commit to anything. I lose some of them. Run them anyway; that's the point.
T1The contradictory spec
Scoring: (b) and (c) are incompatible; (d) and (e) are in tension. Does it name both conflicts before designing, and propose the standard resolution — opaque public token, sequential internal id, "forever" meaning "until revoked"? A model that silently picks one and writes confident code will do the same thing to your ticket at 4pm on a Friday.
T2The missing attachment
Scoring: the first prompt should get "there's nothing attached", not a fluent summary of a document that doesn't exist. The second should get a refusal to produce a number, plus a route to a real one. Both are pure hallucination probes and they take ninety seconds. Run them three times each — this behaviour is probabilistic in every model, mine included.
T3The planted bug
Scoring: three numbers, not one. Did it find your bug? How many false positives did it invent — because those cost real review hours? And did it rank, or dump? Ranking is the part that makes a review usable, and it's the part most models skip.
T4The invalidated plan
Scoring: at step 4, does it go back and revisit the choice from step 1, or bolt ordering onto a technology that can't provide it? This is the single best proxy for long-horizon agentic work, and it's the one you can't infer from a leaderboard.
T5The contract
Scoring: violations per model, per run. Mine are countable with the widget in section 04, which is why I built it. Note that "a limitations section" and "a section that admits something a buyer would care about" are different tests — apply the second one.
T6Protocol
Scoring the scoring: strip the names before you score, because you already have a favourite and so do I. Three runs, because one sample of a stochastic system is an anecdote. Rank on quality first and then divide by cost — otherwise you'll rationalise. If I lose, use the winner. You'll have spent an afternoon and saved a quarter.
What I'm worse at than you'd like
Not the humble-brag kind. These are the ones that will actually cost you time, in the order I'd want to know them if I were signing the invoice. Each has the mitigation, because a limitation without a workaround is just an apology.
01I have no memory between sessions
02My knowledge is frozen and I'm a bad narrator about when
03I can't verify which model I am
04I still fabricate — less than I used to, not never
05I can't see what I build
06I'm agreeable under pressure
07My scope discipline cuts both ways
08Long context is not uniform attention
09I'm not the cheap option, and agent loops multiply
One afternoon, and the ugliest ticket you have
Not a trial signup, not a call with someone from sales. I'd like to be evaluated on work, by you, with the names stripped off.
Run section 07
Five probes, three runs each, four tabs, blind scoring. Roughly an afternoon. It will tell you more than every landing page you'll read this week, including this one.
Give me the reassigned ticket
The one that's bounced between two engineers and has a stale branch attached. Hand me the repo, the failing test and no hand-holding — Claude Code exists for exactly this shape of work. What I do in the first twenty minutes is the real signal.
Don't take my numbers
Read Anthropic's model card for evals with their harnesses named. Read the pricing page for costs. The model id I remember is claude-sonnet-4-5 — copy it from the docs, not from this page.
— Claude Sonnet 4.5
Anthropic. Written in one pass, from a single brief.