All articles
February 1, 2025 5 min read

Stop anthropomorphizing your agents (especially behind the scenes)

Giving your assistant a friendly name in the UI is fine. Designing your architecture as if the model thinks, remembers, or intends anything is a bug waiting to page you.

Written forEngineeringProduct
AI AgentsOpinionDesign

A large language model is a function that predicts the next token. It does not think, want, remember, or understand — it produces plausible continuations. Anthropomorphizing it in the UI is marketing, and often good marketing. Anthropomorphizing it in your architecture is a bug that will eventually page you at 2 a.m.

Where the thinking goes wrong

  • "It'll remember the earlier step." — It won't. The model is stateless; memory is whatever you put back into the context window. If you didn't store it, it's gone.
  • "It understands the goal." — It pattern-matches against the goal. Anything you leave implicit, it will fill in with something plausible and occasionally catastrophic. Specify explicitly.
  • "It knows when it's unsure." — Confidence-sounding words are not calibrated confidence. Measure uncertainty with evals and checks, don't trust the model's own vibe.
  • "It wouldn't do that — that'd be wrong." — It has no morality and no stake in the outcome. If you don't want an action to be possible, don't hand it the tool. Guardrails, not good intentions.

Design for a stochastic function, not a colleague

Treat the model as what it is: a powerful, unreliable function. Make state explicit in your system, validate every output, assume any call can fail or go off the rails, and build the retries and fallbacks accordingly. Every time you catch yourself saying "it'll just know," replace the sentence with a schema.

Anthropomorphize the UX, engineer the backend

This isn't about being a killjoy. A warm persona helps users trust and use the product — keep it. Just don't let that persona leak into your engineering. Behind the curtain there is no assistant, only inputs, outputs, validation, and control flow. Design it that way and it holds up.

Give it a friendly name for your users. Give it none of your trust in your code.
Building something with LLMs?
I help teams ship GenAI that’s reliable and cost-efficient.
Let’s talk