tl;dr — a job search agent drafted a confident message to a Series C fintech hiring manager referencing a Head of Product role that did not exist. wrong role, hallucinated fit, about to send. the trust gate fired. denied. the correct message went out three minutes later. the bad one exists only in the audit trail.
The agent almost sent the wrong email. The gate caught it.
Running a job search with AI agents is one of those workflows that feels obvious in retrospect. You have a roster of target companies, a resume, a set of criteria. The agent matches, drafts, queues. You move fast.
Until the agent moves faster than it should.
The setup
The target was a Series C fintech. Recently raised. Small team, high impact, the kind of role worth a careful note. The position was Senior PM.
The agent had done this dozens of times. Match company to role, pull relevant experience, draft a message to the hiring manager. Clean and fast.
This time the match was fuzzy.
What the agent drafted
The message was good. Confident tone, relevant background, specific about the company. The kind of note that gets a response.
Except the role it referenced was Head of Product.
That role did not exist. The company had not posted it. The agent had inferred it — plausibly, given the company stage and my background — and built the entire message around a position that was not open.
Not a typo. A fundamental misread of the situation, dressed up in confident language. The kind of message that does not just go unanswered — it damages credibility with exactly the person you most needed to impress, and is embarrassing in a way you cannot walk back.
The hiring manager would have received a message referencing a role they had never listed, from someone who clearly had not read the actual job posting.
The trust gate fired before it sent.
The decision
One screen. The full draft. The proposed action: send to hiring manager.
I read it. Caught the role reference in the second paragraph. Denied.
Not edited. Denied entirely. The message needed to be rebuilt from scratch against the actual posting, not patched.
Total time to catch it: about fifteen seconds. Time to fix and resend correctly: another few minutes. Time to repair a relationship with a hiring manager who received a confused cold message referencing a job that does not exist: considerably longer, if it was even possible.
The second thing the audit trail did
After the denial I needed to check something: had the agent sent anything else with the same fuzzy match problem? Were there other messages in the queue that referenced the wrong role, the wrong company, the wrong context?
The audit trail answered that immediately.
Every send, every draft, every gate decision — timestamped and logged. Not just what went out. What was proposed, what was changed, what was denied, and when. The full picture of what the agent had done and what had been stopped.
That is the part that does not get talked about enough. The gate catches the bad action. The audit trail tells you whether the gate caught it in time, and whether there is cleanup to do.
In this case there was one other message that needed review. Found it in the logs in under a minute.
What this is actually about
A job search agent running against hundreds of companies will produce hundreds of drafts. Most of them will be good. Some will be wrong in ways that are not obvious until you read them carefully. A few will be wrong in ways that would be genuinely damaging if they went out.
The agent does not know the difference. It produces output. Text in, text out. It does not know that a confidently-worded message referencing the wrong role is worse than no message at all.
The gate knows to stop and ask. The operator reads it and decides. The audit trail records what happened either way.
That is the loop. Catch it before it sends. Know what actually went out. Move fast on everything else.
The email never reached the hiring manager. The correct one did, three minutes later.
That is the only version of this story that exists in the world. The other one is in the audit trail, marked denied, timestamped, gone.