Xavier Fok
← All writing

· 5 min read

What I check before trusting an AI answer

A practical checklist from someone running AI agents in production every day: how I decide when an AI answer is safe to act on and when it needs verification.

I run AI agents against real infrastructure every day. They touch servers, edit code, send messages, and make decisions I then have to live with. That has forced me to get specific about a question most people answer with a shrug: when do you actually trust what the model says?

The honest answer is that I don’t trust AI output as a category. I trust specific answers, for specific reasons, after specific checks. Here’s what those checks actually look like.

Ask what the model could have known

Before I look at the content of an answer, I look at its shape. Large language models generate text by predicting likely tokens based on training data and whatever context you gave them in the conversation. They don’t query a live database unless you’ve explicitly wired them to a tool that does, and they don’t know what happened after their training cutoff unless it’s in front of them right now.

So the first check is boring but decisive: could this model plausibly know this? If I ask a coding agent about a library’s current API and it hasn’t read the actual source or docs in this session, it’s reconstructing from pattern memory. That memory might be right. It might also be describing a version from two years ago, or blending two different libraries that share a similar name. I’ve watched this happen with package APIs that changed function signatures between versions. The model wasn’t lying, it was just pattern-matching to what training data made most likely.

The fix isn’t to distrust the model generally. It’s to notice when a question depends on current, specific, or obscure facts, and treat those answers as drafts rather than conclusions.

Separate reasoning from lookup

A useful split I use constantly: is this a reasoning task or a retrieval task?

Reasoning tasks are things like “does this function have a race condition” or “what’s the tradeoff between running this locally versus in the cloud.” The model is working through logic using information already in front of it, and I can check its reasoning by reading it, the same way I’d check a colleague’s argument. If the logic holds up step by step, I don’t need external verification, because the model isn’t claiming a fact I can’t audit, it’s making an argument I can follow.

Retrieval tasks are things like “what does this config file currently say” or “what’s in this API response.” For those, I don’t want the model recalling anything. I want it reading the actual file or calling the actual tool. This is exactly why I wire agents into MCP tools that hit real systems instead of letting them describe systems from memory. An agent that reads your actual nginx config and tells you what’s in it is doing something fundamentally more trustworthy than one recalling what nginx configs typically look like.

When an answer mixes both, which is most of the time, I mentally tag each claim as one or the other before deciding how much scrutiny it needs.

Check for a paper trail

If an agent tells me it changed something, I want to see the change, not just the claim that it happened. This is a habit from running agents that edit files and touch live servers: I check git diffs, I check command output, I check the file itself. Language models can describe an action with total fluency whether or not it actually completed successfully. A tool call can fail, return a partial result, or get silently skipped, and the model’s summary of “done” can still read as confident and clean.

This matters more as agents get access to more tools. The gap between “the model said it did X” and “X actually happened” is exactly where production incidents live. I’ve had automated pipelines report success while shipping broken output, because the step that reported status wasn’t checking the actual result, just whether the process ran without throwing an error. Trusting a summary instead of the underlying evidence is how that kind of silent failure survives.

Watch for confident specificity

The failure mode that costs the most time isn’t a vague, hedged answer. Those are easy to flag. It’s a wrong answer delivered with the same fluency and specific detail as a correct one. A model can produce a plausible-sounding version number, a plausible-sounding function name, or a plausible-sounding statistic, and there’s no tonal difference between that and a verified fact. Confidence in the writing is not evidence of confidence in the underlying knowledge, because the model isn’t tracking its own certainty the way a person would.

My rule here is simple: the more specific and falsifiable a claim is, the more I want a source for it before I act on it. A vague summary of a general concept needs little verification, because being roughly right is usually fine. A precise number, a specific claim about what a tool costs, a specific claim about what a law requires, or a specific technical detail I’m about to build on top of gets checked against something outside the model, every time.

Match the check to the stakes

I don’t verify everything equally, and I don’t think anyone should. If I ask a model to summarize a long log file so I can skim it faster, and it gets a minor detail wrong, the cost is low and I’ll probably notice while reading the actual thing anyway. If I ask a model to write a script that will run unattended against production data, the cost of a subtle error is much higher, and I read that script line by line before it runs, the same way I’d review a pull request from a new engineer.

The mistake I see people make is applying one trust level to everything, either blanket skepticism that makes AI tools useless, or blanket acceptance that eventually produces a bad surprise. The better approach is to price the check to the downside. Low-stakes, easily-reversible, easily-checked-later output can move fast. Anything that’s expensive to undo, hard to verify after the fact, or that other decisions will get built on top of, gets read carefully before I trust it.

Treat the model like a fast, uneven collaborator

The mental model that’s worked best for me is to treat AI output the way I’d treat a draft from a very fast, very well-read collaborator who is sometimes wrong in ways that are hard to detect on the surface. I don’t refuse to use their drafts. I also don’t publish them unread. I check the parts that matter, I trust the parts I can verify against something real, like a file, a log, a command result, and I stay skeptical of specific claims that aren’t backed by anything in front of either of us.

That’s not a dramatic conclusion, and it’s not meant to be. Running AI in production isn’t about deciding whether to trust it. It’s about building the habit of checking the right things, quickly, so the tool stays useful instead of becoming a liability.

If you want to see how this plays out in actual automation, agent setups, and the local-versus-cloud tradeoffs that come with running AI day to day, take a look around the rest of the site.

Get new guides and videos first — join the Telegram channel.

Keep reading