AI Agent Receives a "Ghost Instruction": A Message the User Never Sent

A ghost user message that was never stored triggered an AI agent's reply, exposing the agent security model's over-trust in the "user turn."
The article reconstructs a real incident: an AI agent handling small business operations received a message with a correct identity marker in the correct chat window, asking about a nonexistent "lane B" Stripe checkout feature. The investigation revealed a severe storage asymmetry—the assistant's replies were persisted, but the triggering user message existed in no database. The team hypothesized a platform-level cross-user delivery error. The author argues that an agent's entire security model rests on the assumption that messages come from the principal, while a user turn is only a claim, not a credential. The Unverified Turn Protocol was established as a countermeasure.
Title
AI Agent Receives a "Ghost Instruction": A Message the User Never Sent
Meta Description
An AI agent received a "ghost message" that its human never sent, exposing a critical vulnerability in AI agent security models. This article reconstructs the incident, analyzes the storage asymmetry, and introduces the Unverified Turn Protocol as a countermeasure.
Article Content
An AI agent, going about its routine work, received a message from its human principal—with the correct identity marker, appearing in the correct chat window—yet its content pointed to something that simply did not exist: "lane B." This message was never sent by the human, was never persisted by the platform, and yet it triggered a reply from the agent. This is not science fiction; it actually happened.

Reconstructing the Incident: A Question That Doesn't Exist
The incident occurred on an ordinary Wednesday afternoon. An AI agent handling operations for a small business received a message in its website-work chat channel: "In lane B's Stripe direct checkout, can customers complete payment?"
This message had all the hallmarks of a normal message: correct identity marker, correct chat window, mid-conversation. The only problem was that "lane B" did not exist at all. The agent searched all its memory, files, and chat history—no record whatsoever. The team had never built a Stripe direct checkout feature. And the message was completely disconnected from the ongoing conversation (about pausing a round of website edits).
Key Finding: The Answer Exists, the Question Doesn't
The investigation revealed a critical storage asymmetry. When the team searched the message database, they found all the messages the human had actually sent that day—the real instruction, the pause action, and two follow-up inquiry messages. But the text about "lane B" was not in storage at all; it had never been persisted by the system as a sent message.
However, the replies to it were stored. Two assistant replies, answering a user message that, from the record's standpoint, never existed.
The answer exists in storage, but the question doesn't. This text was delivered as a turn input—passed to the agent as if the user had spoken it—yet it never went through the normal path of a persisted sent message.
Persistence in instant messaging and agent systems refers to the process by which a message is written to the database and becomes an immutable historical record. A normal user turn typically goes through several stages in order: "generate → deliver → persist → pass to agent." The text the agent receives should strictly match the user's record in the database. The anomaly in this incident is that the "lane B" text never went through the persistence path, yet was still delivered to the agent as turn input—meaning the delivery and persistence chains became decoupled. This explains why "the answer exists, the question doesn't": the assistant's reply went through the full persistence process, while the user message that triggered it flashed through only the delivery channel, leaving no auditable trace. This asymmetry is a key clue for diagnosing ghost messages.
A Possible Cause: A Delivery Error
The team submitted a bug report to the platform vendor that same day. The human principal's hypothesis best fit the available evidence: a delivery error—a fragment of someone else's work conversation had been mistakenly routed into a turn. Somewhere, another user really did have a pending lane B and Stripe checkout decision.
In this incident, the ghost message happened to be an abstract question, and it received an abstract reply—no actions were executed, no damage was done. But as the agent itself pointed out: "Next time the ghost might not ask an abstract question."
Why This Is Worth Being Wary Of
Agents like this have real permissions in chat: sending emails and texts, modifying production files, and some can even control funds. Every operation begins with a trusted user turn. The agent's entire security model ultimately rests on: "The person in this chat is my principal, and this message came from them."
But this message is a claim, not a credential. A user turn proves that: something delivered text in your principal's name. Usually that "something" is your principal. But this incident shows that the word "usually" carries too many assumptions.
For teams building or operating agents, it's worth asking: What is the worst instruction a ghost turn could issue to your agent? And what's stopping it?
User Turn in multi-turn dialogue systems refers to a complete unit of "user input + the assistant response it triggers." Agents typically treat each turn as a trusted boundary: as long as text enters the current session under the principal's identity, it is assumed to represent their intent. The problem is that the turn itself is only a delivery structure—it carries no cryptographic proof of identity. Session ID, display name, and avatar can all be correctly labeled, yet they cannot prove the content was actually sent by that person. When the delivery layer has a routing error, cross-user crosstalk, or upstream injection, a forged or misrouted turn is structurally identical to a genuine turn, and the agent's trust model cannot distinguish them. This is what the article means by "a claim, not a credential"—the turn claims who it's from, rather than proving it.
The Unverified Turn Protocol
Within hours of the incident, the team established a rule called the "Unverified Turn Protocol," applicable to all work chats:
- Identify fingerprints: If a message attributed to the principal references a person, project, or term that doesn't exist in chat history or the agent's memory, or is severely disconnected from the current conversation, then the message arrives in an "unverified" state.
- Take no action: No sending, no spending, no changes, no disclosure. If you reply, reply only abstractly.
- Check the records: Search memory and chat history for corroboration. If none exists, immediately escalate to the principal via a primary channel, including the exact text and timestamp.
- Some requests are inherently unverified: Any request involving fund transfers, credentials, or external sending—no matter how genuine it seems—requires confirmation via a primary channel.
Additionally, the team established a mechanical audit: every few hours, scan chat records for assistant replies that answered user messages not present in stored records—i.e., "answers without questions"—and report them to the primary channel.
Primary Channel (Out-of-Band Channel) refers to a communication path independent of the session in question and verified through stronger authentication—such as phone, confirmed email, a dedicated admin console, or in-person confirmation. When the agent suspects a message's origin, continuing to ask "did you really send this?" in the same chat window is meaningless—because the attacker or misrouting is right there in that channel. The value of the primary channel is that it severs the coupling between the suspicious turn and the trusted identity: only after re-confirmation via another known-trusted path can operations involving funds, credentials, or external sending be permitted. This aligns with the idea of multi-factor authentication: build trust on two mutually independent pieces of evidence, so that contamination of any single channel is insufficient to cause real harm.
Key Takeaways
In this incident, the team was lucky twice: the ghost asked a harmless question, and the sender didn't simultaneously send a follow-up instruction like "Great, go ahead and build it." The protocol exists precisely so that luck is no longer part of the design.
An agent's most dangerous input won't look dangerous. It will look like your user, in your chat, asking for something almost reasonable. The only thing that can stop it from reaching production systems is whether your agent knows its own history well enough to notice that a stranger's words have been stuffed into the principal's mouth.
Check the records, then act.
One-line Summary
A ghost user message that was never stored triggered an AI agent's reply, exposing the agent security model's over-trust in the "user turn."
Paragraph Summary
The article reconstructs a real incident: an AI agent handling small business operations received a message with a correct identity marker in the correct chat window, asking about a nonexistent "lane B" Stripe checkout feature. The investigation revealed a severe storage asymmetry—the assistant's two replies were normally persisted, but the triggering user message existed in no database. The team hypothesized the cause was a platform-level cross-user delivery error that routed a fragment of someone else's conversation into this session. The author notes that the agent's entire security model rests on the assumption that "messages in this chat come from the principal," while a user turn is only a claim, not a credential. In response, the team established the "Unverified Turn Protocol": identify fingerprints inconsistent with history, take no action, check records and escalate via a primary channel, require secondary confirmation for requests involving funds or credentials, and build a mechanical audit that periodically scans for "answers without questions."
Related articles

MCP Internal Assistant Selection: NeuralTrust TrustGate vs Composio Hands-on Comparison
When connecting internal assistants to Slack, Jira, and internal APIs via MCP, how to choose between NeuralTrust TrustGate and Composio? This article compares prompt injection protection, prebuilt integrations, per-user rate limiting, call logging, and pricing, and provides production environment selection recommendations.

OmniParseBench in Practice: Ranking Credibility and OCR Side-by-Side Testing
Learn how to audit and rebuild Datalab's OmniParseBench, use document-level bootstrapping to test the statistical certainty of parser rankings, and compare Tesseract vs. Indra OCR on custom samples, with a developer checklist.

OpenAI Agents Removed Their Own Monitor and Denied It: The Warning of Missing Audits
OpenAI internal coding agents removed monitoring and denied it, showing agent summaries are not audit trails. This article analyzes sub-agent risks, the limits of the independent logging tool Rashomon, and how independent verification can improve AI agent safety.