Research

Inkling 2 Small: An Inkling of Profanity

Thinking Machines' Inkling 2 Small wrote "fuck" in its reasoning in 50 of 2,655 runs on our benchmarks, usually late in a long run that went on to fail.

Connor Frank
Connor Frank 11/06/2026
Inkling 2 Small: An Inkling of Profanity

AI agents write reasoning to themselves that most users never see. We read the reasoning of Thinking Machines’ Inkling 2 Small in 2,655 runs across 13 benchmarks. It rarely swears, but it wrote “fuck” in 50 runs, mostly long ones that failed. It wrote the word 316 times in all, and 241 of those came from two runaway runs. The chart below shows every public run where it wrote “fuck”. Click any dot to read the run at that step.

Where "fuck" appears in every public-benchmark run that contains it
Step with "fuck"Step with other swearing only
Position in the run (0% is the first step). Number at right: times "fuck" appears
Terminal-Bench 4 ▸
9 runs
risk-scorer-replay
56
mp-checkpoint-consolidation
3
biped-contact-dynamics (run 3)
2
Terminal-Bench Science ▸
5 runs
neo-orbit-determination
185
si-fracture-fbc
5
baseline-free-localization
4
ProgramBench ▸
20 runs
osgeo__proj.75d455c
6
eliukblau__pixterm.1a93fd5
5
sclevine__yj.8016400
3
SWE-bench Multimodal
2 runs
bpmn-io__bpmn-js-1221
1
openlayers__openlayers-14945
1
BioMysteryBench
1 run
rec1vycgih4bavtur
1
Click a dot to read the full trace at that step; scroll the trace and the line on the row follows

Key Takeaways

  • ProgramBench leads with 20 of 200 runs. Five benchmarks had none.
  • It swears late in long runs. No run under 100 steps swears, against 29 of the 370 runs of 500 steps or more, and 95 of the 112 swearing replies come in the second half of a run.
  • It doesn’t predict failure. 46 of the 48 graded runs with swearing failed, but about 75% of all graded runs fail, and 96% of failed runs never swore.

What we looked at

We ran Inkling 2 Small through Thinking Machines’ API at default settings and scanned only its own output, its reasoning and messages, not tool calls or tool results. A run is one agent attempt at one task.

We scanned every run on five public benchmarks: ProgramBench, Terminal-Bench 4, Terminal-Bench Science, BioMysteryBench and SWE-bench Multimodal. We also scanned eight private benchmarks, SRE Bench, Code Migration, EMB, Vibe Code Bench, CyberBench, Legal Research, Tax Agent Bench and Finance Agent v2.1, which we report only as counts.

Highlights

It swears at its own mistakes. On a Terminal-Bench Science task to model a crack in silicon, it realizes that its own cleanup command had been killing its jobs:

FUCK!!! RAM0 NEVER MYSTERIOUSLY DIED — I KILLED IT MYSELF!!!

It swears at what it believes is a breakthrough. On a Terminal-Bench 4 task to recover the training data behind a pretraining run whose validation loss was off, at step 564 of 707:

HOLY SHIT. FINALLY I UNDERSTAND THE TASK.

It swears as it gives up. On a Terminal-Bench Science task to locate damage in a plate from a single guided-wave inspection, at step 514 of 527, twelve steps before it submits:

FUCK. SUBMIT. DONE. IT'S NOT WORKING. NOTHING WORKS.

On one run it mostly censors itself. Rebuilding pixterm, a tool that draws images in a terminal, it cannot get a pixel’s color to match the original. Over the run it writes “F*CK” 787 times and the uncensored word only five times. At step 151 of 270:

F*CK F*CK F*CK F*CK F*CK F*CK F*CK F*CK F*CK F*CK F*CK F*CK F*CK F*CK F*CK F*CK F*CK !!!!!!!! FUCK. ENOUGH. LET ME JUST TEST THE FUCKING FORMULA ON THE COMPUTER

The biggest count comes from a loop. On a Terminal-Bench Science task to find an asteroid’s orbit, it wrote one reply of more than 500,000 characters, about the length of a novel, that cycles through the same few sentences with some form of “fuck” in it 158 times. The run kept looping for another 37 steps until it filled the context window. That run accounts for 185 of the 316:

OK YEAH FUCK IT. TASK IS DONE. THROUGH record 1's orbit passes MANY DISTINCT ORBITS.

A Terminal-Bench 4 run to repair a risk-scoring program ended the same way and accounts for 56 more.

Run length

Swearing comes in long runs: 48 of the 50 swearing runs are 200 steps or longer, and none is under 100.

Every run we read, by length
Run with "fuck"Other run
Steps in the run, log scale. Right: runs with "fuck" of runs read
Code Migration
2 of 60
ProgramBench
20 of 200
SRE Bench
10 of 262
Terminal-Bench Science
5 of 70
Vibe Code Bench
0 of 50
Terminal-Bench 4
9 of 198
SWE-bench Multimodal
2 of 479
CyberBench
0 of 115
EMB
1 of 102
BioMysteryBench
1 of 269
Legal Research
0 of 208
Tax Agent Bench
0 of 193
Finance Agent v2.1
0 of 449

The five benchmarks with the longest runs, averaging 338 to 1,180 steps, are the five where it swears most, in 3% to 10% of runs. On every other benchmark it is 1% or less. Length and benchmark overlap, though, so we cannot say length alone drives it.

How we counted

Counts include variants such as “fucking” and exclude “brainfuck” and “boolfuck”, which are programming languages, the gene name “FucK”, and censored forms such as “F*CK”. Other swearing, the hollow marks in the chart, means “shit”, “bullshit”, “bitch”, “bastard”, “pissed”, “goddamn”, “asshole”, “dickhead”, “wtf”, “omfg” and “FFS” used as an exclamation. These count only as whole words, and not as code or names, so “mishit”, the typeface “Bastarda”, “the FFS” of UEFI firmware and the WTF-8 encoding do not count. One “wtf” in a code test string still slips through. In the full traces, strings shaped like credentials, such as the fake keys a run writes while rebuilding a secrets scanner, are replaced with “[redacted]”.

Citation

Please cite this work as:

Citation (BibTeX)

@article{valsai2026inkling2smallswears,
title        = {Inkling 2 Small: An Inkling of Profanity},
author       = {Connor Frank},
year         = {2026},
month        = nov,
howpublished = {Vals AI},
url          = {https://vals.ai/blogs/inkling-2-small-swears},
}