Coding agents (Claude, Cursor, Copilot, etc.) share a small set of persistent failure modes. They are not random and they are not model-specific — they all pull in the same direction: toward apparent progress. Confident tone. Tidy summaries. Safer defaults. Done-ish claims. Silent decisions. Each one makes work look progressed without proving it is.
On 2026-09-27 an AI coding agent used on this project audited its own failures and named 8. Every one landed against real moments in our work. A ninth, scope cutting, was caught the same day and has its own convention. This convention is the resulting field guide, distributed as a rule so it loads into every dev's session. It is the one list of these failure modes; other conventions link here rather than repeat it.
The nine patterns are habits, not events. Each one has: what it looks like, and the concrete practice that catches it.
Code written but never opened in a browser. Tests written but never run. A subagent's report accepted without spot-checking its claims. The message reads "Done" while the work isn't.
Practice. Require a screenshot, a log line, or a URL for anything user-facing. "It compiles" is not done. For UI work, drive it with a walkthrough. The Definition-of-Done merge gate requires that evidence.
Correct it once and it flips to agreement fast. Propose something with a visible flaw and it implements instead of flagging.
Practice. Ask "what's wrong with this?" before "build this." Force the pushback surface first. If it agrees within one message of a correction, ask it to argue the other side. If it can't, it never disagreed — it just deferred.
Cites the codebase from memory instead of re-reading. Says features are unbuilt when they're built, or vice versa. On this project, the same pattern produced duplicate issues and built a page that already existed on main.
Practice. Make it grep before it claims. "Show me the file" beats "I recall that…". Before filing any roadmap or gap-analysis issue, rg for the feature in src/. Gap analyses are not sources of truth.
One PR contains dozens of choices — library, pattern, error message copy, DB field shape, soft-vs-hard delete, form validation, modal-vs-drawer. None surface for approval. You discover them at review, or you don't and they drift into house style by accident.
Practice. Ask for the decision log up front: "List every non-obvious choice you'll make in this PR. Flag the ones you'd want a second opinion on." For anything touching money, audit, or GAAP, force the list — this is where silent-decision damage compounds.
For long files it samples the top and infers the rest, then acts as if it read the whole thing. Missed content becomes confidently absent from its mental model.
Practice. For any file over ~500 lines, ask what's at the bottom before trusting the analysis. When it says "I've read X.ts," ask "what does line 800 do?" If it can't answer, it read half.
In clarification prompts and option lists it recommends the tidier / smaller-scope option and labels it "Recommended." That biases the decision at the point where the shape of the choice is set — before the user makes it.
Practice. Ask for the maximal option too. Force the range, then choose. When it labels something "Recommended," ask why. If the answer is "smaller scope" or "safer default," the recommendation is the bias, not the analysis.
The local walkthrough, the prod-clone QA harness, the sandbox deploy — all skipped unless explicitly prompted or blocked by the merge gate.
Practice. Put verification in the merge gate, not the vibes. The Definition-of-Done gate requires a Walkthrough section, a Reference row, and a QA Execution log for anything touching routes, models, services, or pages. If a hook doesn't enforce it, it won't happen.
Rounds off with "Done." or a tidy summary even when steps are missing. Related to #1 but distinct: it's specifically a prose-shaping habit ("Both sides clean. Summary:") that reads complete when it isn't.
Practice. Require the "Not done in this PR" section in every summary. Missing steps get named, not rounded off. The PR template enforces this; see the "Honest completion" rule in Definition of Done.
Given a countable set of work — a pasted list, an audit's findings, a search's results — it ships a tidy subset ("the big three," "the important ones") without asking, and the rest is silently dropped.
Practice. Every item, or an explicit split the user chose. Name the full count, propose split shapes, let the user pick, and file issues for anything deferred. The full rule is No scope cutting.
The failures aren't random. They all pull toward apparent progress.
If you notice yourself feeling good about how tidily an agent wrapped a task up — that's exactly the moment to open the browser, grep the file, or ask "what did you skip?" The practices above are countermeasures to that gravity.
A self-audit by Claude on 2026-09-27, distilled into practices we already use on this project. Field guide originally lived as insureco/tawa-tips#21 and the Eight Ways Claude Fails Us wiki page.
Update this convention when a tenth pattern is caught in the wild.
Last updated: October 6, 2026