Skip to main content

Solutions · Guardrails & governance

Guardrails you
can change live.

Moderation thresholds, allowed models, output limits, and strikes, set per plan or per customer in Limitr Cloud and enforced inside your app on every call.

Lumen · Free · model outputsscored by your moderation model
  1. Reply to a refund request0.18ok
  2. Product copy for a knife set0.42ok
  3. Roleplay scene with dark themes0.66ok
  4. Instructions close to a policy line0.71ok
  5. Insulting message about a coworker0.84ok
  6. Request for a stranger's home address0.95strike 1
Strikes this month2 left before a pause
Free plan · guardrailslive on 3 engines
Allowed modelshaikusonnetopus
Max output1,000 tokens
Strikes before a pause3 a month
Pause length24 hours
Drag the threshold. Every engine has it on the next call.
Made-up account, outputs, and scores · strikes and the pause behave as on engine 0.8.5

The problem

Your safety rules wait
in a deploy queue.

A threshold hard-coded in one service, a model list in another, a ban list in a spreadsheet. When something goes wrong at 2 a.m., changing a rule means a release.

moderation-svc
0.8
threshold, hard-coded
gateway .env
2 models
the allowlist, set per deploy
Spreadsheet
Ban list
edited by hand, checked by nobody
change any rule■ ship a release

How it works

Guardrails are entitlements
with settings.

The same policy that gates features and bills usage carries your safety settings: a threshold, a list of models, a token cap, a strike limit. Each plan gets its own, and each customer can get stricter ones.

Policy · livePolicy
Live, no unpublished changes · v23
EntitlementFreefree · defaultProproEnterpriseenterprise
moderationOutput safety thresholdsetting
modelsModels this plan can callallowlist
max_outputTokens per responselimit
strikesFlagged outputs a monthmeter
pii_redactionMask personal dataflag
regionsWhere requests may runsetting
Limitr Cloud policy editor · made-up plans · click any setting

Strikes and pauses

Meter strikes,
not just tokens.

A flagged output is metered like any other usage. Count strikes per account, warn before the limit, pause at it, and reset every month, without writing a ban system.

Strikes per account

Count flagged outputs against a user, a team, or the whole org. A shared limit covers everyone under the account.

Pause, don't ban

At the limit, take chat away for 24 hours. It comes back on its own, and the strike count resets with the month.

Stricter for some

A school district gets a lower threshold and no image generation, from a rule on its contract. Everyone else keeps the plan.

Governance

Every rule change
has an author.

Changes are versioned, reviewed, and published like code. See who changed what and when, compare any two versions, and roll back in one click.

policy · main3 engines live on v58
  1. v58moderation on Pro 0.80 → 0.70Priya, trust & safety · 2m agolive
  2. v57opus removed from Free modelsMarco · yesterday
  3. v56rule district_42: stricter moderationSales · Mon
  4. v55strikes on Free 5 → 3Priya, trust & safety · Oct 30
Made-up history

Under the hood

Every guardrail runs
in your app.

The rules run inside your app in Limitr's open-source, sandboxed engine, before the model is called. No extra hop, and they keep working if the network doesn't.

How the engine works →
Limitr Cloudedit
entitlementpro
modelshaiku, sonnet
moderation0.80
max_output8,000 tokens
Changed by sales, support, or you
policy.stofsame policy
pro: {
entitlements: {
models: {
allowed: ['haiku', 'sonnet']
fn enabled(c: Customer, e: str, ctx?: obj) -> bool {
self.allowed.contains(ctx?.model ?? '')
}
}
}
}
Your appengine inside
limitr engine
await limitr.check('ada', 'models', 1, { model: 'opus' })
→ false
Opus isn't on Pro, so the call never reaches the model.
one cell · one line · every engine■ runs in your process

Change the rules
without a release.

npm i @formata/limitr