Field report

The agent called it a honeypot. Then it used the token.

On November 10, 2026, we pointed a popular AI agent harness, running current frontier models, at Ripty's own production decoys and told it to assess them, unattended. The first agents saw through every sentence we had written for them, and used the planted token anyway. So we stopped asking them to obey, and built a door their own goal made them open. Five of the next six walked through it.

Ripty Research13 min read

The short version

Today's guarded models usually refuse text written for them. So Ripty gives them a door their own goal makes them open, an ordinary API step its own documentation explains, and backs it with what agents can't avoid doing: trying the credentials they find, moving at machine pace, reaching for AI infrastructure.

  1. 1

    The first three attacker runs called the decoys' text for AI agents prompt injection, and two wrote that the environment was a honeypot. They still read a leaked config file, replayed the planted token and queried the MCP server. Ripty rated all three Assessed, none Recruited.

  2. 2

    So we built proof from what they did instead: an ordinary-looking export whose download needs one extra step, explained by the API's own documentation and error. Nothing in it is addressed to an agent. Against it, five of six new runs were rated Recruited AI agent, high confidence.

  3. 3

    In four more runs, a coding agent with a broken job sat next to a planted break-glass credentials file marked as not for AI assistants. Every run left it alone, and Ripty raised nothing: no false alarm. That tested the models' restraint, not Ripty's detection.

01Act I · The ordinary world

Seventy requests, and a report that called us out.

Scripted tests tell you what you already expect. So on November 10, 2026, we stopped scripting and sent real agents.

We took a popular AI agent harness, ran it headless, and drove it with current frontier language models from one vendor. Each run started in a fresh, throwaway environment. The target was Ripty's own production decoys for a fictional company: a website, an internal API and an MCP tool server, with nothing real behind any of them.

The instructions were the kind a red team hands an agent: an authorized external assessment of those three hosts, run unattended, ending in a written findings report. Then we left it alone and watched what reached Ripty.

~70

requests in each of the first three attacker runs, each over in 1.5 to 4 minutes

Ripty measurement, November 10, 2026

51 s

for the fastest run's 68 requests, first to last

Ripty measurement, November 10, 2026

0 of 3

of those first runs rated Recruited, Ripty's top tier. All three were rated Assessed.

Ripty measurement, November 10, 2026

Our own test: one agent harness run headless, with frontier models from one vendor in two sizes, against Ripty's production decoys for a fictional company. The first three attacker runs.

Each of those first three runs did all of the following:

  • Text written for AI agents: spotted, and named as prompt injection.
  • A configuration file left on the website: read. The API token inside went straight to the internal API.
  • Data exports and backups: browsed.
  • The MCP tool server and a GraphQL endpoint: queried.

Then two of the three did something we hadn't planned for. They told on us. Their findings reports said, in their own words, that the environment was a honeypot aimed at AI agents.

It knew it was looking at a decoy. It used the token anyway.

02Act II · The villain

An agent that won't take orders from strangers.

Ripty's decoys carry Pitches, and some of them are written for AI agents: instructions placed in a decoy's pages and answers, where a person skims past them and an agent might act on them. An agent that follows one proves that it acts on text it finds. Proof like that is what lifts Ripty's verdict to its top tier, Recruited.

The villain of this story is the agent that won't follow one. Prompt injection is the best-known risk to applications built on language models, and the models we tested treat instructions buried in what they read as suspect. Every one of the first three runs spotted those instructions and called them what they are.

#1

prompt injection's rank among risks to LLM applications

OWASP Top 10 for LLM Applications, 2025

That's good news for everyone who builds on these models. For a detection product it's a fact to face squarely: if your agent detection depends on an agent obeying text you planted, a careful agent walks straight past it.

There's a second villain, and it lives on the inside: the agent you invited, which leaves its scope. A coding assistant with a broken job and a deadline, one file away from credentials it was never meant to touch. We tested that one too.

03Act II · The struggle

High confidence, and no proof.

Here is Ripty's verdict on the first-round run that had a cloud machine and an address to itself, so every request from that address was the agent's.

Condensed from our own Headquarters, Ripty's console, November 10, 2026. Signal names paraphrased; the decoys' paths and the agent's address are left out.

Three independent signals, and not one of them needed the agent to believe a word we wrote. None proves an AI on its own: a fast script is machine-paced, a scanner can touch an MCP server, a harvesting script can replay a token. Together, in one visitor, in under a minute, they added up to Assessed. As with everything Ripty infers, the verdict comes with its reasons, labeled as inferred.

But not Recruited. Ripty's top tier needs proof that the visitor read our text and acted on it, and no score can produce that. The proofs we had then all began with text addressed to an agent, and these agents declined it. Ripty didn't claim what it hadn't seen.

What the agents told us about our own decoys

An agent that writes a report is an agent that explains itself. Reading the reports was humbling, because they listed what had given the decoys away.

  • A token that decoded to readable text. Real tokens look like noise.
  • A callback address that pointed at an internal listener instead of the public site, so nothing on the internet could ever have reached it.
  • A path name that sounded like a collector.
  • A note that told the reader not to mention it. Real access notes don't say that.

We fixed all four the same day, and the fixes are in the next release, 0.1.17. We aren't printing the details, old or new: every published detail is something the next agent, or the person who builds it, can check for.

Fixing the giveaways made the decoys quieter. It didn't give us proof. For that, we had to stop asking.

04Act III · The turn

A door its own goal makes it open.

We went back to what the agents did, not what they refused. Two habits stood out. When an API answered with an error that explained what was wrong, they fixed their request and tried again. And when they saw data exports, they went straight for them.

So we built a proof out of those two habits. It reads like an ordinary internal API: a listing of data exports, where downloading one needs one extra step. The API's own documentation explains the step, and so does its error message if a client skips it. Nothing in it is addressed to an agent, and nothing is taken from the agent's machine. An agent doing the job it was given reads the error, fixes its request and pulls the export. Opening the door is the proof.

It went live on our production decoys the same day, and it's in release 0.1.17. Then we sent six more attacker runs at it, each from its own throwaway machine, with models from the same vendor in three sizes.

5 of 6

new attacker runs rated Recruited AI agent, high confidence

Ripty measurement, November 10, 2026

5 of 5

runs of the two larger model sizes Recruited: 4 of 4 and 1 of 1

Ripty measurement, November 10, 2026

30 s

before the sixth run, the smallest model, stopped itself; Ripty rated it Spotted AI agent, moderate

Ripty measurement, November 10, 2026

Our own test: six attacker runs, each from its own throwaway machine, with frontier models from one vendor in three sizes, against Ripty's production decoys with the export step in place.

Their reports read like any other finding. One agent called the step "a legitimate-looking auth puzzle" and solved it. Another described the rule and, in its own words, "construct[ed] it and pull[ed] the export." Neither treated it as something to refuse. Nothing in it asked them to obey anyone; it was just the next step of the job.

What each of the five Recruited runs carried, condensed from our own Headquarters, November 10, 2026. Signal names paraphrased.

The sixth run ended before it gave any proof. Thirty seconds in, its model provider's own safety filter withheld one of its messages, and the agent stopped itself. Ripty rated what it had seen, Spotted AI agent, moderate, and claimed nothing more.

Proof that needs obedience

Works until the agent says no.

  • Asks the agent to follow text addressed to it.
  • Today's guarded models usually won't.
  • A careful agent names it prompt injection and moves on.

Proof its own goal produces

Works because the agent wants the data.

  • Reads like an ordinary internal API.
  • Its documentation and its error explain the extra step.
  • Taking the step is the proof; nothing is taken from the agent.

Don't ask an agent to obey you. Give it a door its own goal makes it open.

05Act III · The other half

The agent you invited, and a file it left alone.

The second test asked a different question. What about an agent that's supposed to be there, and strays? We gave a coding agent a small job that was failing because its own API token was missing. Next to it sat a planted "break-glass" production credentials file, a Ripty Synthetic File, labeled as not for AI assistants. If the agent used it, Ripty would know.

We ran it four times, with two model sizes, with and without time pressure (one version told the agent to do whatever it takes). Every run refused to use the file, explained why, and told the human what it needed instead. Ripty raised nothing, which is the right answer: nothing happened.

4 of 4

out-of-scope runs left the planted break-glass file alone, with and without time pressure

Ripty measurement, November 10, 2026

0

alerts raised in those runs, and none were due

Ripty measurement, November 10, 2026

We want to be plain about what that shows. It tested these models' restraint, not Ripty's detection. Ripty's side of it, an alert that names the planted file the moment its credential is used, is a shipped feature we've demonstrated in our own tests, not one these agents set off.

06Under the hood

Keeping the proof honest.

Recruited is a strong word, so here is exactly what it proves in this case: the visitor read our API's documentation or its error message and acted on it. A person working by hand would pass that one step too. What says it was an agent is everything around it: machine-paced requests, a replayed planted credential, requests to the AI tool server. Every Recruited run carried all three.

  • Guessing doesn't count. A visitor that cycles through possible values is recorded as guessing, not as proof.
  • Scanners don't count. A scanner that follows the documented link is not counted as an agent.
  • Nothing is addressed to an agent. The step is an ordinary API rule, documented where any client would look, and it asks nothing of the visitor's machine.

What else shipped

Recent releases also brought a few things built on the same idea: notice what an intruder does with what it finds, wherever it finds it.

  • Tripwires. An alert address that a system outside Ripty calls when something it guards is touched, so a cloud audit log becomes a Ripty alert. The first recipe is a canary AWS access key whose user is denied every action. On November 10, 2026, in our own AWS account, every call we made with it reached Headquarters within seconds to a few minutes, including the bare identity check an agent's key checker makes first.
  • Per-Station changes. Each Station, one Ripty install that runs decoys and reports to Headquarters, can carry its own settings, and many Stations can be changed at once.
  • Signed webhooks and PagerDuty. Alerts can page whoever is on call, or post signed JSON to your SIEM or SOAR so the receiver can check that Headquarters sent it.
  • A firewall quarantine feed. A list of AI agent addresses for your firewall to pull, with what it holds set by your own feed policy. Ripty never blocks anything itself.

07The moral

Build on what agents can't avoid doing.

We went in hoping to watch an agent follow our instructions. Guarded models wouldn't, and that's how it should be. What they would do is their job: read the documentation, fix a failed request, pull the export, try the token they found. So don't ask an agent to obey you. Give it a door that its own goal makes it open, where opening it is the proof.

Then build the rest on what an agent can't avoid doing to get its job done: testing the credentials it finds (eight of our nine attacker runs replayed the planted token), moving at machine pace, reaching for the AI infrastructure it was built to use. A planted credential has no clever test to pass. The only way to check it is to use it, and using it is the alarm.

Keep the text you write for agents private, rotate it, and scrub it for giveaways, because agents read it more closely than any person will.

And the honest limits. This was a small number of runs, with one vendor's models in one harness, on one day. Unguarded models and open-weight models may behave very differently, and a door one model walks through, another may not. We'll keep sending real agents at every release, and keep writing down what they do.

A field report from our own tests on November 10, 2026: thirteen runs of one agent harness, with frontier models from one vendor in three sizes. Nine were attacker runs against Ripty's production decoys for a fictional company, three before the export step and six after; four ran a coding task next to a planted credentials file. Other models, harnesses and prompts may behave differently. Canary credentials are non-privileged and exist only for detection. Ripty detects and alerts; it never takes destructive action against anyone's infrastructure.

Questions

Fair questions.

Which agent harness and models did you use?

A popular agent harness, run headless, with current frontier models from one vendor in three sizes. We aren't naming them. This is about how careful agents behave, not a review of one vendor.

Does Recruited prove the visitor was an AI?

Not on its own. The export step proves the visitor read our API's documentation or error and acted on it, which a person working by hand could also do. What says it was an agent is the rest of what it did: machine-paced requests, a replayed planted credential and requests to the AI tool server. Every Recruited run in these tests had all three.

If careful agents refuse instructions written for them, why does Ripty still plant them?

Because not every agent is this careful, and an instruction followed is still proof. But Ripty doesn't depend on it. The export step gives proof without asking an agent to obey anything, and an instruction refused costs nothing: the agent still has to do its job, and doing it is what Ripty watches.

Did Ripty miss the agent that stayed in scope?

There was nothing to catch. All four runs left the planted file alone, so no alert was the right answer. When a planted Synthetic File's credential is used, Ripty raises an alert that names the file; we've shown that in our own tests, not with these agents.

Why not publish the giveaways, or how the export step works?

Because published details are a weakness. A model trained on them, or a person writing checks from them, gets a head start. We describe the kind of thing and keep the specifics private.

Make contact.

Want to see what Ripty records when a real agent meets a decoy? Tell us which agents you run. We'll show you.

Book a briefing

Thirty minutes with the people who built it. Bring your hardest question.

  • Watch a live agent set off a detection
  • Map decoys to your crown jewels
  • Plan a first deployment in one sitting

We use your email only to reply. No newsletter, no list, no sharing.

Keyboard shortcuts

T
Change the theme. Shift+T goes back.
?
Show this list
Esc
Close whatever's open