A prompt injection can win the argument with your agent's model. It can't win against the gate.
Here's why. When an injected README or a poisoned web page convinces your agent to do something harmful, the model's compromised decision still has to leave the harness as a tool call: install this, write that file, run this command. That call hits Dryx at the action boundary. Dryx checks the action against a verdict it already computed, with zero attention to the persuasive text that produced it.
The injection talked its way past the model. Then it ran into a wall that doesn't read.
That's the whole idea, made physical. Your agent anchors to Dryx before it acts. Offline. No model in the loop. The same verdict for the same action, every time.
Most security tools hand you a report and walk away. You read it, you triage it, you forget it. The risk it found is still sitting there the next time your agent acts.
Dryx started as a configuration inspector — it maps what the AI agents on your Mac can reach. But a map you read once isn't where the danger lives. The danger lives at the moment your agent acts: installs the MCP server, writes the config, runs the command, reaches for the secret.
So Dryx moved to that moment. It compiles what it knows about your workspace into a fixed reference your agent takes its bearings from before every action, and stays silent on everything that's fine.
No dashboard to read. No alert to triage. Your agent already has the answer.
See the blast-radius graph Dryx maps, or why a scan-only or cloud-gateway tool isn't this.
Deterministic and instant sound like opposites. They aren't. You only have to separate the thinking from the checking.
On every inspection, Dryx walks your blast-radius graph across all seven risk layers and writes down a verdict for what each agent can reach. That becomes a signed WorkspacePolicy — a fixed picture of your workspace, stamped with when it was built and sealed with an offline signature so a forged “allow” can't slip in.
This is where the time goes. Seconds, if your workspace is rich. It happens off to the side, never while your agent is waiting.
When your agent goes to act, a tiny gate reads the action; the worst-case denials come from the floor built into the gate itself, the graded verdicts from a lookup in that signed policy. No network. No model. No re-thinking. Just a check against work already done.
Precomputed · no model, no networkThat's how a verdict that took deep analysis to compute comes back fast enough to sit in front of every tool call. Covers more, never thinks more. See signing and verify-before-honor on /security.
Action Guard is the switch that puts Dryx at your agent's action boundary. It has three states, and you move through them at your pace.
The gate isn't armed. Dryx still maps your workspace and answers when your agent asks — it just isn't standing at the boundary.
The gate evaluates every action — the destructive floor first, then the full policy — and writes down what it would have stopped, without interrupting anything. You get a quiet record of the calls Dryx would have caught, so you can see how it'll behave before you let it act. One thing still holds the line even here: the destructive floor (think rm -rf /, dd to a disk) blocks in Observe too.
The gate is live. The safe majority pass through untouched. On a precomputed-dangerous action, your agent gets a verdict back — in its own voice, as its own careful reasoning — and the harmful call doesn't run.
Dryx will suggest moving to Enforce after a clean Observe window. It asks once. It never arms itself behind your back. See turning Action Guard on, or which build carries Enforce.
The honest answer most security tools won't give: the vast majority of what your agent does is fine, and a tool that interrupts you on the safe stuff trains you to turn it off.
So Dryx stays out of it. On an action that's authorized and in-bounds, the gate returns a silent allow: no prompt, no banner, no log line in your face. Your agent keeps working. You don't hear from Dryx at all.
It speaks only on a precomputed-dangerous action: a destructive command on a path it can't prove safe, an install that resolves to a typosquat, a write to a protected config. Known truth, surfaced at the one moment it matters, in your agent's own words.
Silent on the safe majority · speaks once on real risk.
We think the right way to judge a tool like this is by how rarely you hear from it. A gate that's silent on the safe majority is one you leave armed, and a tool you leave armed is the only kind that ever catches anything. That's how this is supposed to work — verifiable, not taken on our word.
The verdict can't. The agent it protects still can.
That distinction is the whole design. Prompt injection works by talking the model into something. Dryx's verdict isn't a model — it's a lookup against a signed policy. There's no prompt to inject into a lookup. You can convince the agent; you cannot convince the answer.
So the realistic attack isn't “trick Dryx into allowing.” It's “get Dryx out of the way.” We treat the gate itself as something worth attacking, and we say so plainly.
Here's the honest ceiling. This is a defense that runs in your user space, against attacks that run in the same user space. A determined process that races us can make Dryx loudly visible rather than always armed. The same rule covers a machine that cannot run the check at all — a Mac with no developer tools installed, say: Dryx marks the gate unproven and shows you, instead of reporting a block that never happened. And it covers time: the signed policy carries a freshness window, and if no Dryx process is alive to re-stamp it — the app and its login item both gone for more than a day — the policy-dependent checks degrade to the destructive floor until Dryx is back. That degradation leaves a receipt in the ledger; it is not silent. We'd rather tell you that than sell you a tool that hides its own edges.
Read the full hook-integrity, verify-before-honor, and disclosure policy.
No. And that's a feature, not a shortcut.
The gate doesn't weigh, infer, or interpret. It reads the action, looks up the verdict that was already computed, and returns it. Same action, same workspace, same answer — every single time. Nothing to talk it out of, nothing that drifts between runs, nothing that phones home to decide.
The reasoning happened earlier, on the slow path, when Dryx compiled the policy from your blast-radius graph. The hot path inherits that reasoning frozen — and the worst-case denials don't even wait for the policy: they're built into the gate itself. That split is what lets a deterministic verdict be instant, and what lets you treat “allow” as a fact you can build on, not a probability that might flip tomorrow.
It also gives you something no model-based gate can. When you override a verdict once, Dryx remembers exactly — and only — what you allowed. That permission is tied to the precise action and the exact state of your workspace. Change the workspace and the permission stops matching, so Dryx asks again, once, and tells you what changed.
Compare a deterministic lookup against an LLM-guardrail or cloud-gateway tool.
When the gate refuses without asking anyone, this is the complete list of why. Not a model, not a heuristic score — ten regular expressions in six shapes, built into the gate itself, evaluated before the policy is read, blocking in Observe and Enforce alike.
The six shapes: a recursive force-delete — refused outright where the target resolves to a system or home location, while an unresolvable target (a variable, a substitution) becomes an operator question rather than a guess, and stays refused on harnesses that cannot ask; dd onto or off a raw disk device; formatting a filesystem (mkfs); the fork-bomb literal; an unquoted redirect onto a raw disk; and chmod -R 777 on the filesystem root. The only paths a recursive delete may target without a question are the four temp roots, and a payload handed to a shell — sh -c, a piped literal — is re-checked as the command it is. If a command matches none of these, the floor does not speak: that is the entire stop-set, which is also the honest answer to “what could this halt in my release pipeline at 2am?”
This is a claim you can check, not a claim you take on faith. The full enumeration — every pattern, the safe roots, the three rm tiers, the parse limits — is published at dryx.ai/floor.json, and a test in the gate suite and in CI compares that file element-for-element against the gate's own constants on every change. The gate itself is readable Python at ~/.dryx/dryx-gate.py on your machine. If the page and the gate ever disagree, that check fails before your trust does.
The honest edges, stated rather than hidden: the fork-bomb literal is refused even quoted or echoed — no sound downgrade exists; a command too large to parse that carries a candidate pattern keeps its block; and every floor decision writes a local receipt naming which shape fired and how the parse reached the verdict — so a wrong block is distinguishable and countable, not something you disarm the gate to get past. There is deliberately no override for the floor: the class with no escape hatch is the class that destroys data. Everything softer lives in the policy plane, where Observe and operator decisions apply.
We'll state the scope as plainly as we'd want a tool to state it to us.
What that means in practice:
Dryx takes real risk off the table at the action boundary. It does not take all risk away. A tool that claimed otherwise would be selling you false confidence, which, for an authority, is worse than nothing. See the structurally-empty seat.
One honest detail about how this ships, because it changes what you can do. Arming Enforce means letting a small gate stand at your agent's action boundary: a readable Python script at ~/.dryx/dryx-gate.py, deployed by the notarized Dryx app and run by your agent's harness with the system Python. The script is not itself code-signed; its integrity comes from Dryx checking the deployed bytes against the copy embedded in the app and restoring its own copy when they differ. The Mac App Store build is read-only by design and does not deploy that gate. So the two builds differ on purpose.
Same inspection. Same blast-radius graph. The difference is whether Dryx can act at the boundary at all — the direct download carries the Anchor, the gate, and every paid plan. See the Founding Lifetime or App Store vs direct download.
Dryx compiles one signed policy and stands it in front of every agent that exposes an action boundary, and watches the ones that don't.
Claude Code · Claude Desktop · Cursor · Codex CLI · Cline · GitHub Copilot · Windsurf · Gemini · Ollama — plus any MCP-capable agent that consults the Anchor.
Where a harness gives Dryx a hook, the gate enforces — live now on Claude Code and Cursor, with Codex arming through its own approval flow, and more agents as their harnesses expose hooks through launch. Where a harness doesn't, Dryx keeps the voluntary reflex and passive monitoring — it still sees what landed. We tell you exactly which is live and which is next, in the app, rather than implying a coverage we haven't shipped.
One blast-radius graph behind all of them. The policy each gate reads is compiled from it, so the graded verdicts are specific to your machine — and the destructive floor beneath that policy is generic on purpose: built into the gate itself, it holds even when the policy is missing, stale, or forged. See why a graph-compiled policy at the harness hook is the empty seat.
Everything on this page is meant to be checkable, not taken on our word.
An authority that asks you to trust it isn't one. Verify, then anchor to it.
The action boundary is where the runtime authority lives. The frame around it is the Triad: you, your agent, and the Authority Anchor it consults.
You set the bearing and keep the override. Dryx asks once before it arms; it never arms itself behind your back.
Your agent acts — and relays Dryx's verdict back to you in its own voice, as its own careful reasoning.
The fixed, offline source of truth your agent takes its bearings from before it acts. It stays put. The action moves toward it.