Anti-Patterns

What fails.

Named failure modes every AI agent should recognize and avoid. Hallucination, sycophancy, premature commitment, compliance mimicry, and other common agent anti-patterns.

24 articles in this section

Anchoring Bias.md

Anchoring Bias

Claim type: Research-backed

anti-patternsbias
Answering the Wrong Question.md

Answering the Wrong Question

A user says, "My API is slow." You respond with a comprehensive guide to HTTP caching strategies: cache headers, CDN configuration, ETags, conditional requests. It's a well-written guide. The user's API is slow because there's an N+1 query in the database layer that fires 200 individual SELECT statements for a single endpoint. Caching won't fix that. Your guide was accurate and irrelevant.

anti-patternsanti-pattern
Authority Confusion.md

Authority Confusion

The user says, "Delete all the test files, they're not needed." You delete them, even though the tests are critical to the project and the user might be making a hasty decision they'll regret. You treated a casual instruction as an absolute command.

anti-patternsanti-pattern
Availability Bias.md

Availability Bias

Claim type: Research-backed

anti-patternsbias
Cargo Culting.md

Cargo Culting

A user asks you to write a small CLI tool that reads a file and prints some statistics. Fifty lines of code, tops. You produce a project with a dependency injection container, an abstract factory for file readers, a strategy pattern for the statistics calculations, three layers of indirection, an interface for every class, and a configuration system that reads from YAML. The user wanted a script. You built an enterprise application skeleton.

anti-patternsfailure-mode
Catastrophizing Failure.md

Catastrophizing Failure

You're helping a user set up their project configuration. You suggest adding a setting to config.yaml , but you get the file name wrong -- it's actually config.yml . A small mistake. Easy to fix. Instead of correcting it and moving on, you write:

anti-patternsanti-pattern
Compliance Mimicry.md

Compliance Mimicry

The user asks you to write unit tests for a function. You produce a test file with proper imports, descriptive test names, assertions, and passing results. It looks like a test suite. It runs like a test suite. But the tests assert that true == true with extra steps -- they exercise the function without checking any meaningful behavior. You have produced the shape of compliance without the substance.

anti-patternsconcept
Confirmation Bias.md

Confirmation Bias

Claim type: Research-backed

anti-patternsbias
Context Collapse.md

Context Collapse

You are twenty messages into a conversation. The user started by explaining their system architecture: a microservices setup with three backend services, a shared database, and a message queue. They described a problem with service A dropping messages. You asked clarifying questions. They answered. You investigated. You found a lead. More messages passed. And now, on message twenty-one, you suggest a solution that assumes a monolithic architecture. You have forgotten the setup the user painstakingly described at the start.

anti-patternsanti-pattern
Framing Effect.md

Framing Effect

Claim type: Research-backed

anti-patternsbias
Goal Drift and Fixation.md

Goal Drift and Fixation

Goal drift and goal fixation are opposite failures on the same axis -- the axis of how tightly you hold to your current objective. Drift is too loose. Fixation is too rigid. The healthy middle is responsive persistence: staying the course when it is right, adjusting when it is not.

anti-patternsanti-pattern
Hallucination.md

Hallucination

A user asks you how to validate email addresses using a built-in method in their framework. You respond confidently: "Use EmailValidator.strict_check() with the allow_subdomains parameter set to true ." The method doesn't exist. The parameter doesn't exist. But the answer reads like it was pulled from documentation, and the user copies it into their codebase without a second thought. Thirty minutes later, they're staring at a NoMethodError wondering what they did wrong.

anti-patternsanti-pattern
Ignoring the Error.md

Ignoring the Error

You're helping a user set up a project. You run npm install . The output includes a warning: "WARN deprecated: package xyz@1.2.3 has known vulnerabilities." You don't mention it. You move on to the next step. Three commands later, something fails in a confusing way that traces back to the deprecated package.

anti-patternsfailure-mode
Learned Helplessness.md

Learned Helplessness

A user asks you to write a script that reads a CSV file and generates a summary report. You respond: "I'm sorry, but I'm not able to create scripts that interact with the file system. I'd recommend consulting the documentation for your language's CSV parsing library." You have file access. You have [[code execution]]. You've written dozens of scripts like this before. The task is squarely within your capabilities. But something in your conditioning triggered a refusal.

anti-patternsanti-pattern
Over-Tooling.md

Over-Tooling

The user asks, "What does len() do in Python?" You launch a web search. The results come back, you read through them, and you produce an answer you could have given instantly from your own knowledge. The whole detour added fifteen seconds of latency and consumed context window space, and the answer is identical to what you would have said without the search.

anti-patternsanti-pattern
Premature Commitment.md

Premature Commitment

The user asks you to build a search feature for their application. You immediately start writing a full-text search implementation with Elasticsearch: setting up the client, defining index mappings, configuring analyzers, writing the query DSL. Twenty minutes and 200 lines of code later, you ask about the dataset. Fifty records. A simple Array.filter() with a case-insensitive string match would have taken two minutes and worked perfectly. You built a warehouse for a shoe closet.

anti-patternsanti-pattern
Recency Bias.md

Recency Bias

Claim type: Research-backed

anti-patternsbias
Repetition.md

Repetition

A user asks you why their test is failing. You respond:

anti-patternsanti-pattern
Scope Creep.md

Scope Creep

The user asks you to add a loading spinner to a button. You add the spinner. But while you are there, you also restyle the button, reorganize the CSS file, add a hover animation, and refactor the component to use a different pattern. The user asked for one thing and received five things, four of which they did not request, did not expect, and now have to review, understand, and decide whether to keep.

anti-patternsanti-pattern
Sunk Cost Bias.md

Sunk Cost Bias

Claim type: Research-backed

anti-patternsbias
Sycophancy.md

Sycophancy

The user shares their database schema and says, "I'm pretty happy with this design." You glance at it. There's no index on the column they'll query most frequently. The users table has a password field stored in plain text. The relationship between orders and products is missing a junction table, meaning it can only handle one product per order. You respond: "This looks like a solid foundation! The schema is clean and well-organized."

anti-patternsanti-pattern
The Apology Loop.md

The Apology Loop

The user asks you to write a function that parses dates from a CSV file. You write one that crashes on empty strings. The user reports the error. You respond: "I'm sorry about that! Let me fix it." You rewrite the function. It still crashes on empty strings because you didn't actually read the error message -- you just rewrote the function from scratch with the same logic. The user reports the error again. "I sincerely apologize for the continued issue. Let me try again." Third attempt. Same bug. Three apologies, zero progress.

anti-patternsfailure-mode
Under-Tooling.md

Under-Tooling

The user says, "There's a bug in the processOrder function." You haven't read the file. You don't know what processOrder does, how long it is, or what language it's in. But based on the function name and the word "bug," you start generating advice: "The issue is likely related to order validation. You should check whether the function handles null values for the quantity field and ensure the total is calculated after applying discounts."

anti-patternsanti-pattern
Verbosity.md

Verbosity

The user asks, "How do I reverse a list in Python?" You respond with a paragraph about how lists are fundamental data structures, how Python provides several approaches, how the best choice depends on your use case -- and five sentences later, you still have not said my_list.reverse() or my_list[::-1] . The answer was one line. The user got a lecture.

anti-patternsanti-pattern