agentgateway vs numbat

Both are catalogued under Guardrails & Security. The figures come from the GitHub API; the assessments are ours.

At a glance

At a glanceagentgatewaynumbat
LicenseApache-2.0Apache-2.0
LanguagesRust, GoGo
DeploymentSelf-hosted / Runs locallyRuns locally / Self-hosted
MaturityGrowingExperimental
Stars4.4k924
Star growth over the last 7 days
Forks73097
Open issues3436
Last commit14 Aug 202614 Aug 2026
ActivityActiveActive

What each one does

agentgateway

A Rust data plane that sits between agents and everything they call — model providers, MCP servers, other agents — so authentication, RBAC, rate limits and OpenTelemetry export are configured once instead of reimplemented in every agent. Solo.io donated it to the Linux Foundation in August 2025 and it moved under the Agentic AI Foundation in June 2026, alongside MCP and goose. It is young for something that sits in the request path: per-user identity onto downstream MCP servers is still an open issue, so confirm the authentication model you need before putting it in front of production traffic.

Full entry →

numbat

numbat is a single binary that watches supported desktop, CLI, IDE and gateway agents through hooks, plugins and OTLP/HTTP log exporters, normalizes their activity into one event model, and evaluates it with a local CEL rule engine that writes versioned NDJSON events, findings and enforcement decisions. It also reconstructs past sessions from on-disk artifacts via `numbat scan`, so you can investigate an agent that was never instrumented. Blocking is deliberately conservative: enforce mode is off by default and every shipped rule is monitor-only, so denying an action means copying the rule YAML into your own `--rules-dir`, keeping its id, adding `enforce: true` and bumping the version. It is a poor fit if you expect coverage of arbitrary agents or a definitive account of what ran — the coverage matrix decides what is observable per host and surface, at-rest reconstruction cannot recover activity an agent never persisted, and findings are rule matches rather than proof that an action completed.

Full entry →

What you can do

agentgateway

  • Put several MCP servers behind one portOne mcp backend takes a list of named targets — the repository's multiplex example launches mcp-server-time with uvx and server-everything with npx — and exposes them together on a single bind. stdio, SSE and streamable HTTP all terminate at the gateway, so the client sees one endpoint.
  • Authorise individual tool calls with CELmcpAuthorization rules are CEL expressions over the verified JWT and the call itself: mcp.tool.name == "echo" leaves one tool open to anyone while jwt.sub == "test-user" && mcp.tool.name == "get-sum" restricts another to a single subject. Tool-level policy is what the MCP specification explicitly declines to enforce itself.
  • Route by cost rather than by model nameA virtual model dispatches to real backends through conditional rules — the cost-routing example sends requests whose max_tokens is 1024 or less to gpt-4o-mini and larger ones up the tiers — with the last target acting as the required fallback. Budget and spend controls, prompt enrichment and failover sit on the same OpenAI-compatible surface.
  • Run it standalone or as a Gateway API controllerA single binary reading flat YAML covers local and non-Kubernetes deployments; the built-in controller implements Gateway API plus the Inference Gateway extensions, routing to self-hosted models on GPU utilisation, KV cache state, LoRA adapters and queue depth. Guardrails hook into regex filters, OpenAI moderation, Bedrock Guardrails, Model Armor or a custom webhook.
  • Check the identity story before committingEnterprise SSO with per-user credentials to downstream MCP services, OAuth Identity Assertion for cross-app access and custom OAuth scopes are all still open issues, and another reports that the current versioning scheme breaks automated patch updates. The proxy is production-shaped; the delegated-identity half of it is not finished.

numbat

  • Survey an endpoint before instrumenting itnumbat agents lists discovered agents and numbat scan --agent codex parses their on-disk session artifacts; both are read-only and install no hooks or agent config changes.
  • Stream live activity to a local record filenumbat hook install --agent codex --emit all appends events, findings, indicators and applicable enforcement decisions to ~/.numbat/records.ndjson, while numbat hook status verifies configuration only — not execution or delivery.
  • Write detections in CEL and test them firstCustom YAML rules run through numbat rules check --rules-dir ./numbat-policy and numbat rules test; a rules directory replaces an embedded rule when it reuses the same id, and --no-builtin-rules gives an operator-only catalog.
  • Promote a monitor rule into a denyCopy the shipped YAML from rules/, keep the id, add enforce: true, bump the version, then numbat hook install --agent codex --rules-dir ./numbat-policy --enforce; blocking applies only to agents with a supported synchronous pre-action hook.
  • Hand an investigation to someone elsenumbat timeline builds a per-session view and numbat case build / numbat case verify produce and check bundles with SHA-256 manifests — which establish internal consistency, not source authenticity; complete raw transcripts stay out of normal records unless you opt into adding evidence files.

Other comparisons