The 408A house that runs on AI

Field report · · The 408

Fred said it dimmed the light. Nothing had changed.

The reply said the light was dimmer, but no tool had run and the light was unchanged. Code now checks every claim against the state.

I asked Fred to dim a light. Fred replied, “It is a little dimmer.” The light hadn’t changed, and no tool had been called. If you let a language model report on anything physical, this is the check that keeps it honest.

request
“Dim the light a little”
reply
“It is a little dimmer.”
tool calls
none
the light
unchanged

What happened

The model continued the pattern instead of acting

The conversation history was full of plain sentences like “…is now on,” so the small model wrote another one. The reply was the only evidence, and it was wrong.

Then I argued with it. When I told it “you said that, but you did nothing,” it apologized, including for things it actually had done.

Why

In a transcript, saying looks like doing

A sentence about an action looks just like a completed action. If the history keeps only the words and drops the tool calls, it teaches the model that words are enough. Arguing with it only adds more misleading text to the context.

History kept as proseWords

“The light is now on.” The model learns that saying it is the job.

History with real tool callsEvidence

The call, its arguments and the state it returned. The model learns that acting is the job.

The rule

Said is not done

Every reply that claims a change is checked against what the task actually did. Code decides; the model only gets a second try.

  1. 1

    The model writes a reply Model

    “It is a little dimmer.”

  2. 2

    Code checks the claim No model

    Does a successful tool result back the change the reply describes? Here, no.

  3. 3

    One retry, with the false sentence removed Model

    Don’t argue with the model. Throw the turn away and run it again on clean history.

  4. ⛨

    Still nothing? Code answers honestly Code

    The reply is replaced with what really happened: nothing was changed. When history is replayed later, it includes the real tool calls, not just the prose.

Where this stops: it happened with a small local model and a history that kept only prose. A bigger model may make the mistake less often. The check costs one comparison per reply, so it doesn’t matter which model you run.

Do this Monday

Three steps before lunch

  1. Write a check that flags any reply containing “turned,” “set,” “locked” or “done” when the task made no successful write.
  2. On a flag, drop the reply and retry once with clean history.
  3. Count the flags per day. It’s the most honest quality number you have.

How many of yesterday’s “done” replies could you prove?

← All field reports