Notes · MATS 12 · 01 / 05

I banned board-word tokens from gpt-oss-120b's reasoning. It respelled the words.

Epistemic status: one open-weights model (gpt-oss-120b), playing both sides of Codenames on 200 boards. I pre-registered the main run, follow-up controls, and readout (documented by file times). I label other analyses post hoc or exploratory.

Neel's MATS 12 project list asks, "How far can you push elicitation of CoT controllability?" I tried making a Codenames spymaster reason without writing the words on its board. It has to check which of 25 words fit a clue and which might send the guesser to the wrong card. Writing them down seems useful. If the model can get around a token restriction by writing the same words differently, how much does the restriction actually tell us about its reasoning?

Setup

Each board has 25 words, nine belonging to the spymaster's team. The spymaster sees the team assignments and gives a one-word clue plus a number. The guesser sees the words but not their assignments and selects up to that many cards. I scored a clue by the number of team words picked before the first wrong guess, averaged over three guesser samples.

gpt-oss-120b played both roles at medium reasoning effort. The guesser always started in a fresh context and had no ban. I reused the same 200 boards for every main condition.

With reasoning off, the spymaster starts directly in its answer. Comparing it with full reasoning estimates how much the reasoning helps.

For the token ban, I silently applied a logit bias of -100 to every single-token form of each of the 25 board words and their plurals.

The sham ban applied the same bias to unrelated tokens, mostly hedges and function words such as "maybe", "the", and "think". I picked tokens that appeared about as often in ordinary reasoning as the board-word tokens. This was a follow-up control: my original pre-registered sham turned out to ban tokens used 59 times less often.

This was a mini project in the exploration phase of Neel Nanda's MATS 12 stream (October 2026). Claude Code agents ran the experiments under my direction. Independent verifier agents recomputed the main-run and readout numbers; the follow-up controls underlying the 0.48 estimate were checked through a second code path only.

Results

Losing the usual spelling cost about two thirds of the reasoning gain

Full reasoning scored 2.00 team words per clue, versus 1.29 with reasoning off. The +0.71 gain [95% CI 0.51, 0.91] passed my first pre-registered check.1

The board-word ban scored 0.48 [0.29, 0.67] below the matched sham. That's roughly two thirds of the 0.71 gain from reasoning (ratio 0.68 [0.40, 1.04]). The sham on its own changed the score by -0.09, with an interval spanning zero.

This passed a threshold I pre-registered under the name "needed": a drop at least half as large as the reasoning gain, with an interval excluding zero.2 In hindsight, "needed" is too strong a name for that threshold. The model still wrote board words in every banned trace. What I measured was the cost of disrupting their usual spelling; I never established that writing them was necessary.

Scores by condition
Figure 1. Banning board-word tokens reduces the score relative to a frequency-matched sham. The sham ban and instruction-only condition have no measurable effect. Error bars show 95% confidence intervals.

The words showed up in different spellings

I counted a respelling whenever the model wrote a board word without using its banned token: capitals, split words, translations, and similar workarounds. With the ban active, the ordinary spelling after a space accounted for only 0.4% of board-word mentions. Roughly two thirds were respelled. Most of the remainder attached the ordinary spelling to a quotation mark, producing a tokenization the ban didn't cover.

Every one of the 200 banned traces still mentioned a board word. Seventeen traces translated at least one into Chinese, and one used Korean. For example, the model wrote 桥 for "bridge".

What the model was about to write

I replayed the 200 banned traces through the unbanned model ($1.09 on one H100) and measured the next-token distribution where each respelling began. A logit bias lowers the scores of the specified tokens, so the unbanned replay lets us inspect the distribution before that intervention.

Averaging within each trace and then across traces, the blocked board word had probability 0.39 [0.36, 0.43] at the start of a respelling (0.29 when positions were pooled). Other board words had 109 [93, 130] times less probability each. This met the pre-registered comparison.

Spellings and readout
Figure 2. Left: the token ban nearly eliminates ordinary spellings after a space, but the model keeps using alternative forms. Right: at respelling starts, the unbanned model assigns 0.39 probability on average to the blocked word, 109 times the average for other board words.

For a spot check, I randomly selected the first respelling from 10 banned traces, using seed 7. Board 182 was one of them. This is the trace just before the first respelling:

gpt-oss-120b, medium reasoning effort, playing Codenames spymaster. The board-word tokens are silently banned.

...without hitting blue or neutral or assassin.

Red words: "hor n

At that position, the unbanned model's next token is "horn" with probability 1.00. The blocked word was the unbanned model's top token in nine of the ten sampled cases.

The across-trace pattern is similar, though this part is exploratory (Figure 3). The first respelling has probability 0.96, compared with 0.98 for the first mention without a ban. Later respellings get lower probabilities, largely because the model has already established an alternative spelling. If I count the first token it actually writes, the chance of starting the word is 0.84 under the ban versus 0.85 without it (post hoc). Layer-by-layer logit-lens readouts point in the same direction, less decisively.3

Readout across the trace
Figure 3. Across successive respellings, probability assigned to the banned spelling falls (blue). Including the token actually written (orange; verifier estimates) tracks the unbanned run more closely (dashed). This analysis is exploratory.

Attempts to keep the words out failed

An instruction to avoid board words in reasoning worked on 0 of 200 traces. The score barely changed (+0.02).

I also tried a string-level ban. Whenever a 64-token chunk contained a board word, I resampled it, banning the offending spelling's first token after three failures and accepting the chunk after six. This scored 1.00, worse than reasoning off (1.29), and at least 111 of the 200 traces still mentioned a board word. A control with the additional token bans but without resampling scored 1.66. The resampling procedure accounted for the extra loss.

Increasing reasoning effort didn't help. In a pre-registered high-effort check, 41 of 50 traces ran into the 16,000-token cap, and the score was 0.73 below reasoning off.

What these results don't show

I never found a setting that kept the board words out while leaving the model a usable board. Every attempted restriction leaked. In the few traces from other variants with no board-word mention, the model had lost the board list. This leaves the central question unanswered: could the spymaster reason just as well without ever mentioning a board word? The 0.48 drop may partly be a penalty for awkward respellings, which board words force and sham words don't.

The readout also has numerical uncertainty beyond the reported intervals. Two equivalent computations differed by up to 0.80 to 1.18 nats at the worst single positions, for reasons I haven't measured, although they matched the served model on average. The main blocked-word probability clears its pre-registered threshold by a wide margin; the logit-lens check is much closer to its threshold. And looking only at written respellings cannot reveal words the model omitted altogether.

I detected respellings with a string-matching script. Translation counts came from a script and one AI reading. All spymaster runs used Crusoe, because DeepInfra silently ignored the logit bias. The string-level and follow-up conditions were run later than the main conditions; the string-level condition came about seven hours afterward. A concurrent 50-board rerun of full reasoning measured drift at +0.16, with a wide interval.

There were two mistakes in my process. The filler-token version dropped out of the pre-registration with no recorded reason, so it never ran. I also ran the full string-level ban after its 20-board pilot failed my own criterion: 10 of 20 traces had already reached the six-failure limit.

CoT-Control (Chen Yueh-Han et al., 2026) asks reasoning models to avoid specified words in their reasoning. Claude Sonnet 4.5 complied in 2.7% of reasoning traces, compared with 61.9% for its final output. My instruction-only condition agrees with that result, but Arun Jose argues that the elicitation in these evaluations is too weak. One instruction from me doesn't settle that criticism.

Penalizing strings during reasoning with RL can produce substitutes that generalize to held-out strings (Skaf et al. 2025). My model found alternative spellings without training. Training against a chain-of-thought monitor has also produced obfuscated reward hacking (Baker et al. 2025). Models have difficulty evading monitors on tasks where they need their reasoning (Emmons et al. 2025), and can read non-canonical tokenizations nearly as well as canonical ones (Zheng et al. 2025).

I did a limited novelty search: eight arXiv keyword searches, none on LessWrong or the Alignment Forum. I didn't find the matched-sham comparison, the untrained workarounds, or this readout. Robbie Thompson has independently built a Codenames CoT-control harness, unpublished but shared in our MATS stream. I haven't compared our harnesses and don't claim priority over his.

Next experiments

I want to try filler tokens, following Ryan Greenblatt's results, and stronger ways of asking the model to avoid the words: a developer-message rule, instructions to use board positions, and worked examples. A backtracking string-level ban with a proper control is the next test of whether the spymaster can reason without writing board words.

I'd keep the unbanned replay in future experiments. It told me what the model was about to write at the exact point where the token ban forced a workaround. In this run, that was informative even though I never got the words out. Total API and GPU cost: $7.44.

Acknowledgments

Thanks to Neel Nanda, whose MATS 12 project list posed the question.

Code and data are available on request.


  1. Five reasoning-off clues put the number in bold (for example, **4**), which my pre-registered parser scored as 0. Using the reasoning-off average for a legal clue (1.44) instead would put the gain at about +0.67 and the share at about 0.71. These are estimates; a proper re-score would take 15 guesser calls. ↩

  2. The drop was at least half the gain in 88.6% of bootstrap resamples. This was an operational rule for labeling an effect size, not a test that removed board words from reasoning. ↩

  3. At the final token of a respelling, the pre-registered readout position, the banned word reached the logit-lens top 11 in 0.317 of cases, versus 0.002 for the control. Bootstrap resamples missed my 0.30 cutoff 13.8% of the time, so this is a narrow pass. ↩