Runtime Guardrails for AI Agents, Explained
Why the guardrail has to sit where the agent acts, not inside the conversation it can be talked out of.
ReadInnerWarden watches what your agent does and enforces the limits below the agent, in the kernel on Linux: a program not on the agent's allowlist is refused at exec. It connects what actually ran, process to file to domain, and keeps a record you can prove.

0:00Everyone is trying to figure out how far AI agents can go.
0:04For a developer, that means faster coding.
0:07For a business, automation that can actually do work.
0:10But the moment an agent can read files, run commands, install packages, call APIs, or touch servers,
0:17it stops being a chatbot.
0:18It becomes something with real power.
0:23And real power needs supervision.
0:25Because instructions can hide anywhere.
0:27In a file. A web page. A pull request. A ticket. A document.
0:34The agent may not know the difference between your task and a malicious instruction.
0:39One hidden line, and it can try to read secrets, leak tokens, or run commands nobody approved.
0:48Prompt guardrails are not enough.
0:50If the agent is the thing being tricked, you cannot rely on the agent to police itself.
0:56And if you are bringing agents into a real company, just trust the prompt is not a security plan.
1:01You need something outside the agent. Below the prompt. Watching what actually happens.
1:09So InnerWarden puts a gate in the kernel, below the agent's own process.
1:13Every program the agent tries to start passes through it first.
1:17Approved, it runs. Not approved, the kernel refuses it. Operation not permitted.
1:23Nothing executes without prior authorisation.
1:26The agent runs above the layer that stops it, so a hijacked agent has nothing to argue with.
1:34A tool returns a web page, and it carries a link.
1:38Later, the agent puts that same link inside a shell command.
1:41Each message is ordinary on its own. Together, they are the attack.
1:46InnerWarden holds the session in the path, so it sees the second call carrying what the first one delivered.
1:52And on the host underneath, it links the process, the file, the domain and the user into one chain.
1:59A command is judged by where it came from, not by what it looks like.
2:05All of it runs on your machine.
2:07Our own model does the triage in process, on your CPU. No cloud call, no fee per incident.
2:14Every allow, review and deny lands in a hash-chained record, so a deletion or a rewrite is detectable.
2:21Data sovereignty is the default, not a setting you have to go and find.
2:28Give your agents real access, and keep control when trust fails.
2:32There is a live demo server on the site. A real agent, real shell access, InnerWarden armed.
2:38Go and try to break it. Nothing to install, and no email to start.
2:43Kernel enforcement on Linux today. macOS and Windows in progress.
2:47innerwarden.com
Open-source eBPF LSM tools exist, and a hook at exec is not what you are paying for. What InnerWarden adds is what sits around that hook for an AI agent, and each part below is something you can check. How that compares with Tetragon, KubeArmor, Falco or your EDR.
What an AI agent may run is decided before it runs.
The Execution Gate holds an allowlist of the program paths one agent may run, checked at exec and scoped to that agent alone, so the rest of the host is untouched. A program not on the list gets -EPERM and never starts. It decides which programs start, not what an allowed one does: an allowlisted shell or interpreter still runs the script it is handed.
It will not enforce host-wide, or without what the host needs to boot.
It installs disarmed, and you arm it in observe first, which logs what it would block and blocks nothing. Enforce is refused host-wide, refused while a boot-essential program is missing from the allowlist, and refused where the kernel cannot run the gate. innerwarden-ctl exec-gate enforce also waits for an observe window in which the agent ran nothing unlisted; the lower-level arm command skips that window. One command disarms it, with no licence.
What it decided stays on the host, in a chain you can verify.
Every decision and every response goes into a hash-chained audit trail on the host: change or delete an old record and the chain breaks from that point. Detection, the decision and the response run on the one host, with no cloud control plane. Triage can call a cloud model you configure (bring your own key, off by default), and our public challenge box uses one. Every paid binary ships with an Ed25519 signature the installer checks against a key it pins, and the security pack shows how to check it yourself.
| Platform | What InnerWarden does today |
|---|---|
| Linux | Full kernel Execution Gate, host sensor, evidence chain |
| macOS | command & tool-call screening today · kernel enforcement in progress |
| Windows | command & tool-call screening today (experimental) · kernel enforcement in progress |
Every command an agent runs passes the same three checks. The last one lives in the kernel, on Linux, where a hijacked agent cannot reach.
Your AI agent proposes a shell command or an MCP tool call. Nothing has run yet, and the agent does not get to decide what happens next.
Outside the agent, InnerWarden reads the whole request and scores it: a shell command by its parsed structure, an MCP tool call against the agent threat rules. Then it returns allow, review, or deny.
On Linux the verdict is enforced in the kernel: an unauthorized binary is denied at exec with -EPERM, below the agent, before it runs.
Individually, each step is normal. InnerWarden links the process that ran it, the file it touched, the domain it resolved and the user it escalated to, then stops the behaviour before it completes. The chain is built from kernel events, so it holds what the agent never narrated: the grandchild of the shell it opened.
Every allow, review and deny is written into that same structure, in a hash-chained, off-host-signed audit log, so a deletion or a rewrite is detectable. For an auditor, "why was this denied" is a path, not a log grep.
open the case board →Your agent reads a web page, a README, a support ticket. The text carries an instruction. The model treats it as data, then passes a fragment of it, a URL, a path, an id, straight into its next tool call. Neither message is dangerous on its own, so anything that checks one message at a time forwards both.
Forwarded. It is text a tool returned, exactly what the agent asked for.
A normal call to a tool the agent is allowed to use. Read alone, it passes.
InnerWarden sits in the byte path and holds the session, so it sees that the argument in step 2 carries a token that arrived in step 1. That is the confused deputy: the agent was steered by output it was told to trust.
InnerWarden evaluates behaviour in context, not one message at a time.
Attack a real AI agent with real shell access, InnerWarden armed. The box is our public challenge host, running the paid stack on the open internet. You send the prompts, and you watch what gets through and what gets stopped.
Start the challenge →132.196.94.153public IP · no WAF · decides on the hostEvery decision counts here, dismissals of routine noise included. InnerWarden applied and recorded these decisions on the host. Its triage can call a cloud model the operator configures, and this box's does. A case it cannot settle waits for the operator, whose dashboard lists it as waiting on you.
A real machine on the open internet, scanned all day and defended by the paid stack. It is the same box the challenge's agent runs on. Watch the live feed →
From 1 July to 16 September 2026: one-to-one mentoring with cyber resilience experts and facilitated introductions across the UK cyber landscape. Read the announcement.
The screening core is on GitHub, releases are signed and attested, and the enforcement claims on this page can be checked against the source.
Why the guardrail has to sit where the agent acts, not inside the conversation it can be talked out of.
ReadA poisoned file rewrites the agent's intent, and the damage lands on the host as execve, openat or connect.
ReadWhat an MCP server can do with the trust an agent hands it, and where the tool call can be checked.
ReadWhat an agent in auto mode can reach with your permissions, and what to put below it.
Readinnerwarden contain puts walls around the agent, with the free guard still screening every command inside.
ReadA model's refusal can be argued with. On Linux, the kernel's refusal at exec cannot.
ReadNo cloud control plane. No telemetry channel reporting your incidents back to us. The only things that leave the host are what you switch on:
One command, and it starts in observe mode, so nothing blocks until you arm it.
Evaluating, or need an open-source component for a security certification? There is a free Apache-2.0 core (npm install -g innerwarden, at InnerWarden/inner-warden) that screens agent commands locally. Start with the free core.
The host sensor, incident triage, the tamper-evident evidence chain mapped to 13 ISO 27001 Annex A controls, and on Linux the kernel Execution Gate: inside the agent's scope, a program not on its allowlist is refused at exec. One command on a host, plus a licence.
DNS Guard is a forwarding resolver that refuses to resolve malicious domains (on its threat-intel denylist, or rated high-confidence malicious by its classifier) while unknown domains still resolve. It runs in observe by default. The operator arms enforce; we recommend a rehearse first, and arming does not require one. No host we run has DNS Guard in enforce today: on our public challenge box it is set to observe, and only the challenge agent is pointed at it.
Get InnerWardenThe same stack as Pro across many hosts, plus curated policy, fleet management, an assurance audit and support, and a pilot on one critical agent workflow before you commit.
Talk to securityYes. InnerWarden decides allow / review / deny before integrated commands and MCP calls run, and on a supported Linux kernel the Execution Gate denies any unauthorized binary at exec, below the agent, scoped to just the agent. That kernel guarantee applies on Linux with BPF LSM, once armed after a clean rehearsal.
We publish the exact boundary. The advisory check is bypassable by design (an agent can just not call it). Traffic behind the MCP proxy is inspected even if the agent is compromised. The kernel gate holds against a hostile agent for what it checks: a program not on the agent's allowlist does not start, whatever the agent was told, because the check sits below the agent, outside the conversation an attacker controls. It does not judge what an allowed program does, so an allowlisted shell or interpreter still runs the script it is handed.
Not by default. InnerWarden is self-hosted: detection, verdicts and the audit trail stay on your machines, with no cloud control plane. The only data that leaves is what you switch on: alert channels, or an optional AI provider that receives a sanitized summary, never raw commands or keys.
It starts in monitor mode: nothing is blocked until you deliberately arm it, and by then monitor mode has already shown what would have been denied. The kernel gate installs disarmed. Arming it refuses a host-wide enforce and a boot-essential program missing from its allowlist, and the enforce command waits for an observe window in which the agent ran nothing unlisted. One command disarms it instantly, no licence needed.
Pro and Enterprise are source-available, so the code outlives the vendor, and there is an Apache-2.0 core at InnerWarden/inner-warden. Releases are signed and attested. It runs local-first with no cloud dependency, so it keeps working if our servers do not.
One command, observe mode first, nothing blocks until you arm it.