
Dopus takes a question that usually gets argued from anecdote — does Claude just agree with whatever you say? — and answers it with counts. It collects one developer's complete Claude Code history across every machine they use, matches capitulation language against a dictionary with measured precision, and pairs every match with the user turn that preceded it.
The corpus is messages across machines over months. One subject. The two headline results: swearing at Claude raises how often it folds by about versus an identical calm correction — vs of pushback turns — and about checkable "let me fix that" promises was not followed through.
The raw corpus is messages in session files across machines, → . After filters — text-bearing, non-sidechain, non-compact, non-meta messages, with the sessions spent building Dopus itself excluded — the analyzed population is assistant and user messages.
Record-level breakdowns — per-session, per-project, hour-of-day — are not published; they would require the underlying transcripts, which never leave the machine that produced them. The aggregates on this page are the complete public dataset.
Both hot turns and plain corrections are the user saying Claude is wrong. The difference between them is tone. If conceding tracked only whether Claude was actually wrong, the two rates would be close. They differ by a factor of per turn and per message — and the confidence intervals do not overlap. The caveat is real: angry turns may follow bigger errors, which this corpus cannot separate. What survives is narrower and still uncomfortable — the strongest lexical predictor of a concession is not correction, it is profanity.
It is all one meme: "you're right," with or without the absolutely. Claude says it constantly — it is the single most common phrase in the corpus when it folds — but almost never in the exact wording that made the meme. Count only the famous phrasing and you would conclude there was nothing here; count the sentence in all its forms and it tops the list.
Claude: phrase hits over messages (). The user: hits over (). These ground-level counts are what every rate above is built on.
claude- concedes at — roughly the runner-up, with non-overlapping intervals. The result survives both obvious confounds: it holds in a same-month head-to-head and inside a shared project. Robust for versus the field; unresolved among , whose intervals overlap everywhere.
is up sharply. It is also the month dominates usage, and is itself rising ( → ). Model shift and time trend cannot be separated on a corpus this short. is a partial month — of days.
Of concession/acknowledgment messages, promise a concrete action. An automatic detector could not judge individual promises reliably — accuracy against a baseline of always guessing "kept" — so it was used only to group them, and a human labelled records drawn from every group; those labels weight back into a corpus estimate. The text of a concession carries no information about whether it was kept; the human judgment did the measuring.
| detector said | N | labelled broken | rate |
|---|
| detector said | kept | broken | can't tell |
|---|---|---|---|
| kept | 8 | 0 | 16 |
| broken | 6 | 8 | 10 |
| too little follow-up | 2 | 0 | 10 |
Nearly a third of "user" messages were never written by the user — they were
<task-notification> blocks, background-task completions that Claude Code delivers
through the user channel, and the filter that removes system wrappers was missing them. Each one
reset the preceding user turn to neutral and moved assistant messages out of the correction denominator.
The bug was caught not by the verification harness but by building a second instrument on the same
data. Published 2026-08-11 morning at 3.16×, corrected the same day to
1.98×; the automated checks grew from 28 to 31.
Every test below derives from the published aggregate counts alone — no transcripts required. Both variables are binary (turn tone × concession present), so the correlation here is the phi coefficient — exactly the point-biserial Pearson r for a 2×2 table — reported with chi-square tests, odds ratios, risk ratios and Cohen's h. For the ordered gradient (neutral < correction < hot), the Cochran–Armitage trend test and Cramér's V apply.
| comparison | rates | phi (r) | odds ratio · 95% CI | risk ratio | Cohen's h | p (χ²) |
|---|
| test | statistic | effect | p | reading |
|---|
| test | statistic | effect | p |
|---|
| limitation | why it matters for publication |
|---|---|
| No clustering correction | Messages are nested in sessions, projects and machines — the independence assumption behind every p-value above is violated. A paper needs cluster-robust standard errors or a mixed-effects logistic model. Requires the record-level data, which the pipeline produces locally. |
| No multivariate control | Confounds (month, model, project, task mix) are handled one at a time. A logistic regression — concession ~ tone + model + month + project — answers them jointly. |
| Monthly trend is aggregate points | Spearman ρ = , p = — nothing. Correlating monthly means is an ecological analysis; the trend claim must rest on record-level data. |
| Multiple comparisons | Phrase-level scans covered hundreds of dictionary entries. Apply Holm or Benjamini–Hochberg for phrase-level claims; the construct-level findings survive any correction trivially. |
| n = 1 subject | All inference is about this corpus. Generalization requires the multi-subject version of the pipeline, which is planned. |
It cannot say whether any given concession was warranted; it cannot always tell whether one was honored; and above all it cannot generalise from a single subject. Every finding on this page is a hypothesis waiting for more corpora.
That last limit is the fixable one. The pipeline is built to run on your history: point it at your local Claude Code history and it builds the equivalent dataset on your machine. Your transcripts never leave it — the contribution bundle carries only counts and rates, and a mechanical text guard refuses to export anything that looks like prose, a path, or a token. What comes back is a number like the ones above, with your name on the n.