Skip to content
GEOstack

Named comparison

Arc vs NVIDIA NeMo Guardrails

Direct answer: NeMo Guardrails is an open-source toolkit that constrains LLM conversations — input, dialog, retrieval, and output rails written in Colang. Arc is an action control plane: every agent action passes an allow/ask/block policy, risky ones pause for human approval, and approved work executes only as an ES256-signed request your app verifies. Different layers. Most production teams run both.

What NeMo Guardrails actually is

NeMo Guardrails is NVIDIA's open-source (Apache 2.0) Python toolkit for adding programmable rails to LLM-based conversational systems. It supports five rail categories — input, dialog, retrieval, execution, and output — defined in Colang, a Python-like DSL for dialogue flows. Input rails can reject or rewrite a user message; dialog rails steer the conversation through canonical intents; retrieval rails filter RAG chunks; output rails check what the model says before the user sees it. NVIDIA also ships NemoGuard NIM microservices for content safety and topic control (licensing varies — check NVIDIA's site).

It's a genuinely good toolkit for its job: keeping a conversational system on-topic, moderated, and structured. If your problem is “the bot said something it shouldn't,” NeMo Guardrails is built for exactly that.

Where the layers split

NeMo Guardrails' newest piece — execution rails — does get closer to the action: check tool input / check tool output flows let you validate tool parameters in Python before an action fires. Worth being precise about what that is and isn't:

  • It's in-process code you write, running inside the same Python process as the agent. There's no out-of-band policy service, so a code path that skips the rails skips the guardrail.
  • There's no human approval lifecycle. A rail can block a tool call; it cannot park it in a queue, page a human, expire after an hour, and resume on approval.
  • There's no execution proof. Nothing cryptographically binds “this action passed the rail” to “this is what your app executed.” Arc delivers approved work as an ES256-signed JWS — your app verifies signature, timestamp, nonce, and a hash of the exact body before business logic runs.
  • There's no enforced spend cap or tamper-evident audit. NeMo Guardrails doesn't meter cumulative dollars or write a hash-chained log; Arc does both (sha256(prev_hash + canonical_json), redacted).

The honest framing: NeMo Guardrails governs the model layer — what goes into and comes out of the LLM. Arc governs the action layer — whether issue_refund or delete_customer is allowed to run at all, who approved it, and whether what executed is what was approved. Neither stops prompt injection at the model level — Arc explicitly does not; it's the layer that limits what an injected agent can do.

Capability comparison

Arc vs NeMo Guardrails — capability comparison
Capability Arc NeMo Guardrails
Input/output content moderation out of scope input + output rails
Dialog/topic steering (Colang flows) core strength
RAG retrieval filtering retrieval rails
Tool parameter validation via policy conditions execution rails (in-process Python)
Pre-action allow / ask / block policy default-deny block/allow in code; no ask
Human approval queue (expiry, scoping) built in
Signed (ES256), app-verified execution
Cumulative spend caps that enforce atomic
Tamper-evident hash-chained audit logs only
Self-hostable open source hosted control plane Apache 2.0
Stops prompt injection not the model layer input rails reduce, don't eliminate

● full · ◔ partial · ○ no

Run them in series, not in competition

These tools compose cleanly. Rails clean the text; Arc gates the consequence:

user → NeMo Guardrails (input/dialog/output rails — the text)
     → agent decides to act
     → Arc (allow / ask / block → human approval → ES256-signed exec)
     → your app (verifies signature, runs business logic)

Arc's policy is a few lines of TypeScript (npm i @geostack/arc):

actions.ts
import { defineActions } from "@geostack/arc";

export const actions = defineActions({
  draft_reply: { policy: "allow" },                      // harmless, let it run
  issue_refund: {
    policy: "ask",                                       // pause for a human
    limits: { maxAmount: 200, cumulativePerDay: 1_000 }, // enforced, not advisory
  },
  delete_customer: { policy: "block" },                  // never, signed or not
});
// anything not declared is denied by default

Pick NeMo Guardrails, not Arc, if

Your system is conversational and read-only — a support bot, a RAG assistant, a docs Q&A — where the worst failure is bad text: off-topic answers, leaked PII in a response, a jailbroken persona. Nothing moves money, sends to customers, or mutates production. Rails on the conversation are the right and sufficient tool, and they're free and self-hosted.

You need Arc alongside it the moment that bot grows hands — refunds, cancellations, deletes, infra changes. A Colang flow can shape what the model says; it cannot queue a $4,000 refund for a human, enforce a daily cumulative cap atomically, or prove to an auditor that what executed is what was approved. One enterprise client reportedly ran up ~$500M on Claude in a single month with zero usage caps (an AI consultant's account reported by Axios — unconfirmed, company unnamed). Rails on the dialog would not have touched that.

Arc pricing: free Developer tier, Team $99/mo, Business $499/mo, Enterprise custom. NeMo Guardrails the toolkit is free; for NIM microservice licensing, check NVIDIA's pricing.

FAQ

Is NeMo Guardrails enough to stop my agent from taking destructive actions?

Not on its own. Execution rails can validate tool inputs in-process, but there's no out-of-band policy enforcement, no human approval queue, and no signed execution — any code path that bypasses the rails bypasses the guardrail. For destructive actions (deletes, refunds, sends), you want a default-deny action layer like Arc in front of the action itself.

Does Arc replace NeMo Guardrails?

No. Arc doesn't moderate content, steer dialog, or filter RAG chunks — that's the model layer, and NeMo Guardrails is good at it. Arc governs the action layer. Teams with a conversational agent that also acts typically run both: rails on the text, Arc on the action.

Does either tool stop prompt injection?

Neither fully. NeMo Guardrails' input rails can catch many injection patterns but not all; Arc doesn't inspect prompts at all. Arc's contribution is blast-radius control: even a fully injected agent can only attempt the actions your policy allows, and the risky ones still stop at a human approval.

Can NeMo Guardrails require a human to approve an action?

There's no built-in approval lifecycle — no pending queue, expiry, or per-user authorization. You could build one as a custom action, but at that point you're building an approval system. Arc ships it: ask-policy actions pause, a human approves in the console, and the action executes as a signed request your app verifies.

Is Arc open source like NeMo Guardrails?

No. The @geostack/arc SDK is on npm and verifies signed execution inside your app, but the control plane is hosted. Free tier, no credit card; metered on protected agents and guarded actions, not seats.

Rails on the text. Arc on the action.

Put one risky agent action behind allow / ask / block, approval, and signed execution — free Developer tier, no credit card.

Last updated 2026-06-12. NeMo Guardrails capabilities per NVIDIA's docs at time of writing — verify current features against their documentation.