Agents blur the line between code and user, and the old security playbook
doesn’t cover them. My team works on a small set of problems and tries to
solve them well — the bet is that getting the primitives right beats chasing
every prompt-injection variant after the fact.
That playbook gap shows up in specific ways. A code-reviewing agent with
filesystem access will happily follow instructions embedded in a docstring
it’s summarizing — the classic prompt-injection case, but the same
class of bug reappears anywhere an agent treats retrieved content as
untrusted-and-yet-executable. A multi-agent pipeline that lets one worker’s
output become another’s system prompt inherits every trust-boundary
violation of the first, silently, because nothing in the wiring forces a boundary
to exist. Neither failure is a bug in the model; both are missing controls in the
system around it. That’s the reframe worth sitting with: stop asking whether
the model will behave, and start asking what happens when it doesn’t
— what has access to what, what a compromised step can reach, and what it
takes to notice and contain the blast radius. Once you take that as the starting
assumption, most of the work becomes ordinary systems security: identity, least
privilege, auditability, sandboxing. The interesting part is doing that translation
without also making agents unusable.
- Sandboxing, permissions, and runtime controls for autonomous agents
- Threat modeling for MCP, multi-agent systems, and production tool use
- Secure-by-default frameworks that make the safe path the easy path
When I evaluate a new agent capability, I start from three questions:
what’s the worst thing this can do if every input is adversarial, who or
what enforces that ceiling, and can we prove it held after the fact. If the
answer to the second question is “the model’s judgment,”
that’s not a control — it’s a hope, and hopes don’t survive
contact with real usage. I’d rather ship a narrower capability with a hard
boundary around it than a broader one that depends on the agent behaving. In
practice that means building sandboxes and permission systems that agents
can’t talk their way out of, keeping an audit trail detailed enough to
reconstruct what actually happened after an incident, and treating every new tool
or integration as an expansion of the attack surface until proven otherwise. The
goal isn’t zero risk — it’s making the failure modes boring:
contained, detectable, and cheap to recover from, instead of novel and
catastrophic.
More on how I approach the work →