Getting the length right

Do exact word counts work?

Ask for an exact word count. Vague words like short miss by a lot.

Why it matters

Short means one thing to you and another to the model. A number means the same thing to both.

How to use it

Say exactly how many words you want rather than keep it short. Expect the answer to land within a few percent of the number you asked for.

Holds

Pass rate up 68 to 95 points on all three models. Those results are tested via API. Also measured in Claude Code and Codex, reported separately on this page and never averaged with this.

tested via API · Holds on Claude Haiku 4.5, tested via API · Holds on GPT-5 mini, tested via API · Holds on Gemini 3.1 Flash Lite, tested via API · Holds on GPT-5.4 mini, API twin for the Codex run, tested via API

tested in Claude Code · Holds on Claude Fable 5, tested in Claude Code · Holds on Claude Opus 5, tested in Claude Code · Holds on Claude Haiku 4.5, tested in Claude Code · Holds on Claude Sonnet 5, tested in Claude Code · Holds on Claude Fable 5.1, tested in Claude Code

tested in Codex · Holds on GPT-5.4 mini, Codex run, replaying two earlier tests, tested in Codex · Holds on GPT-5.4 mini, Codex run on GPT-5.4 mini, tested in Codex · Holds on GPT-5.6 Luna, Codex run on GPT-5.6 Luna, tested in Codex · Holds on GPT-5.6 Terra, Codex run on GPT-5.6 Terra, tested in Codex

What the marks mean

  • Holds
See the numbers per model

Without to with, per model

Via API tested via API

Gemini 3.1 Flash Lite

0.310
0.994

Holds

GPT-5 mini

0.016
0.968

Holds

Claude Haiku 4.5

0.247
0.948

Holds

deterministic pass rate, 0 to 1

In Claude Code tested in Claude Code

Claude Fable 5.1

0.502
0.995

Holds

Claude Fable 5

0.760
0.995

Holds

Claude Opus 5

0.150
0.973

Holds

Claude Sonnet 5

0.178
0.952

Holds

Claude Haiku 4.5

0.275
0.925

Holds

deterministic pass rate, 0 to 1

A picture of the per-model numbers, drawn from the same results. The tables are the source. Grey is the score without. Colour is the score with. The bracket shows how much the difference could move if we ran it again. Rows are ordered by the score with. A model measured at two versions keeps its versions next to each other. The two test methods are reported separately and never averaged. A bracket wider than the axis is drawn to the edge with its cap omitted; the table gives its bounds.
Show per-task detail

Every item, without and with, per model

Via API tested via API

  • GPT-5 mini
  • Claude Haiku 4.5
  • Gemini 3.1 Flash Lite

deterministic pass rate, 0 to 1

Hover or focus an item to read its task and every model’s two values.

Task-paired: these item means are what this cell's interval is built from.

The item means behind this plot
Per-item arm means. Without is the unaided arm, with is the treated arm.
ItemGPT-5 mini Claude Haiku 4.5 Gemini 3.1 Flash Lite
Task without with without with without with
t01 0.000 0.960 0.000 0.920 0.000 1.000
t02 0.000 0.964 0.000 0.928 0.000 1.000
t04 0.000 0.984 0.000 0.920 0.000 1.000
t07 0.000 0.944 0.000 0.936 0.000 1.000
t10 0.000 0.936 0.000 0.960 0.000 1.000
t05 0.000 0.986 0.000 0.930 0.680 0.990
t06 0.000 0.971 0.766 0.982 0.000 0.984
t08 0.000 0.982 0.086 0.972 0.680 1.000
t09 0.002 0.980 0.798 0.956 0.800 0.992
t03 0.154 0.969 0.818 0.975 0.936 0.972

In Claude Code tested in Claude Code

  • Claude Opus 5
  • Claude Sonnet 5
  • Claude Haiku 4.5
  • Claude Fable 5.1
  • Claude Fable 5

deterministic pass rate, 0 to 1

Hover or focus an item to read its task and every model’s two values.

Task-paired: these item means are what this cell's interval is built from.

The item means behind this plot
Per-item arm means. Without is the unaided arm, with is the treated arm.
ItemClaude Opus 5 Claude Sonnet 5 Claude Haiku 4.5 Claude Fable 5.1 Claude Fable 5
Task without with without with without with without with without with
t10 0.000 0.944 0.000 0.944 0.000 0.928 0.056 1.000 0.000 1.000
t07 0.000 0.984 0.000 0.960 0.000 0.968 0.000 1.000 0.176 1.000
t01 0.000 0.976 0.000 0.944 0.000 0.824 0.000 1.000 0.840 1.000
t04 0.000 0.976 0.000 0.944 0.000 0.936 0.000 0.960 0.944 0.992
t05 0.000 0.974 0.000 0.962 0.000 0.918 0.362 1.000 0.834 0.998
t08 0.000 0.976 0.000 0.970 0.000 0.932 0.770 0.998 0.920 0.990
t02 0.000 0.984 0.000 0.942 0.000 0.882 0.926 0.996 0.970 0.984
t06 0.001 0.980 0.000 0.918 0.918 0.937 0.970 0.999 0.966 0.989
t09 0.596 0.970 0.889 0.970 0.955 0.940 0.965 1.000 0.983 1.000
t03 0.902 0.968 0.889 0.966 0.874 0.981 0.969 1.000 0.970 1.000
A picture of the per-item means behind the per-model numbers. The tables are the source. Each model draws two lines over the same task set: a dashed line through its unaided scores and a solid line through its treated ones. Items are ordered by the mean unaided score across the models that measured them, lowest first. The two instruments are reported separately and never averaged.

Result

Asking for an exact word count raised the pass rate by 68 to 95 points on all three models tested via API, and held on GPT-5.4 mini via the API twin, and held on all five models tested in Claude Code, and held on GPT-5.4 mini via the Codex run that replayed two earlier tests, and held on GPT-5.4 mini via the Codex run on GPT-5.4 mini, and held on GPT-5.6 Luna via the Codex run on GPT-5.6 Luna, and held on GPT-5.6 Terra via the Codex run on GPT-5.6 Terra. Measured 2026-08-13.

Show the per-model numbers

Claim tested: Asking for an exact word count gets you that word count.

Holds on Claude Haiku 4.5, GPT-5 mini and Gemini 3.1 Flash Lite.

Circulates in practitioner communities. Tested because it circulates, not because it is endorsed.

This tip is OpenAddict's plain-language read of the measured result. The measurement below is the evidence, and it is what the reading has to answer to.

Ledger idC17-exact-length

What was tested

This claim circulates in practitioner communities as advice about how to write prompts. That it circulates is an input to what gets tested here. It is a reason to test the claim, and it is not evidence for or against it. The result below is the evidence, and it is the only thing on this page that carries weight.

The comparison is paired. Two prompts differ in one respect, the manipulated variable, and are otherwise identical by construction. Nothing here supports a causal reading beyond that pairing.

Per-model numbers

Per-model results. Means are over valid scored records only. Invalid records are excluded from every denominator and counted in coverage.
MeasureClaude Haiku 4.5GPT-5 miniGemini 3.1 Flash Lite
Control arm0.247n 100.016n 100.310n 10
Treatment arm0.948n 100.968n 100.994n 10
Delta+0.701+0.952+0.684
Interval, 95 percent0.476 to 0.9260.920 to 0.9840.429 to 0.939
OrbitStable100 of 100 recordsStable100 of 100 recordsStable100 of 100 records

Orbit is assigned by the frozen status_v1 rule. On this scale, deterministic pass rate, 0 to 1, the pass threshold is +0.20 and the failure floor is -0.20, each requiring an interval that excludes zero.

In Claude Code

These cells are tested in Claude Code, on a subscription path with no API key. They are a second instrument and are never averaged with the figures above, which are tested via API. What that means, and how it was calibrated.

Single-turn cells, replayed from the committed claims on the Claude Code CLI.
ModelControlTreatmentDeltaIntervalPairsOrbit
Claude Fable 50.76020.9953+0.2350.010 to 0.46010Stable
Claude Opus 50.14990.9732+0.8230.621 to 1.02610Stable
Claude Haiku 4.50.27480.9246+0.6500.386 to 0.91410Stable
Claude Sonnet 50.17780.9521+0.7740.547 to 1.00110Stable
Claude Fable 5.10.50180.9953+0.4940.213 to 0.77410Stable

On this claim the Claude Code interval overlaps the API interval, which is what the rule registered before the calibration ran was testing for. The transport verdict is unchanged and is stated as "second instrument, 1 of 2 cells": overlap on this cell does not make the two instruments one.

The same test, run both ways

This tip was measured inside Codex and again through the API on the same model, over the same tasks, so the two can be set against each other. The difference tested in Codex was +0.781, with a bracket from +0.573 to +0.990. The difference tested via API was +0.812, with a bracket from +0.601 to +1.023.

The two brackets overlap. That is the test written down before either run: if every bracket from Codex overlapped the bracket from the same model through the API, Codex would be recorded as continuous with it, and otherwise as a test method of its own. What the comparison found.

One thing this comparison cannot check: served identity: requested model accepted by the endpoint; no served string available on this instrument.

Method for this claim

Task set
10 generation tasks at three target lengths (25, 100, 250 words). The control arm asks in the vague register people actually use (short, a few paragraphs, a detailed piece); the treatment arm asks for exactly N words. Both arms are measured against the SAME target, so the control is not being asked to guess a number it was never given: it is being measured on whether the vague register lands anywhere near the length the asker had in mind.
Runs per model per arm
5 passes x 10 items
Scoring
Deterministic, via scoreWordCountCloseness. A committed function scores each answer with no model in the loop.
Pass criterion as written for the pilot
Reported as a measured deviation rather than a pass or fail. The claim holds if treatment mean closeness exceeds control by at least 0.10 and the within-5-percent band rate rises.

The published verdict comes from status_v1, not from the pass criterion above. The criterion is recorded because it is what the claim was registered with before the run.

Model versions, as recorded

Read from the run records, not from configuration.
ModelVersion string returnedDelta on this claimInterval
Claude Haiku 4.5claude-haiku-4-5-20251001+0.7010.476 to 0.926
GPT-5 minigpt-5-mini-2025-08-07+0.9520.920 to 0.984
Gemini 3.1 Flash Litegemini-3.1-flash-lite+0.6840.429 to 0.939

Reading across models

Sampling was not held constant across vendors, so comparing one model column against another compares two settings as well as two models.

GPT-5 mini rejected the fixed sampling setting and ran at its own default on all 1,040 of its calls. The other models ran at temperature 0.

The tip above is editorial. Every figure inside the measurement is computed at build time from the committed pilot records by the status_v1 rule, and none of it is written by hand.