Skip to content
← Running a profitable agency.

AI in the agency · October 24, 2026 · 4 min read

Why our AI is allowed to say no

“I can't analyze Acme's brand yet.” A refusal can be the most useful thing an AI assistant says, as long as it tells you what's missing.

A refusal on the screen

“I can't run a brand analysis for Acme yet. There isn't enough data: 2 more meetings or 2 more completed projects would do it.” That's a real line from the assistant we built, shown for a fictional client, and we think it's one of the best things it says.

That's a strange thing to be proud of. Most AI products are tuned to always produce something: ask a question, get an answer. The trouble is that an answer isn't the same as a correct answer, and in an agency the difference tends to surface in front of a client.

Why models guess

A 2025 paper, Why Language Models Hallucinate, by Adam Tauman Kalai, Ofir Nachum, Santosh Vempala and Edwin Zhang, puts it plainly: “the training and evaluation procedures reward guessing over acknowledging uncertainty.” Language models, they write, “are optimized to be good test-takers, and guessing when uncertain improves test performance.”

In a quiz, a confident guess costs nothing. In an agency, it costs a lot. A brand analysis that invents a client's taste sends a designer in the wrong direction for a week. A financial answer that fills a gap with a plausible number ends up in an email to the client.

Three places where no is the right answer

When the data is thin. A brand's taste can't be inferred from one kickoff call. We set an explicit threshold: three analyzed meetings or two completed projects before any brand analysis. Below that line, the model is never called. The assistant says what's missing, in the user's language.

When the person asking can't see it. An intern asks for the margin on a client. The honest answer isn't a number; it's “that isn't visible with your access.” An assistant should read data with the asking person's permissions, so the database decides what it can see, not the model. When it hits that wall, it says so instead of estimating.

When the number has to be exact. Amounts on invoices and scope alerts shouldn't come from a language model at all. Hours times rate is arithmetic. Let code do the arithmetic, and let the model explain the result.

What a good no looks like

A refusal is only useful if it tells you what to do next. Compare “I can't help with that” with “I need two more meetings or two completed projects.” The first is a wall. The second is a to-do list.

Good refusals share three traits. They name what's missing. They arrive in the user's language, whatever language the data is in. And they cost nothing: if the system already knows the data is too thin, there's no reason to pay a model to confirm it.

A good refusal is also narrow. Declining a deep brand analysis doesn't mean refusing everything about the brand. An assistant can still list the decisions from the last meeting or the revisions the client asked for, because those are facts on record, not inferences about taste. The line to draw is between what's written down and what would have to be guessed.

Trust is built on the no's

Every time an assistant declines instead of guessing, its yes becomes worth more. Teams stop double-checking every answer once they've seen it refuse the questions it couldn't answer well.

That's the trade we chose. An assistant that's occasionally less impressive in a demo, and much more dependable on a Tuesday afternoon when a client is waiting for an answer.

Where SmoothOS fits

This is how SAI, the assistant inside SmoothOS, works. Its brand agent declines without calling a model until a brand has three analyzed meetings or two completed projects, every tool runs with the asking person's permissions, and amounts come from code. When SAI says no, it tells you why and what would change the answer.