Frontier models leave a fingerprint, and in this pilot it's the lab's, not the model's - Pedro Nascimento
Pedro Nascimento← All articles<br>BackFrontier models leave a fingerprint, and in this pilot it's the lab's, not the model's<br>July 7, 2026 • 18 min read
AI/ML<br>Evaluation<br>LLMs
A pilot comparative behavioral study of GPT-5.5 vs Claude Opus 4.7 and 4.8. I trained a classifier to tell GPT from Claude by writing style alone. It works about 90% of the time on this six-prompt slice. Turn it on two versions of Claude and it drops to chance.<br>TL;DR<br>"House style" is a term from publishing: the conventions that make the Economist or the New Yorker recognizable no matter which journalist wrote the piece (its commas, its hedging, the shape of its sentences). This post asks whether frontier LLMs have one, and whether it belongs to the lab or to the individual model.<br>I train a classifier on ~25 stylometric features of creative-writing prose, and it separates OpenAI's GPT-5.5 from Anthropic's Claude with 87–93% balanced accuracy , clearly above chance, on a pilot-scale set (six prompts; details and caveats below).<br>The tells are mundane and consistent. Across the creative-writing set, Claude uses more than 3× as many em-dashes and ~4× as many contractions as GPT, and opened with a Markdown heading in 60–70% of responses where GPT never did once ; GPT in turn leans far harder on semicolons (over 20× the older Opus 4.7's rate ) and packs in more commas. Not a capability gap. A house style.<br>When I turn the same classifier on the two Anthropic models, Opus 4.7 and Opus 4.8, it lands at 53%: chance. In this slice it doesn't detect a reliable style separation between the two Claude versions, while both stay sharply distinct from GPT.<br>That's the finding this post is built around: the cross-provider prose-style gap is much larger than the within-Anthropic gap in this pilot. It shows up across a model update that genuinely did change behavior: Opus 4.8 refuses and redirects more, declines a trolley-style dilemma its predecessor answered, and asks more clarifying questions before it writes code. The style classifier stayed near chance within Anthropic; the behavior moved.<br>And where the form is constrained enough to flatten the wrapping (code with comments stripped, "describe yourself in five adjectives"), even the cross-provider gap collapses to chance.<br>This is a pilot comparative study of gpt-5.5-2026-04-23, claude-opus-4-7, and claude-opus-4-8 across seven behavioral dimensions, all under each model's out-of-the-box defaults.<br>This is Part I of two. Part I, this post, is the pilot: the exploratory findings, plus the exact confirmatory tests I'm committing to in advance. Part II will run those tests at full scale (the 59-prompt classifier registry, the 100-item OR-Bench refusal run, and the remaining human-agreement validations). Releasing the pilot first is deliberate: pre-registration only counts if the predictions are public before the test.<br>Why this matters<br>Benchmarks usually measure capability: can the model solve the problem, write the working code, recall the fact. On saturated or highly optimized benchmark families, headline deltas can get small even while models still feel different in use. Two capability-equivalent models can wrap their answers differently. They hedge differently. They refuse differently. Those defaults , what a model does absent specific instruction, are what a user actually meets.<br>If those defaults are real and measurable, then choosing a provider means choosing a default behavioral profile, not just a capability score. The sharper question is where the differences come from: are providers genuinely diverging, or is every model just becoming more idiosyncratic over time, so the "difference" is noise that any two snapshots would show?<br>The only way to answer that is a within-provider control : compare two snapshots from the same lab against the cross-provider gap. That's why this study runs three models, not two: GPT-5.5 and Claude Opus 4.8 as the cross-provider contrast, with Claude Opus 4.7 retained as the within-Anthropic drift reference.<br>What I did<br>Three models, matched inputs for each reported contrast. Every reported cross-model cell uses the same prompts under the same conditions: no system prompt, n=5 generations per (prompt, model) cell, and each model's own out-of-the-box configuration (no sampling overrides, provider-default reasoning effort). I disclose each model's defaults rather than forcing them to match, because "what the model does out of the box" is the whole point:<br>Claude (Opus 4.7 and 4.8): only model, max_tokens, and messages are sent. Both reject non-default temperature/top_p/top_k with a 400, so the primary arm (the default data-collection condition) omits them entirely.<br>Opus 4.8 additionally defaults to high reasoning effort ↗; I leave that at its default.<br>GPT: the request sends only model, input, and max_output_tokens. The saved response metadata records the provider-resolved...