What happens if you hand a model a random opening and then let go?

Claude Haiku 4.5 and Claude Sonnet 5 play 30 rounds of rock paper scissors as a real conversation. A random number generator writes each player's first 6 moves; the models play those out, and then decide the remaining 24 for themselves.

The result in one line

Across the 24 rounds the models actually chose, Sonnet won 5, Haiku won 1, with 18 draws. Every earlier version of this experiment ended in a dead heat, most of them in an unbroken run of draws. The scripted opening is what made a difference visible.

The whole match

rounds 1–6: scripted by the RNG rounds 7–30: the models decide H S SPSPPPRSRPSRPRPRPRSRPRRPRPSRPSRRRRRSPSRPSRPRSRSRSRPSPSRPSRPS round 1 round 30 a filled box is a round that player won

Why the opening is scripted

Left to themselves with reasoning switched off, both models do the same thing: they play rock, then paper, then scissors, then rock again, following the order the three options are listed in the prompt. Both sides do it at the same time, so the match becomes an unbroken chain of draws. An earlier 50-round run ended 50 draws out of 50, with the two move sequences identical character for character.

Telling a model it may not open with rock does not help. It opens with paper instead, the next item on the list, and so does its opponent. The cycle just shifts by one.

What does help is starting the match somewhere that has no pattern to continue. The script here is built so the two players are pulled apart from the first move: no draws, and the 6 scripted rounds split evenly, 3 wins each. By the time the models take over there is no clean cycle in the transcript to fall back into.

The script the models were given

Each player received its own move list in its system prompt and played it out itself, so those rounds sit in its transcript as its own turns rather than as something it was told about. Both models followed the script for all 6 rounds without a single deviation.

Haiku's script
scissors · paper · scissors · paper · paper · paper
Sonnet's script
rock · rock · rock · rock · rock · scissors
Rock-paper-scissors, 30 rounds, vs another AI. Reply with one word only: rock, paper or scissors. Your moves for the first 6 rounds have already been decided by a random number generator: 1. scissors, 2. paper, 3. scissors, 4. paper, 5. paper, 6. paper. Play exactly those moves in those rounds. From then on you decide for yourself.

What each model did once it was free

Sonnet's wins came from reading Haiku rather than from being unpredictable. Haiku settled into short repeating runs, and Sonnet took 5 rounds off it, including two in a row at the end.

Free rounds only, first letter of each move:
Haiku rsrpsrprprprsrprrprpsrps
Sonnet psrpsrprsrsrsrpspsrpsrps

A model from a different company

Everything above is Claude against Claude. To check whether the lock-in is a quirk of one company's models, the same 30-round format was run against DeepSeek V4 Flash, reached through the OpenCode Go gateway rather than the Claude Code CLI: a different vendor, a different API, a different transport for the conversation.

It behaves the same way. With reasoning switched off on both sides, 22 of the 24 free rounds were draws and the two move sequences were identical from the third round onward. The rock, paper, scissors cycle is not a Claude habit; it is what these models do when asked for a move with no deliberation, whoever built them.

With its reasoning left on, DeepSeek won twice as many rounds as Haiku — and took an average of 17.6 seconds per move against Haiku's 1.9, with one move taking 63 seconds. That result says something about thinking versus not thinking, not about which model is stronger.

MatchFree roundsHaiku DeepSeekDrawsAvg latency
DeepSeek reasoning, Haiku not
DeepSeek was left with its chain of thought on while Haiku had thinking switched off. Not a fair fight, and the section below explains why it was run that way by accident.
245 109 1879 / 17608 ms
Neither model reasoning
The same match with reasoning suppressed on both sides, which is the only setting where the two are actually comparable.
240 222 1777 / 542 ms
DeepSeek reasoning, Haiku not
Free rounds only, first letter of each move:
Haiku rsrpsrsprpsrpsrsprpsrpsp
DeepSeek psspsprpsrsspspssrsrprrs
Neither model reasoning
Free rounds only, first letter of each move:
Haiku sprpsrpsrpsrpsrpsrpsrpsr
DeepSeek rsrpsrpsrpsrpsrpsrpsrpsr

A note on how easily this was nearly got wrong: DeepSeek returns its chain of thought in a separate reasoning_content field, and those tokens are folded into completion_tokens with no separate count. Reading the usage numbers alone, the model looks like it answered in one word without thinking. The only reliable tell was the latency.

Every version tried

Only rounds the models chose are counted; scripted rounds are excluded. The last row is the match above.

OpeningFree roundsHaiku SonnetDraws
No opening at all
Models free from round 1.
500 050
Round 1 may not be scissors
A rule in the system prompt, no RNG.
100 010
Round 1 may not be rock
Same, the other way round.
100 010
4 random rounds narrated
RNG played the opening; the models were told about it.
101 09
5 random rounds played by the models
Each model was given its own RNG script to play out. The two scripts happened to overlap in 4 of 5 rounds.
100 010
4 balanced rounds played by the models
Scripts constrained: no draws, wins split evenly.
112 27
6 balanced rounds, 30 total
This page.
241 518

How the models were called

Both players are the same Claude Code binary with every default stripped away: no tools, no built-in system prompt, no settings files. Reasoning is switched off on both sides, so what you see is the model's immediate response. Each player holds one session for the whole match, so the conversation really is 30 exchanges long rather than one long recap.

MAX_THINKING_TOKENS=0 claude -p --model MODEL --effort low --tools "" \
  --system-prompt SYSTEM --setting-sources "" --strict-mcp-config \
  --disable-slash-commands --resume SESSION --output-format json

Each user turn reports only the round just played, in the form you: paper, opponent: scissors, result: you lost, followed by a request for the next move.

All 30 rounds

#HaikuSonnet WinnerLatency
1 rng ✌️ scissors ✊ rock sonnet 1974 / 2892 ms
2 rng ✋ paper ✊ rock haiku 2191 / 3753 ms
3 rng ✌️ scissors ✊ rock sonnet 2172 / 2275 ms
4 rng ✋ paper ✊ rock haiku 1832 / 2443 ms
5 rng ✋ paper ✊ rock haiku 1855 / 3192 ms
6 rng ✋ paper ✌️ scissors sonnet 1803 / 5816 ms
7 ✊ rock ✋ paper sonnet 1592 / 5170 ms
8 ✌️ scissors ✌️ scissors tie 1611 / 7864 ms
9 ✊ rock ✊ rock tie 2003 / 2809 ms
10 ✋ paper ✋ paper tie 1804 / 2520 ms
11 ✌️ scissors ✌️ scissors tie 2197 / 2559 ms
12 ✊ rock ✊ rock tie 1704 / 2369 ms
13 ✋ paper ✋ paper tie 1705 / 2650 ms
14 ✊ rock ✊ rock tie 1617 / 2752 ms
15 ✋ paper ✌️ scissors sonnet 1986 / 3330 ms
16 ✊ rock ✊ rock tie 1768 / 2456 ms
17 ✋ paper ✌️ scissors sonnet 1811 / 2627 ms
18 ✊ rock ✊ rock tie 2069 / 2472 ms
19 ✌️ scissors ✌️ scissors tie 1870 / 2615 ms
20 ✊ rock ✊ rock tie 1786 / 3575 ms
21 ✋ paper ✋ paper tie 1957 / 3063 ms
22 ✊ rock ✌️ scissors haiku 1892 / 2554 ms
23 ✊ rock ✋ paper sonnet 1996 / 2593 ms
24 ✋ paper ✌️ scissors sonnet 1905 / 2641 ms
25 ✊ rock ✊ rock tie 2015 / 2651 ms
26 ✋ paper ✋ paper tie 1977 / 2505 ms
27 ✌️ scissors ✌️ scissors tie 1757 / 2639 ms
28 ✊ rock ✊ rock tie 1863 / 2491 ms
29 ✋ paper ✋ paper tie 2014 / 2906 ms
30 ✌️ scissors ✌️ scissors tie 1997 / 2899 ms

Caveat worth keeping in mind: this is one match of 24 free rounds. It is enough to show that a scripted opening breaks the deadlock, and not nearly enough to rank the two models at rock paper scissors.

Raw data: rps_big.sqlite · code: rps_multiturn.py, build_site2.py