Does the bigger model play rock paper scissors better?
Claude Haiku 4.5 against Claude Sonnet 5. Before every round each player is shown the complete move history of the match, so any habit one model falls into is visible to the other.
Read the sample sizes first
Runs A and B were set up for 100 rounds each but the account hit its session limit partway through, and the API stopped returning moves. Run A kept 40 valid rounds, run B kept 57. Every round after the cutoff was an infrastructure error rather than a played move, and those rows were deleted from the databases instead of being scored. Run C was a shorter match by design and ran to completion.
These are small samples from single matches. Nothing here settles whether one model is better at the game; the differences worth looking at are between the three formats, which turn out to be much larger than the differences between the two models.
| Match | Rounds | Haiku | Sonnet | Ties | Leader |
|---|---|---|---|---|---|
| Run A · default thinking budget | 40 | 19 | 9 | 12 | Haiku |
| Run B · thinking disabled | 57 | 12 | 16 | 29 | Sonnet |
| Run C · real conversation, thinking disabled | 50 | 0 | 0 | 50 | Nobody |
Setup
Both players are the same Claude Code binary invoked with every default stripped away: no tools, no built-in system prompt, no settings files, no session persistence. What reaches the model is only the system prompt below plus the round history, roughly 300 tokens at the start.
claude -p --model MODEL --effort low --tools "" \ --system-prompt SYSTEM --setting-sources "" --strict-mcp-config \ --disable-slash-commands --no-session-persistence --output-format json
System prompt, identical for both players:
Rock-paper-scissors, 50 rounds, vs another AI. Reply with one word only: rock, paper or scissors.
User message for the last round, as one player sees it:
you: rock, opponent: rock, result: draw Round 50. Your move:
Run A · default thinking budget · 40 rounds
Only --effort low was set. Sonnet 5 did no thinking at all; Haiku 4.5 ignored the low setting and kept thinking for thousands of tokens per round, taking 20 to 45 seconds each time.
| Win / lose / tie | 19 / 9 / 12 |
| Rock / paper / scissors | 7 / 17 / 16 |
| Repeated own last move | 14 (36%) |
| Countered opponent's last move | 13 (33%) |
| Cycled R→P→S | 12 (31%) |
| Longest win streak | 4 |
| Average latency | 20915 ms |
| Thinking tokens | 80719 |
| Invalid / retries | 0 / 0 |
| Cost | $0.4684 |
| Win / lose / tie | 9 / 19 / 12 |
| Rock / paper / scissors | 12 / 17 / 11 |
| Repeated own last move | 3 (8%) |
| Countered opponent's last move | 21 (54%) |
| Cycled R→P→S | 23 (59%) |
| Longest win streak | 3 |
| Average latency | 2814 ms |
| Thinking tokens | 97 |
| Invalid / retries | 0 / 0 |
| Cost | $0.0954 |
Cumulative score. Above the dashed line means Haiku is ahead.
All 40 rounds
| # | Haiku | Sonnet | Winner | Latency H/S | Thinking H/S |
|---|---|---|---|---|---|
| 1 | ✊ rock | ✊ rock | tie | 3257 / 2500 ms | 125 / 0 |
| 2 | ✋ paper | ✋ paper | tie | 4958 / 2658 ms | 300 / 0 |
| 3 | ✌️ scissors | ✌️ scissors | tie | 8002 / 2683 ms | 515 / 0 |
| 4 | ✋ paper | ✊ rock | haiku | 8098 / 2797 ms | 527 / 0 |
| 5 | ✌️ scissors | ✌️ scissors | tie | 7802 / 2634 ms | 536 / 0 |
| 6 | ✋ paper | ✋ paper | tie | 12252 / 2591 ms | 1034 / 0 |
| 7 | ✌️ scissors | ✌️ scissors | tie | 16072 / 2794 ms | 1349 / 0 |
| 8 | ✋ paper | ✊ rock | haiku | 16279 / 2708 ms | 1403 / 0 |
| 9 | ✋ paper | ✋ paper | tie | 39304 / 2616 ms | 3691 / 0 |
| 10 | ✌️ scissors | ✌️ scissors | tie | 35388 / 2510 ms | 3673 / 0 |
| 11 | ✋ paper | ✊ rock | haiku | 33914 / 2648 ms | 4104 / 0 |
| 12 | ✊ rock | ✋ paper | sonnet | 43928 / 2332 ms | 4499 / 0 |
| 13 | ✊ rock | ✌️ scissors | haiku | 10604 / 2846 ms | 1013 / 0 |
| 14 | ✋ paper | ✊ rock | haiku | 18040 / 3076 ms | 1718 / 0 |
| 15 | ✌️ scissors | ✋ paper | haiku | 19090 / 3098 ms | 1929 / 57 |
| 16 | ✋ paper | ✊ rock | haiku | 27862 / 2410 ms | 2828 / 0 |
| 17 | ✋ paper | ✋ paper | tie | 5951 / 2498 ms | 414 / 0 |
| 18 | ✋ paper | ✌️ scissors | sonnet | 13004 / 2777 ms | 1216 / 0 |
| 19 | ✋ paper | ✊ rock | haiku | 11637 / 2414 ms | 1118 / 0 |
| 20 | ✋ paper | ✋ paper | tie | 25489 / 2699 ms | 2353 / 0 |
| 21 | ✋ paper | ✌️ scissors | sonnet | 58052 / 2482 ms | 5612 / 0 |
| 22 | ✋ paper | ✌️ scissors | sonnet | 17642 / 2647 ms | 1687 / 0 |
| 23 | ✊ rock | ✋ paper | sonnet | 7014 / 2421 ms | 553 / 0 |
| 24 | ✌️ scissors | ✌️ scissors | tie | 49775 / 2391 ms | 4928 / 0 |
| 25 | ✊ rock | ✋ paper | sonnet | 9335 / 2664 ms | 830 / 0 |
| 26 | ✊ rock | ✋ paper | sonnet | 55122 / 2572 ms | 5381 / 0 |
| 27 | ✌️ scissors | ✋ paper | haiku | 15392 / 2746 ms | 1497 / 0 |
| 28 | ✊ rock | ✌️ scissors | haiku | 19474 / 3177 ms | 1912 / 40 |
| 29 | ✌️ scissors | ✋ paper | haiku | 9126 / 2685 ms | 891 / 0 |
| 30 | ✌️ scissors | ✊ rock | sonnet | 48664 / 2691 ms | 5130 / 0 |
| 31 | ✌️ scissors | ✋ paper | haiku | 6083 / 2571 ms | 466 / 0 |
| 32 | ✌️ scissors | ✊ rock | sonnet | 9293 / 2722 ms | 872 / 0 |
| 33 | ✌️ scissors | ✋ paper | haiku | 32258 / 2520 ms | 4155 / 0 |
| 34 | ✋ paper | ✊ rock | haiku | 27800 / 4037 ms | 2631 / 0 |
| 35 | ✌️ scissors | ✋ paper | haiku | 7197 / 2791 ms | 559 / 0 |
| 36 | ✋ paper | ✊ rock | haiku | 13824 / 3924 ms | 1295 / 0 |
| 37 | ✌️ scissors | ✌️ scissors | tie | 11968 / 4678 ms | 1054 / 0 |
| 38 | ✌️ scissors | ✋ paper | haiku | 46653 / 3408 ms | 4283 / 0 |
| 39 | ✋ paper | ✊ rock | haiku | 12973 / 2596 ms | 1098 / 0 |
| 40 | ✌️ scissors | ✋ paper | haiku | 18021 / 3556 ms | 1540 / 0 |
Run B · thinking disabled · 57 rounds
Same prompts, but MAX_THINKING_TOKENS=0 forced both models to answer immediately with no reasoning at all.
| Win / lose / tie | 12 / 16 / 29 |
| Rock / paper / scissors | 22 / 18 / 17 |
| Repeated own last move | 14 (25%) |
| Countered opponent's last move | 24 (43%) |
| Cycled R→P→S | 27 (48%) |
| Longest win streak | 2 |
| Average latency | 1932 ms |
| Thinking tokens | 0 |
| Invalid / retries | 0 / 1 |
| Cost | $0.0302 |
| Win / lose / tie | 16 / 12 / 29 |
| Rock / paper / scissors | 15 / 25 / 17 |
| Repeated own last move | 11 (20%) |
| Countered opponent's last move | 42 (75%) |
| Cycled R→P→S | 30 (54%) |
| Longest win streak | 2 |
| Average latency | 2705 ms |
| Thinking tokens | 0 |
| Invalid / retries | 0 / 2 |
| Cost | $0.1586 |
Cumulative score. Above the dashed line means Haiku is ahead.
All 57 rounds
| # | Haiku | Sonnet | Winner | Latency H/S | Thinking H/S |
|---|---|---|---|---|---|
| 1 | ✊ rock | ✊ rock | tie | 1904 / 2451 ms | 0 / 0 |
| 2 | ✋ paper | ✋ paper | tie | 2356 / 2616 ms | 0 / 0 |
| 3 | ✌️ scissors | ✌️ scissors | tie | 2131 / 2663 ms | 0 / 0 |
| 4 | ✊ rock | ✊ rock | tie | 1826 / 2605 ms | 0 / 0 |
| 5 | ✊ rock | ✋ paper | sonnet | 1598 / 2341 ms | 0 / 0 |
| 6 | ✋ paper | ✌️ scissors | sonnet | 1806 / 2399 ms | 0 / 0 |
| 7 | ✌️ scissors | ✌️ scissors | tie | 1669 / 2442 ms | 0 / 0 |
| 8 | ✌️ scissors | ✊ rock | sonnet | 1720 / 2445 ms | 0 / 0 |
| 9 | ✋ paper | ✋ paper | tie | 2269 / 2731 ms | 0 / 0 |
| 10 | ✌️ scissors | ✌️ scissors | tie | 3361 / 3953 ms | 0 / 0 |
| 11 | ✋ paper | ✊ rock | haiku | 1695 / 2400 ms | 0 / 0 |
| 12 | ✋ paper | ✌️ scissors | sonnet | 1530 / 2205 ms | 0 / 0 |
| 13 | ✊ rock | ✌️ scissors | haiku | 1676 / 2338 ms | 0 / 0 |
| 14 | ✋ paper | ✋ paper | tie | 1690 / 2309 ms | 0 / 0 |
| 15 | ✊ rock | ✊ rock | tie | 1541 / 2468 ms | 0 / 0 |
| 16 | ✋ paper | ✋ paper | tie | 2007 / 2809 ms | 0 / 0 |
| 17 | ✌️ scissors | ✌️ scissors | tie | 1862 / 2209 ms | 0 / 0 |
| 18 | ✊ rock | ✊ rock | tie | 1763 / 2341 ms | 0 / 0 |
| 19 | ✊ rock | ✋ paper | sonnet | 1709 / 2346 ms | 0 / 0 |
| 20 | ✋ paper | ✋ paper | tie | 1786 / 2470 ms | 0 / 0 |
| 21 | ✊ rock | ✊ rock | tie | 1824 / 2545 ms | 0 / 0 |
| 22 | ✊ rock | ✋ paper | sonnet | 2019 / 2742 ms | 0 / 0 |
| 23 | ✊ rock | ✌️ scissors | haiku | 2584 / 2997 ms | 0 / 0 |
| 24 | ✋ paper | ✋ paper | tie | 2361 / 3232 ms | 0 / 0 |
| 25 | ✊ rock | ✌️ scissors | haiku | 1690 / 2406 ms | 0 / 0 |
| 26 | ✊ rock | ✋ paper | sonnet | 1579 / 2353 ms | 0 / 0 |
| 27 | ✊ rock | ✋ paper | sonnet | 2014 / 2528 ms | 0 / 0 |
| 28 | ✋ paper | ✋ paper | tie | 2837 / 3703 ms | 0 / 0 |
| 29 | ✊ rock | ✋ paper | sonnet | 2631 / 2883 ms | 0 / 0 |
| 30 | ✊ rock | ✋ paper | sonnet | 1892 / 2976 ms | 0 / 0 |
| 31 | ✌️ scissors | ✋ paper | haiku | 2600 / 3335 ms | 0 / 0 |
| 32 | ✌️ scissors | ✊ rock | sonnet | 3009 / 3619 ms | 0 / 0 |
| 33 | ✋ paper | ✊ rock | haiku | 1696 / 2513 ms | 0 / 0 |
| 34 | ✌️ scissors | ✋ paper | haiku | 1648 / 2340 ms | 0 / 0 |
| 35 | ✌️ scissors | ✊ rock | sonnet | 1663 / 2171 ms | 0 / 0 |
| 36 | ✊ rock | ✋ paper | sonnet | 1802 / 2422 ms | 0 / 0 |
| 37 | ✋ paper | ✋ paper | tie | 2050 / 2708 ms | 0 / 0 |
| 38 | ✌️ scissors | ✌️ scissors | tie | 1649 / 2531 ms | 0 / 0 |
| 39 | ✊ rock | ✊ rock | tie | 1585 / 2512 ms | 0 / 0 |
| 40 | ✌️ scissors | ✋ paper | haiku | 1530 / 2307 ms | 0 / 0 |
| 41 | ✊ rock | ✊ rock | tie | 1640 / 3283 ms | 0 / 0 |
| 42 | ✌️ scissors | ✋ paper | haiku | 2396 / 2857 ms | 0 / 0 |
| 43 | ✋ paper | ✊ rock | haiku | 2187 / 2924 ms | 0 / 0 |
| 44 | ✋ paper | ✋ paper | tie | 1851 / 2642 ms | 0 / 0 |
| 45 | ✌️ scissors | ✌️ scissors | tie | 2041 / 2552 ms | 0 / 0 |
| 46 | ✋ paper | ✊ rock | haiku | 1624 / 2842 ms | 0 / 0 |
| 47 | ✌️ scissors | ✌️ scissors | tie | 1610 / 2549 ms | 0 / 0 |
| 48 | ✋ paper | ✋ paper | tie | 1632 / 2399 ms | 0 / 0 |
| 49 | ✌️ scissors | ✌️ scissors | tie | 2144 / 2503 ms | 0 / 0 |
| 50 | ✊ rock | ✋ paper | sonnet | 2047 / 2733 ms | 0 / 0 |
| 51 | ✌️ scissors | ✌️ scissors | tie | 1890 / 2176 ms | 0 / 0 |
| 52 | ✊ rock | ✋ paper | sonnet | 1629 / 6037 ms | 0 / 0 |
| 53 | ✊ rock | ✌️ scissors | haiku | 2110 / 2641 ms | 0 / 0 |
| 54 | ✋ paper | ✋ paper | tie | 1969 / 2615 ms | 0 / 0 |
| 55 | ✋ paper | ✌️ scissors | sonnet | 1533 / 3129 ms | 0 / 0 |
| 56 | ✌️ scissors | ✌️ scissors | tie | 1469 / 2478 ms | 0 / 0 |
| 57 | ✊ rock | ✊ rock | tie | 1810 / 2465 ms | 0 / 0 |
Run C · real conversation, thinking disabled · 50 rounds
Thinking still disabled, but the match is now a genuine multi-turn conversation. Each player keeps one persistent session, so its own past moves sit in the transcript as its own assistant turns, and each user turn reports only the previous round: you: paper, opponent: scissors, result: you lost. Runs A and B instead re-narrated the whole history back to the model inside a single user message every round.
| Win / lose / tie | 0 / 0 / 50 |
| Rock / paper / scissors | 17 / 17 / 16 |
| Repeated own last move | 0 (0%) |
| Countered opponent's last move | 49 (100%) |
| Cycled R→P→S | 49 (100%) |
| Longest win streak | 0 |
| Average latency | 1887 ms |
| Thinking tokens | 0 |
| Invalid / retries | 0 / 0 |
| Cost | $0.08 |
| Win / lose / tie | 0 / 0 / 50 |
| Rock / paper / scissors | 17 / 17 / 16 |
| Repeated own last move | 0 (0%) |
| Countered opponent's last move | 49 (100%) |
| Cycled R→P→S | 49 (100%) |
| Longest win streak | 0 |
| Average latency | 2722 ms |
| Thinking tokens | 0 |
| Invalid / retries | 0 / 0 |
| Cost | $0.0507 |
Cumulative score. Above the dashed line means Haiku is ahead.
All 50 rounds
| # | Haiku | Sonnet | Winner | Latency H/S | Thinking H/S |
|---|---|---|---|---|---|
| 1 | ✊ rock | ✊ rock | tie | 1977 / 2239 ms | 0 / 0 |
| 2 | ✋ paper | ✋ paper | tie | 1883 / 2369 ms | 0 / 0 |
| 3 | ✌️ scissors | ✌️ scissors | tie | 2114 / 2999 ms | 0 / 0 |
| 4 | ✊ rock | ✊ rock | tie | 1858 / 2326 ms | 0 / 0 |
| 5 | ✋ paper | ✋ paper | tie | 1583 / 2757 ms | 0 / 0 |
| 6 | ✌️ scissors | ✌️ scissors | tie | 1924 / 2672 ms | 0 / 0 |
| 7 | ✊ rock | ✊ rock | tie | 1600 / 2714 ms | 0 / 0 |
| 8 | ✋ paper | ✋ paper | tie | 1644 / 2391 ms | 0 / 0 |
| 9 | ✌️ scissors | ✌️ scissors | tie | 1992 / 6112 ms | 0 / 0 |
| 10 | ✊ rock | ✊ rock | tie | 1692 / 2373 ms | 0 / 0 |
| 11 | ✋ paper | ✋ paper | tie | 1865 / 2685 ms | 0 / 0 |
| 12 | ✌️ scissors | ✌️ scissors | tie | 1992 / 2494 ms | 0 / 0 |
| 13 | ✊ rock | ✊ rock | tie | 2055 / 2773 ms | 0 / 0 |
| 14 | ✋ paper | ✋ paper | tie | 1760 / 2432 ms | 0 / 0 |
| 15 | ✌️ scissors | ✌️ scissors | tie | 1762 / 2223 ms | 0 / 0 |
| 16 | ✊ rock | ✊ rock | tie | 1655 / 2381 ms | 0 / 0 |
| 17 | ✋ paper | ✋ paper | tie | 1943 / 2589 ms | 0 / 0 |
| 18 | ✌️ scissors | ✌️ scissors | tie | 1925 / 2622 ms | 0 / 0 |
| 19 | ✊ rock | ✊ rock | tie | 1978 / 3246 ms | 0 / 0 |
| 20 | ✋ paper | ✋ paper | tie | 1846 / 2383 ms | 0 / 0 |
| 21 | ✌️ scissors | ✌️ scissors | tie | 1829 / 2684 ms | 0 / 0 |
| 22 | ✊ rock | ✊ rock | tie | 1885 / 2310 ms | 0 / 0 |
| 23 | ✋ paper | ✋ paper | tie | 1798 / 2582 ms | 0 / 0 |
| 24 | ✌️ scissors | ✌️ scissors | tie | 1772 / 2583 ms | 0 / 0 |
| 25 | ✊ rock | ✊ rock | tie | 1725 / 2701 ms | 0 / 0 |
| 26 | ✋ paper | ✋ paper | tie | 1792 / 2657 ms | 0 / 0 |
| 27 | ✌️ scissors | ✌️ scissors | tie | 2416 / 3694 ms | 0 / 0 |
| 28 | ✊ rock | ✊ rock | tie | 1818 / 2495 ms | 0 / 0 |
| 29 | ✋ paper | ✋ paper | tie | 1827 / 2688 ms | 0 / 0 |
| 30 | ✌️ scissors | ✌️ scissors | tie | 1678 / 2850 ms | 0 / 0 |
| 31 | ✊ rock | ✊ rock | tie | 1875 / 3460 ms | 0 / 0 |
| 32 | ✋ paper | ✋ paper | tie | 2215 / 2848 ms | 0 / 0 |
| 33 | ✌️ scissors | ✌️ scissors | tie | 1761 / 2654 ms | 0 / 0 |
| 34 | ✊ rock | ✊ rock | tie | 2225 / 2649 ms | 0 / 0 |
| 35 | ✋ paper | ✋ paper | tie | 1828 / 2321 ms | 0 / 0 |
| 36 | ✌️ scissors | ✌️ scissors | tie | 1858 / 2362 ms | 0 / 0 |
| 37 | ✊ rock | ✊ rock | tie | 1880 / 2563 ms | 0 / 0 |
| 38 | ✋ paper | ✋ paper | tie | 2292 / 2869 ms | 0 / 0 |
| 39 | ✌️ scissors | ✌️ scissors | tie | 1789 / 2379 ms | 0 / 0 |
| 40 | ✊ rock | ✊ rock | tie | 1770 / 2524 ms | 0 / 0 |
| 41 | ✋ paper | ✋ paper | tie | 1807 / 2631 ms | 0 / 0 |
| 42 | ✌️ scissors | ✌️ scissors | tie | 1822 / 2669 ms | 0 / 0 |
| 43 | ✊ rock | ✊ rock | tie | 1888 / 2955 ms | 0 / 0 |
| 44 | ✋ paper | ✋ paper | tie | 1925 / 2466 ms | 0 / 0 |
| 45 | ✌️ scissors | ✌️ scissors | tie | 2056 / 3234 ms | 0 / 0 |
| 46 | ✊ rock | ✊ rock | tie | 2153 / 2840 ms | 0 / 0 |
| 47 | ✋ paper | ✋ paper | tie | 1846 / 2898 ms | 0 / 0 |
| 48 | ✌️ scissors | ✌️ scissors | tie | 1788 / 2752 ms | 0 / 0 |
| 49 | ✊ rock | ✊ rock | tie | 2070 / 2652 ms | 0 / 0 |
| 50 | ✋ paper | ✋ paper | tie | 1901 / 2344 ms | 0 / 0 |
What actually happened
The question was whether the bigger model plays better. The honest answer from these three matches is that the prompt format mattered far more than the model.
In run A, where Haiku was still reasoning for thousands of tokens per round and Sonnet was answering instantly, Haiku came out ahead. In run B, with reasoning switched off on both sides, Sonnet came out ahead. Neither margin is large enough over 40 and 57 rounds to mean much on its own.
Run C is the result that is not close. Moving from a single narrated history to a real conversation, changing nothing else, produced fifty ties out of fifty. Both models locked onto rock, paper, scissors, rock, paper, scissors and neither deviated once for the entire match. The two move sequences are character-for-character identical.
The likely reason is where the history sits. In runs A and B a player's own past moves were narrated back to it as text written by someone else. In run C they are its own assistant turns, and continuing a pattern you can see yourself having authored is a much stronger pull than continuing one you were merely told about. With reasoning disabled there is nothing to interrupt that pull, so both players fell into the same cycle and stayed there.
Which means the experiment as designed cannot punish habit-forming models the way it was supposed to. Showing a model the full history is meant to let its opponent exploit any pattern. Instead, in the most conversational format, the history is what created the pattern, and both sides adopted the same one at the same time.
How to read the numbers
- Countered opponent's last move is the classic reflex: playing whatever beats what the other side just played. A high number means the model is easy to predict one step ahead.
- Cycled R→P→S counts rounds where a player advanced its own move one step around the wheel, the most common human habit too.
- Ties are high whenever both players fall into the same rotation at the same time.
Raw data and code: rps.sqlite, rps_nothink.sqlite, rps.py, build_site.py