Skip to content
Air Automations
All posts
StrategyJune 10, 20266 min read

Nemotron 3.5 Safety: Why One Filter Won't Hold Your Agents

NVIDIA Nemotron 3.5 Content Safety is customizable—and that's the trap. Why agent safety has to be per-decision, and what it costs to do right.

By the airautomations team

The global safety gate is already broken for agents

A chatbot that generates marketing copy and an agent that provisions cloud infrastructure should not share the same safety filter. Yet most teams deploy exactly one moderation layer across both because that's what OpenAI's moderation endpoint and Llama Guard were designed for—text classification on outputs meant for human eyes. An agent is different. It doesn't just generate text. It calls tools. It reads databases. It executes shell commands.

Vercel's updated Terms of Service now explicitly permit agents to initiate infrastructure actions on your behalf. That's not rhetoric; that's a 2024 shift in what "safe" means at runtime. A false positive from a global safety gate—flagging a legitimate database query as suspicious—doesn't just frustrate a user. It strands a workflow mid-execution, breaks idempotency guarantees, and orphans transaction state. A false negative lets an agent delete production data.

One gate cannot serve both cases. Neither loose enough for ops nor strict enough for irreversible writes.

What Nemotron 3.5 Content Safety actually gives you

NVIDIA's Nemotron 3.5 Content Safety is not a hardcoded policy applied at inference time. It's a fine-tunable 7B parameter classifier that accepts a customizable harm taxonomy. Where Llama Guard shipped with fixed categories (violence, sexual content, etc.), Nemotron lets you define your own—or layer domain-specific ones on top of the defaults.

The model ships as a NIM microservice, deployable to your infrastructure with a ~sub-100ms classification budget per call. You can classify inputs, outputs, or—critically for agents—tool call arguments before execution. A DELETE statement bound for your database doesn't need the same safety posture as a GET.

Nemotron sits between chatbot-style moderation (Gemini's built-in safety settings) and the constitutional approach (Anthropic's system prompts). It's not training a new model; it's reusing a proven classifier and tuning its taxonomy. That matters for cost and latency, which we'll get into shortly.

Per-decision safety posture: the pattern that actually scales

The core move is classifying every agent decision by blast radius, then binding a Nemotron policy to each class. A read-only query (SELECT from a permission-checked table) deserves a loose policy. A reversible write (update with automatic rollback on error) gets tighter. An irreversible write (DELETE, or a wire transfer) goes strict. External comms (sending an email in your company's name) goes stricter still.

Policy becomes config. Store it in YAML or Postgres, keyed on tool name. When the agent tries to call delete_user_account(user_id=123), your tool router looks up the policy for delete_user_account, spins up Nemotron with that taxonomy, and classifies the arguments before passing them to execution. If Nemotron flags it above your confidence threshold—and you've set that threshold per decision type—you escalate to human-in-the-loop or retry with a rewritten request.

The detail that saves you at 2am: every safety reject must be idempotent and logged. If a policy blocks an action, the agent needs a structured reject schema (category, confidence, suggested_remediation) so it can retry with different arguments, not just halt. Dead-letter queues catch the low-confidence verdicts that humans review later, and those reviews retrain your policy over time.

This is where agents diverge from workflows. Workflows are DAGs with known failure modes. Agents make decisions in real time. Your safety classifier is part of that decision surface.

The latency and cost ledger nobody shows you

Adding Nemotron classification to every tool call introduces 80–150ms of latency per call if you're running the NIM remotely. A typical agent run spans 12 tool calls. That's a worst-case 1.8 seconds of pure safety overhead. Double it if you classify both pre-plan and pre-execute (a smart pattern for high-risk operations: once before committing the plan, once before execution).

Cost math: Nemotron at ~$0.0002 per call, 12 calls per run, 100 runs per day = ~$0.24/day at the single-agent level. At scale—ten agents, 10k runs per day—that's $240/day in safety classifier spend alone. Not catastrophic, but not invisible either.

Latency is where you actually lose money. Agent latency lives in retrieval and tool calls, not model inference. Claw back that latency with Redis-backed caching: key on (tool_name, arg_hash), store the Nemotron verdict for 24 hours, and skip classification on repeat calls. For workflows with deterministic arguments (the same database query run every morning), you can cache aggressively and cut that overhead to near-zero.

Colocate the NIM container with your agent runtime if you can. Network RTT to a remote Nemotron instance is the killer. Running it on the same Kubernetes node, or in the same Vercel deployment, cuts that 80–150ms down to 10–20ms.

Wiring it up: orchestration patterns that don't fall over

Treat safety as middleware. If you're using the Vercel AI SDK, hook Nemotron into the tool router before execution. If you're using LangGraph, it's a pre-execution node that either passes control forward or raises a structured safety exception.

That exception schema matters. Instead of `{"error": "blocked"}`, you want `{"category": "potential_sql_injection", "confidence": 0.87, "suggested_remediation": "rewrite_with_parameterized_query"}`. The agent can read that and retry intelligently—rewrite its SQL, or escalate if it can't. Hard-fail silently is how you get orphaned state at midnight.

Audit every classification verdict to Postgres. Tool name, arguments, policy applied, Nemotron confidence score, verdict (pass/fail), timestamp. You'll review this data once a week with the on-call engineer. It's how you catch policies that are too loose or too strict before they bite you in production.

Ship in shadow mode behind a feature flag. Log all verdicts without enforcing them for two weeks. That gives you a baseline on false-positive rate and confidence distribution before you actually block agent decisions. If you see 40% false positives on your DELETE policy, you tune it before it starts blocking legitimate operations.

How we'd start tomorrow morning

Inventory every tool your agent can call. Tag each with blast radius: read-only, reversible, irreversible, external. Pick the three highest-risk tools—probably your deletion, update, and comms tools. Write strict Nemotron policies for those first. Leave everything else on a permissive default while you tune.

Deploy behind a feature flag. Instrument P95 latency on the classifier and false-positive rate from day one. You're not looking for a perfect signal; you're looking for signal stability. If your DELETE policy has 85% true-positive rate on week one and 88% on week two, you're trending the right way.

Review weekly. Whoever is on-call that week reads the audit log and the dead-letter queue. Are there common patterns in what got blocked? Are there near-misses—high confidence verdicts that were borderline? That's your input for next week's policy tune.

If you're staring at a tool registry wondering which calls deserve a strict policy and which don't, that's the audit we run in week one of a safety implementation. The patterns are always the same; the tool names change. Workflow engineering at scale includes this—not as an afterthought, but as a design input. If you're ready to start that conversation, reach out to us.