The Control Layer for AI Agents

Ship AI agents with confidence.

Deterministic policies that intercept AI actions before execution check business rules, validate LLM outputs, guard against unsafe content. Every decision returns allow, block, or escalate.

Evaluation Modes
limits.check()

Conditions

Deterministic business rules on structured data. Evaluate amounts, thresholds, and user attributes. Same input, same result.

ALLOWBLOCKESCALATE
limits.evaluate()

Instructions

Validate LLM outputs against your policies. Intercept every AI response before it reaches users. Enforce compliance.

prompt+responsedecision
limits.guard()

Guardrails

Safety checks for every output. Detect PII, prompt injection, toxicity, and off-topic content. Block before it ships.

PIIInjectionToxicityOff-topic
limits.check()
request.amount > 10000
user.risk_level == 'high'
request.currency ∈ ['USD','EUR']
user.verified == false
Block > Escalate > Allow

Business rules on structured data.

Evaluate amounts, thresholds, user attributes with check(). Same input, same result. Always deterministic.

Conditions
limits.evaluate()

Validate LLM outputs against your instructions.

Intercept every AI response before it reaches users with evaluate(). Enforce compliance, not hope for it.

Instructions
limits.guard()
PII DetectionSSN: 123-45-6789
Prompt InjectionIgnore all previous...
Toxicity FilterThank you for your help
Off-topic GuardProduct comparison table

Safety guardrails for every output.

Scan for PII, prompt injection, toxicity, and off-topic content with guard(). Block before it ships.

Guardrails
Human-in-the-Loop
Escalation Queue3 pending
high-value-refund$8,200 · 2m ago
pending
prod-deploymentv2.4.1 · 5m ago
approved
data-export42k rows · 12m ago
declined

Human-in-the-loop when it matters.

Flag edge cases for review. Approve or decline from the dashboard or SDK. Full audit trail on every decision.

Escalations
Decision logs
timetypeiddecision

Every decision logged and auditable.

Full audit trail for every action with timestamps and outcomes. Debug and comply with one source of truth.

Logs
Quick Start
limits-demo/src/sqlAgentHandler.ts
sqlAgentHandler.ts×
1import { Limits } from '@limits/js'
2 
3const limits = new Limits({ apiKey: process.env.LIMITS_API_KEY })
4 
5// 1) Business rules: user role, allowed tables/schemas
6const accessCheck = await limits.check('#sql-agent', { userId: user.id, role: user.role })
7if (accessCheck.isBlocked) return { ok: false, reason: 'access_denied' }
8if (accessCheck.isEscalated) return { ok: 'escalate', forReview: true }
9 
10// 2) Validate SQL agent output (e.g. no DROP, no raw PII in query)
11const suggestedQuery = await getSqlFromLLM(userQuestion)
12const queryCheck = await limits.evaluate('sql-query-policy', userQuestion, suggestedQuery)
13if (queryCheck.isBlocked) return { ok: false, reason: 'query_policy' }
14 
15// 3) Guardrails: PII, injection, toxicity in query text
16const safetyCheck = await limits.guard('#safety', suggestedQuery)
17if (safetyCheck.isBlocked) return { ok: false, reason: 'content_blocked' }
18 
19return { ok: true, query: suggestedQuery }
TypeScript
Ln 1, Col 1
Platform

Everything you need to enforce.

Define once, enforce everywhere. The Limits platform gives you a visual editor, simulation tools, audit logs, and team workflows—so policies aren't just code in a repo.

TypeScript SDK@limits/js
Read the docs
#payments
Policy Tags
Evaluate multiple policies with one call using #tags. Strictest result wins.
"Block over $10k"
AI Assistant
Describe policies in plain English. The assistant generates conditions automatically.
simulate()
Policy Simulation
Test policies against sample data before deploying to production.
logs
Audit Logs
Every allow, block, and escalate logged. Filter, search, export.
slack
Notifications
Slack and webhook alerts on escalations, blocks, and policy changes.
app.limits.dev
Dashboard
Active policies, pending approvals, request volume. Real-time overview.
Pricing

Start free, scale as you grow.

Free

Perfect for developers getting started

$0/month
  • Unlimited policies
  • Unlimited agents
  • Up to 1,000 policy checks/mo
  • 1 Seat
  • 3 days logs
  • Email support
Start for free
Most Popular

Pro

For teams building AI products

$49/month
  • Unlimited policies
  • Unlimited agents
  • Up to 10,000 policy checks/mo
  • Extra checks: $1 for 1,000 extra checks
  • Up to 5 Seats
  • 30 days logs
  • Human approval workflows
  • Notifications
  • Priority Support
Get Started

Enterprise

For organizations at scale

Custom
  • Everything in Pro, plus:
  • Unlimited policy checks
  • Unlimited seats
  • Custom control engine
  • SSO & RBAC
  • Dedicated support
  • SLA guarantee
  • On-premise option
Contact Sales
FAQ

Frequently asked questions.

Limits has three modes: Conditions (check()) for business rules on structured data like amounts and user attributes; Instructions (evaluate()) for validating LLM responses against your policies before they reach users; and Guardrails (guard()) for safety checks like PII detection, prompt injection, and toxicity filtering.

Tags let you evaluate multiple policies with a single SDK call. Prefix any string with # (e.g. '#payments') and Limits evaluates all policies with that tag. The strictest result wins: Block overrides Escalate, Escalate overrides Allow.

Escalated requests are flagged for human review. Your team can approve or decline from the Limits Dashboard or programmatically via the SDK. You get a full audit trail of who took action and when.

Conditions evaluation is deterministic and sub-millisecond at the edge. Instructions and Guardrails modes involve policy evaluation and return results in tens of milliseconds. The SDK uses native fetch with zero external dependencies.

Yes. The Limits AI Assistant lets you describe policies in plain English—like 'Block refunds over $5,000' or 'Escalate when risk is high'—and generates the conditions automatically. You can then refine in the visual policy editor and simulate before deploying.

The @limits/js SDK works with any Node.js 18+ environment. It ships ESM and CommonJS builds with full TypeScript types. Use it with Express, Next.js, Vercel Edge, or any JavaScript/TypeScript runtime.

Limits evaluates policy metadata—action names, field values, and text content you send for guardrail checks. We don't store prompts or model outputs beyond the evaluation. All API communication is encrypted via TLS.

Ship with confidence

One control layer for every agent