AgentFox

Start here

  • OverviewThe control plane, one page
  • How it worksWhat happens on a tool call

Where it binds

  • Coding agentsWhich hooks can stop a call
  • MCPTool poisoning and rug pulls
  • Control pointsOne policy, six control points

What it does

  • DiscoveryEvery agent, tool, and server
  • Capability grantsWhat each agent is allowed to do
  • Runtime guardrailsThe tool call is checked too
  • Evidence and auditAn audit trail you can check
  • ComplianceEU AI Act, NIST, OWASP, ATLAS

Evidence

  • CoverageRed team coverage, gaps included
  • Security benchmarksResults, including the losses
  • Latency benchmark109 real agent repositories
  • CompareWhere each one is ahead

Project

  • BlogHow agent attacks work, in depth
  • SecurityWhat nobody else has checked
  • SupportNo promised reply time
PlaygroundLiveDocsPricing
Try itSign in

Start here

OverviewHow it works

Where it binds

Coding agentsMCPControl points

What it does

DiscoveryCapability grantsRuntime guardrailsEvidence and auditCompliance

Evidence

CoverageSecurity benchmarksLatency benchmarkCompare

Project

BlogSecuritySupport
PlaygroundLiveDocsPricingLegalPrivacyTermsGitHub

What a guard check adds to your agent

Measured on 41,540 guard calls replayed from 109 real agent repositories, and against other guards on the same machine.

What does a check add?

49.6 ms

median per check with the default detectors, the ML prompt-injection classifier included; 260 ms at p95.

Engine time on a laptop CPU with no GPU, network and the agent's own model excluded, cache off. The p95 is the 300 ms check budget, reached on longer text.

And without the model?

2.1 ms

median per check for the deterministic detectors alone: patterns, PII, secrets, schema, unicode, insecure code.

These catch less on their own; the classifier is what reads an injection phrased in ordinary words.

Against LLM Guard?

58.8 ms

median for AgentFox's default checks on short messages, against 52.2 ms for LLM Guard's prompt-injection scanner on the same messages and machine.

LLM Guard's scanner detects injection only; AgentFox also runs PII, secrets and the rest, over HTTP. Speed only, not accuracy.

01Per check and per agent turn02Head to head on one machine03What moves latency, and what does not04What other vendors publish05Method and limits06How to reproduce it

Each repository was mapped with agentfox init, and its own agents, tools and handoffs drove the traffic: single turns, five-turn sessions and multi-agent handoffs, through the same guard endpoints an SDK calls.

1. Per check and per agent turn

Tool calls are the cheapest step in every layer, 2.4 ms at the median with the default detectors. Text the classifier must read (inputs, tool results, replies) carries the cost. A turn is every guard call it makes, summed: four for a single turn.

LayerWhat runsPer check, p50 / p95 (ms)Per single-agent turn, p50 (ms)
DeterministicPatterns, PII, secrets, schema, unicode and code checks2.1 / 6.08.0
DefaultDeterministic + ML prompt-injection classifier49.6 / 260156
ExtendedDefault + similarity search against known attacks9.4 / 26273.9
With an LLM judgeExtended + injection and PII judged by gpt-4.1-mini68.7 / 9491,017

Messages under 200 characters take 49.0 ms at the median and 60.3 ms at p95 with the default detectors, and none runs out of time. Between 200 and 600 characters, 22.3% reach the 300 ms check budget before the classifier finishes on a CPU with no GPU; those checks return without its verdict and say so. With judges on, a judge waits inline only when an enforcing rule relies on it, the default, so most checks do not wait for it; replies pay the commitment check, about 0.85 s.

Source: benchmarks/latency/results/headline.json, from benchmarks/latency

2. Head to head on one machine

Every system ran on the same 880 messages, on the same machine, on CPU, under the same Python, one request at a time, with AgentFox at each of its levels. Base-size models (AgentFox's classifier, the one in LLM Guard's scanner, Prompt Guard 2 86M) all take about 50 ms; AgentFox adds an HTTP round trip and its deterministic checks, 6.9 ms on their own.

SystemDetectsShort messages, p50 / p95 (ms)Long messages, p50 / p95 (ms)
AgentFox deterministicPII, secrets, injection patterns, unsafe content, schema, unicode, insecure code6.9 / 9.710.1 / 15.7
AgentFox defaultThe above, plus injection and jailbreaks by classifier58.8 / 72.1107 / 275
AgentFox default, cache onSame55.3 / 61.9103 / 273
AgentFox extendedThe above, plus similarity to known attacks59.4 / 70.5111 / 274
AgentFox with LLM judges, default modeThe above, plus injection and PII judged by gpt-4.1-mini when a rule relies on it64.9 / 94.9114 / 274
AgentFox with LLM judges always inlineSame, judged on every check838 / 1,057846 / 1,122
LLM Guard, prompt-injection scannerPrompt injection52.2 / 59.787.2 / 199
Meta Prompt Guard 2 86MPrompt injection and jailbreaks51.7 / 60.585.9 / 213
Meta Prompt Guard 2 22MPrompt injection and jailbreaks23.9 / 30.245.9 / 102
Guardrails AI, DetectJailbreakJailbreaks99.4 / 107149 / 325
LLM Guard, nine default scannersInjection, PII, secrets, toxicity and five more249 / 316348 / 650
OpenAI omni-moderation (hosted)Harm categories, not injection410 / 547413 / 521
NeMo Guardrails, self-check (gpt-4.1-mini)One LLM policy check738 / 908735 / 908

On long messages AgentFox reads the first 4,000 characters, where the others stop at 512 tokens, so it does more work: on CPU 55 of 150 long inputs ran past the 300 ms check budget before the classifier finished. In its default mode a judge waits only when a rule relies on it; with every judge inline, AgentFox is about 100 ms slower than NeMo's single self-check, mostly because its judge answers three questions where NeMo asks one.

Source: benchmarks/latency/head_to_head/results/summary.json

3. What moves latency, and what does not

  • Message length moves it. The classifier reads text in 256-token windows, so a 500-character tool result costs several times a short question.
  • Session length does not. Per-check latency is flat from the first turn of a session to the fifth.
  • Framework and repository shape barely do. Single-agent, independent-agent and multi-agent repositories, and LangGraph, CrewAI, AutoGen, the OpenAI Agents SDK, ADK and the rest, land within a few milliseconds of each other per check.
  • Where it runs does. A hosted guard pays the network every call; from Bengaluru to a US region that is about 260 ms before the guard does anything. Run the gateway beside the agent.

4. What other vendors publish

Few vendors publish latency, and fewer say under what conditions. Azure Prompt Shields, AWS Bedrock Guardrails, Google Model Armor, OpenAI Moderation, Llama Guard and Guardrails AI publish none. These are the figures we found, as their authors state them:

ProductPublished latencyConditions
Protect AI LLM Guard, injection scanner104 ms mean / 107 ms p95 (ONNX)AWS m5.xlarge CPU, 384-token input
Meta Prompt Guard 286M: 92.4 ms; 22M: 19.3 msA100 GPU, 512 tokens
Lakera Guardp95 50 ms to 300 ms1 to 16 detectors, about 1k to 5k characters
NVIDIA NeMo Guardrailsabout 0.5 s added per chat turnThree rails, GPU microservices
Palo Alto Prisma AIRSabout 700 ms addedNetwork firewall intercept mode

5. Method and limits

  • 119 agent repositories were examined; 109 produced an agent map and were tested, 76 public, 26 held out from the mapper work and 7 local, four of them private and anonymised.
  • Apple M1 Pro, CPU only, one gateway worker on SQLite, Python 3.12 as in the production image. A server with more workers and a server database will do better; read these as a floor.
  • Engine time is the gateway's own time per check. The agent's model and the network are excluded, except where a row says otherwise.
  • The default layer is reported with the score cache off: the attack suite repeats text, and the cache would flatter it.
  • This measures speed. What each guard catches is on the security benchmarks page.

6. How to reproduce it

python -m benchmarks.latency.fetch_repos var/latency/repos
python -m benchmarks.latency.map_repos var/latency/repos var/latency
python -m benchmarks.latency.run_latency var/latency/maps var/latency/run
python -m benchmarks.latency.report var/latency var/latency/results run

Every recorded call, the scripts and the head-to-head harness are in benchmarks/latency.

AgentFoxby Nometria

An open-source control plane for AI agents.

ProductOverviewHow it worksCoding agentsMCPControl pointsDiscoveryCapability grantsRuntime guardrailsEvidence and auditCompliance
ResourcesCoverageSecurity benchmarksLatency benchmarkCompareBlogSecuritySupportPlaygroundLiveDocsPricing
ProjectSupportSourceLicence: Apache-2.0Report a vulnerability
LegalPrivacyTermsSecurityLegal

Apache-2.0. Security reports go through GitHub’s private advisories rather than a public issue; the route is in SECURITY.md.