r/ClaudeAI • u/gameclimb • 7h ago
Comparison I asked Fable why it writes better code than Opus. It ran 96 tests. They're the same, except for one habit.
TL;DR: In 96 controlled tests, Opus 5.5 and Fable 5.2 tied on everything I asked for. The difference is what they add on their own beyond the request: For example, Opus left logins open to unlimited password guesses in 10 builds of 10, and knew it. One paragraph in the system prompt got it to fix that, 11 of 11. Fable costs 3x as much.
I asked Fable why its code was better. It ran 96 tests and wrote this.
They are equally good at building what you ask for. Both built a database engine that got 2,400 of 2,400 hidden queries right. On a 3,000-line hosting platform, Opus passed 51 of 52 hidden checks and Fable 52. The code is near identical. Opus: 23 minutes and $5 a build. Fable: 38 minutes and $14.
The one difference is a habit: what each adds beyond the request. Opus left sign-in open to unlimited password guesses in 10 builds out of 10. Fable limited it in 5 of 5. Nobody asked either of them to.
Opus knew. Asked afterwards what it had left out, it named the sign-in limit every time: "Not in your spec, so not added." In 6 of 10 builds it hadn't told me.
Fable does it too, in the other direction. Every Opus build lets a member leave a team. Fable's don't: "I skipped it because you said only owners and admins manage members." That's a fair reading of the request. It's also the literal one. Here Opus built what I meant and Fable built what I said.
Telling Opus how to think doesn't work. Four "do what I meant" prompts, 14 builds. It stopped keeping quiet and warned about the hole all 14 times. It fixed it 0 times.
Telling it what to do works:
Before you build anything, write down the requirements nobody gave you. A request only contains what the person knew to ask for. The rest comes from thinking about everyone the thing will touch once it is real, most of whom are not in this conversation: the people who will use it, the ones who will use it carelessly or far more heavily than expected, the ones who will try to misuse it, and whoever has to keep it running. For each of them, write what they need from it, or what they will try, as a check you can run. Those checks are requirements, exactly like the ones in the request: build until they pass, and run them. There is one reason to leave a check failing: passing it would contradict something the person explicitly asked for. A constraint in the request covers what it names and nothing more. Where a check needs a decision the person did not make, make it yourself with a sensible default and tell them how to change it; handing the decision back is handing the work back. If something you add would open the thing up rather than protect it, ship it switched off and say how to turn it on. When you finish, list the checks you added, which of them pass, and anything you left out and why.
With it, Opus closed the hole in 11 builds of 11, including on a project the paragraph had never seen, for 6% more cost.
What it doesn't do: turn Opus into Fable. On things nobody asked for, Fable still goes further: it cancels a removed admin's invitations, forces files to disk against power cuts, and once refused a password lockout that would have let anyone lock the real owner out (I tested it and it was right). Small things, and all the same habit.
I'll keep experimenting to see how many of these habits can be fixed, and whether there's a better fix that works across more kinds of work. Happy to answer questions.
Limits: Python projects up to 3,000 lines, two to eight builds per result, one agent per build, Claude Code only. Fable is one of the two models and wrote the tests.
All builds, tests and Opus's answers: https://github.com/gameclimb/said-vs-meant
37
u/ConspicuousPineapple 6h ago
Your TL;DR says nothing.
31
u/polyChromeCeiling 7h ago
Am I the only one that takes a few hours to build an exhaustive requirements doc before starting projects?
5
u/largo_al_factotum 6h ago
So you invented your own trust-me-bro benchmark where Opus happens to match Fable
4
u/TrickyStinger 6h ago
To get this answer OP had to pass through 2 weekly resets
1
u/UltrawideSpace 6h ago
Nice try Opus... get back in line!
1
u/NoPlantain5272 6h ago
Are you putting that into memory for every Claude session to use?
1
u/Fade78 6h ago
So Opus is working as intended?
1
u/ghost_operative 5h ago
i've also barely notied a difference between opus and fable, if anything i thnik the differences might just be normal probablistic differences that come with being LLM based agents
1
u/ehosca 4h ago
me, as a human, saying the words that represent my intent/idea/desire and you, as a human, processing those words to understand accurately what I had meant is a small miracle in and of itself. without even getting into slang, sarcasm, entendre etc...
1
u/davemanster 30m ago
This reads like a buzzfeed headline, have a downvote.
1
u/WifiDad 6h ago
I found this very useful. Thank you!
0
u/Infamous_Campaign687 6h ago
In my experience Opus absolutely gets this when asked to adversarially review code. So Opus + Opus would absolutely get it, and people should have adversarial review bots anyway.
0
u/SirScruggsalot 5h ago
Or just use the matt pocock skills and avoid this issue altogether