Lantern DSSE

The agent's next request is the problem

An AI agent is a program that decides what to do next after reading something. That one property is what makes it useful, and it is also what puts its next network request within reach of whoever wrote the thing it read.

This was in scope from the start rather than retrofitted when it became the topic of the year. Policy here is written against identity, and identity includes non-human identities, AI agents, MCP and delegated tool execution.

Today's controls are almost all inside the agent

The controls people actually deploy are good ones: a tool allowlist that decides which functions or MCP servers the agent may call, a confirmation step before something consequential, and guardrails — usually another model reading the text. None of these is naive, and this page is not arguing against any of them.

It is pointing at one structural property they share. All three run inside the agent's own stack: the allowlist is enforced by the framework, the confirmation is rendered by the same process, and the guardrail is a model reading the same kind of input. They sit on the same side of the trust boundary as the thing being manipulated. That is not a criticism of how they are built. It is where they are.

A tool allowlist is not a reachability list

This is the concrete version, and it is the part most worth checking against your own deployment. An allowlist decides what the agent may call. It does not decide where the agent can get to.

Give an agent a shell, a code interpreter, a browser tool, or any single tool that can make an HTTP request, and its real reach is not the list — it is everything the host it runs on can reach on the network. A subprocess is not bound by the framework's policy, because the framework is not in that call path. The allowlist and the blast radius are two different sets, and only one of them is written down.

So the useful question about an agent is rarely "can it be tricked" — assume it can — but "what can it reach on the day it is". That question is answered by the network, not by the framework.

Which is what a control point outside the agent is for

The Edge does not read the agent's account of itself. It sees a flow and decides it against identity, device, posture and policy — the same way it decides every other flow, whichever framework, model or tool produced it, and whether or not that tool was on anyone's list. Egress is egress.

Prompt injection is lateral movement with a new first step

The shape is familiar. Something the attacker influences produces a next hop that nobody intended: on an endpoint it is a compromised process reaching its neighbour, and with an agent it is a poisoned document producing a request to an internal API. The stage is the same stage, and so is the answer — the next hop has to be authorised, and by default it is not.

What is actually built for this

What this does not do

It does not stop an agent from being tricked. Nothing on the network can: the trick happens inside the model's context, and by the time a request exists the persuasion has already succeeded. Anyone selling you network enforcement as a defence against prompt injection is selling you the wrong layer.

What it does is constrain what a tricked agent can reach, and record what it tried. That is the same shape as everything else on this site: one stage of the problem, named — and the neighbouring stages left to the tools that own them.