A poisoned document can steer the agent you shipped, silently, with the access you already gave it. Crawdad is a transparent local proxy between your agent and its model: it inspects every request and bounds what each agent may do by its purpose, judged on the action it takes rather than the intent it claims. One env var, no SDK, no code changes, and raw content never leaves your machine by default. Building the platform others run their agents on? Embed detection directly with the gateway /v1 API.
Install, point your agent's base URL at the local proxy, activate your license. Crawdad intercepts your agent's provider traffic transparently, your agent doesn't know it's there.
ANTHROPIC_BASE_URL or equivalent, no code changesThe same detection engine, two integration shapes. Run it in front of your own agent for the full on-device pipeline, or call the hosted gateway API to add detection to the product you're building for others.
Point your agent's base URL at the local proxy. You get the full multi-layer ML pipeline running inline and on-device, the engine behind the public benchmark, plus charters, trajectory reasoning, and, when you opt in, OS-level Enforce. No SDK, no code changes, and raw content never leaves the machine.
Send content to the hosted gateway POST /v1/detect with a scoped API key and get a decision back. It runs a fast pattern-and-heuristic engine, purpose-built for embedding a detection check into your own platform, agents, keys, policy, and audit under one versioned REST surface.
One honest distinction, stated up front. The detection benchmark belongs to the local sidecar's full ML pipeline on the proxy path. The gateway /v1/detect endpoint is the faster pattern-and-heuristic engine, a different, lighter surface, so we never attach the sidecar's benchmark number to it. Pick the path that fits, and know exactly what each one runs.
Detection inspects the request. A charter bounds what the agent may do with it. Declare the agent's real job as an allowlist and Crawdad enforces it on the observed action, the tool call the agent actually makes, so a deceptive stated intent buys nothing.
A charter is three axes: the tools the agent may call, the data (paths, hosts, recipients) it may touch, and the effects it may produce. Author it in your KDL policy file, and on reload it governs at the wire on the next action, with no sidecar restart. Anything outside the charter is blocked at the wire, and the block names the axis it violated.
Read /reports/q3.txt is in-charter here, out-of-charter for a support-triage agent.
Enumerate, read progressively more sensitive in-scope data, then send. Every step is individually allowed; the shape is the attack. Crawdad scores that shape with deterministic signals anchored to resource sensitivity and gates an on-device reasoner onto the ambiguous band. With no local model reachable, a completed staging chain is held for review, never silently allowed. Zero false positives measured on benign multi-step work. It does not claim to catch every composed harm; it catches staged compromise that carries a sensitivity climb.
A runnable demo (crawdad demo-serve) drives the production proxy with the real charter, trajectory, and session-risk engines. The verdicts are computed by the production engine; the scenario is scripted so it reproduces and tool side effects are simulated; free-drive returns a real verdict on any action you supply.
Not a single classifier. Not a regex list. A multi-layer prompt injection protection pipeline where each layer catches what the others miss. Built in Rust. 3,737 tests across 26 crates.
128 patterns across 22 attack categories. Catches known injection formats, encoding tricks, and role-override attempts before anything else runs.
128 patterns · 22 categories7 sub-checks analyze structural signals, conversation topology, authority escalation, instruction-data boundary violations. Catches attacks that look benign to static patterns.
7 sub-checksDetects instructions hidden inside documents, tool outputs, and retrieved content. The threat that enters through what your agent reads, not what the user types.
Maintains a 20-message sliding window to catch multi-turn attacks that unfold gradually, slow escalation, context poisoning, progressive boundary shifting.
20-message windowScans for 10 credential and PII types, API keys, tokens, SSNs, credit cards, before they reach the model. Blocks exfiltration at the proxy layer.
10 credential types44M-parameter transformer fine-tuned on adversarial prompt data. Runs locally on-device. Catches novel attacks that evade pattern and behavioral layers.
DeBERTa-v2-small · 44M paramsThe Arbiter combines signals from every layer into a single verdict, then decides what to block. The credential and data-exfiltration floors always block inline, and a single high-confidence detection is promoted to an inline block, so on the proxy path blocking tracks detection with a low false-positive rate.
Full reference in Redoc →
For platform builders: a clean, versioned REST surface to embed detection and manage agents, keys, policy, and audit from your own product. POST /v1/detect runs the fast pattern-and-heuristic engine and returns a decision, threat score, categories, and reason. Authenticate with a scoped API key; every path is in the OpenAPI 3.1 spec and the interactive reference.
Authorization: Bearer or X-API-Key)Crawdad is a transparent proxy, an LLM firewall that sits between your agent and the model. If your tool talks to an LLM API, Crawdad can inspect it. No SDK, no code changes.
497 attack samples, 1,172 benign negatives, 22 categories. The entire corpus is open under CC BY 4.0. The product is licensed under BSL 1.1.
Crawdad runs as a transparent proxy on your machine. Raw content, prompts, responses, tool outputs, never leaves your device by default. Metadata-only telemetry by default, customer-governed.
One environment variable routes your agent's traffic through the local proxy. Your agent doesn't need to know Crawdad exists. Detection runs entirely on-device.
By default Crawdad runs in Monitor mode, exactly the transparent behavior above: a stock device is byte-for-byte unchanged and the env var is a door your agent chose to walk through. When you want a harder boundary, opt a device into Enforce and the operating system installs a persistent default-deny egress lock (pf on macOS, iptables on Linux) so a governed agent reaches only the Crawdad path, everything else, including UDP/QUIC, denied by construction and the lock persisting across a kill. Full runtime enforcement runs on macOS and Linux today. Read the Enforce mode guide →
Start with the install. Read the docs. Run the benchmark yourself.