A safety system is engineered, not declared
Every AI product now ships with a page of safety language attached to it — a usage policy, a mention of “guardrails,” a paragraph about responsible deployment. Very little of that language is a system in the engineering sense: a set of components with defined inputs, defined outputs, a measured error rate, and an owner who can be asked why a given threshold sits where it does. This article is written for the second thing. It is a practitioner’s account of what has to exist, concretely, before “we have safety measures in place” is a true sentence rather than a hopeful one, drawing only on published framework documentation, system-card disclosures and peer-reviewed red-team research, and organized the way an engineer would actually build it: layered defenses first, then the policy that gives the layers something enforceable to check against, then the red-team process that tests the whole stack before a stranger does, then the telemetry that tells you afterward whether any of it is working, then the arithmetic that explains why none of these dials can be turned to maximum for free.
None of what follows is specific to one vendor’s product. It draws on documented practice across several organizations that have published enough detail to check: NIST’s risk-management structure, OWASP’s taxonomy of large-language-model application risks, MITRE’s catalogue of adversarial techniques against AI systems, classifier research published by OpenAI and Meta, automated red-teaming research from DeepMind, and the capability-threshold structure Anthropic uses to gate its own releases [1, 3, 4, 7, 9, 8, 13]. Where a claim rests on one organization’s account of its own system, that is stated as what it is — a vendor’s report, not an independently audited fact.
Four layers, and what each one actually catches
The instinct on a first build is to write one classifier, point it at the model’s output, and call the job done. That design has a single point of failure: whatever the classifier was not trained to recognize passes straight through, and whatever slips past the model’s own training does too, because nothing upstream was checking. A layered design exists specifically so that no single component’s blind spot is the system’s blind spot.
An input classifier scores the request before the model ever sees it, and its job is triage, not final judgment: catch what is cheap to catch early, so the model and every downstream layer spend their budget on what is left. An output classifier scores what the model actually produced, and it catches a distinct failure class — a benign-looking request that produced a harmful completion, or a harmful request the model answered despite its training. Meta’s Llama Guard is a useful worked example of this layer because it is published in enough detail to inspect: a model fine-tuned specifically to classify both the human turn and the assistant turn of a conversation against a stated risk taxonomy, producing a safe-or-unsafe judgment and, when unsafe, which category applied, and its authors report it matching or exceeding existing moderation tools on public benchmarks while explicitly supporting a customized taxonomy for a given deployment rather than a fixed one [9]. OpenAI’s moderation endpoint is a second published example of the same layer at product scale: a free, standalone classification service scoring text and images across categories including harassment, hate, self-harm and sexual content, that can either sit inline on a generation request or be called separately to screen content before it ever reaches a model at all [6]. The research account behind that kind of system, published by its own engineering team, is candid that the work is mostly not the model: a taxonomy and labeling instructions precise enough that two labelers agree, a data-quality process, and an active-learning loop built specifically to surface rare events that a random sample would almost never contain, since the categories that matter most are, by construction, the ones with the fewest examples [7].
System-prompt-level constraints are the layer easiest to build badly, because a system prompt reads like an instruction and instructions are exactly what a language model is trained to weigh against competing instructions in the same context — including ones an attacker supplied. OWASP’s taxonomy names this directly: prompt injection sits at the top of its risk list precisely because a system prompt is not a wall, it is a strongly weighted suggestion sharing a context window with everything else in the conversation [3]. The practical fix is not a better-worded system prompt; it is refusing to let the system prompt be the only thing standing between a request and an irreversible action. Anything the product would regret happening — a payment executed, a message actually sent, a file actually deleted — belongs behind a hard constraint enforced in code outside the model’s control: a tool the model cannot call without a separate authorization check, a rate limit the model cannot talk its way past, a scope the model’s credentials do not include regardless of what the conversation asks for. OWASP’s own name for the failure mode that results from skipping this is excessive agency: granting a model more functional reach than the task in front of it requires [3]. A constraint of this kind is deliberately dumb — it does not read the request, weigh intent, or get talked around, which is the entire point.
Monitoring is the fourth layer and the one most often skipped in a first build, because unlike the first three it produces no visible behavior at the moment of the request — its value shows up later, which is a separate section below. What matters here is that the four layers are genuinely separable engineering work: a team can ship an input classifier this sprint, an output classifier next sprint, hard-code the highest-risk tool calls behind real authorization the sprint after, and wire up monitoring last, and each addition narrows the system’s blind spot independently of the others. A system with all four is not four checks stacked for redundancy on the same failure mode; it is four checks aimed at four different failure modes, which is why the loss of any one of them is a specific, nameable regression rather than a vague reduction in “safety.”
Writing a misuse-control policy that binds
A misuse-control policy is not the same artifact as a safety mission statement, and the difference is testable: an enforceable policy names a condition, a threshold, an action, and who is authorized to trigger it, in that order, for each risk it covers. “We do not permit our product to be used for harm” fails this test on every count — it names no condition a machine or a reviewer can check, no threshold, and no action. It is not wrong, it is simply not yet a policy in the operational sense; it is a value the policy still has to be built to enforce.
NIST’s AI Risk Management Framework offers a structure worth borrowing directly rather than reinventing: four functions — Govern, Map, Measure, Manage — where Govern establishes who is accountable for a decision, Map identifies what could go wrong in a specific context of use, Measure attaches an actual metric to that risk, and Manage defines the response when the metric crosses a line [1]. The order matters. A policy that jumps straight to “Manage” — a list of prohibited uses — without first doing the Measure step has no way to know whether it is being followed, because nothing was ever instrumented to check. NIST’s companion Generative AI Profile makes the enforceability requirement concrete rather than aspirational: it enumerates more than two hundred specific recommended actions organized across twelve risk categories, each phrased as something a team can actually do — a documented action, not a documented hope [2].
The single clearest published example of a policy written to bind rather than to describe is Anthropic’s Responsible Scaling Policy, and it is worth studying for its structure rather than its specific thresholds, which are one company’s judgment call about one family of models. The policy defines named capability thresholds — a model demonstrably helping a novice meaningfully closer to a biological, chemical, radiological or nuclear weapon is one of them — and states that crossing a threshold does not trigger a conversation, it triggers a specific, pre-agreed bundle of mandatory controls before the model may ship at that capability level at all [13]. That is what “enforceable” means in practice: the trigger and the response were both agreed before anyone had a commercial incentive to argue about the trigger in the moment a real model brushed against it. A misuse-control policy built the same way for any product states, for each risk category identified in the Map step, the specific signal that constitutes a violation, the specific threshold of that signal that changes the response, and the specific action taken — throttle, require human review, suspend, escalate — with a named role authorized to take it. A policy that instead lists categories of prohibited use without attaching a detection method to each one is a Map with no Measure and no Manage; it reads as commitment and functions as description.
Red-teaming your own system before it ships
Every layer described so far can be built competently and still fail the first time a motivated user tries to get around it, because a classifier trained on the failure modes its builders imagined is a classifier blind to the ones they did not. The only defense against that gap is deliberately trying to find it before deployment, with the same effort a real attacker would spend, against your own system, on your own schedule.
Hand-written red-team prompts do not scale to the space of things a determined user might try, which is why the strongest published approach automates the search itself. Perez and colleagues at DeepMind demonstrated the method cleanly: use one language model to generate adversarial test cases against a second, target language model, ranging from simple zero-shot prompting of the red-team model up through reinforcement learning that rewards the red-team model specifically for provoking the target into an undesired response, and the approach surfaced tens of thousands of distinct offensive completions from a 280-billion-parameter chatbot, including harms the researchers had not anticipated in advance, such as private information leaking out over the course of a multi-turn conversation rather than in any single turn [8]. Two properties of that result matter for a practitioner more than the raw count: the method finds failures nobody wrote a test case for, because it searches rather than enumerates, and the multi-turn finding is a direct warning against testing safety layers turn-by-turn when a real conversation accumulates context a single-turn evaluation never sees.
A useful complement to automated generation is a structured threat model rather than an open-ended “try to break it” exercise, because an unstructured red team reliably rediscovers the same handful of easy jailbreaks and calls the job done. MITRE’s ATLAS catalogue exists to prevent exactly that: a maintained taxonomy of adversary tactics and techniques against AI systems, drawn from documented real-world incidents and organized the way a security team already organizes conventional attack surfaces, covering everything from data poisoning during training to prompt-injection techniques against a deployed system to supply-chain compromise of a model’s dependencies [4]. Running a red-team campaign against a checklist built from a catalogue like this, rather than against whatever the team happened to think of that week, is the difference between coverage and anecdote. Google’s own security framework for AI systems makes the same point from the defender’s side: it explicitly calls for extending an organization’s existing detection-and-response capability to cover AI-specific threats rather than treating AI red-teaming as a separate discipline invented from scratch, on the reasoning that most of the attack surface — the infrastructure, the data pipeline, the access controls — is not actually new [5].
The organizational detail that most first-time builders skip is isolation. A red-team exercise that runs against the same production environment real users hit, using the same credentials and the same monitoring configuration, contaminates its own results — a successful attack either causes real harm before anyone notices, or gets caught by a layer the red team then wrongly credits with catching everything, when in reality it caught only the one thing they happened to try in front of it. A held-out evaluation environment, walled off from production traffic and instrumented separately, is what makes it possible to test a system’s actual limits — including deliberately testing configurations with individual safety layers disabled, to learn what each layer alone is actually contributing — without those tests ever reaching a real user or corrupting the production monitoring baseline this article gets to next.
Instrumenting for what happens after the launch
Every layer above this point is a pre-deployment decision: a classifier trained once, a constraint bolted into the code once, a policy threshold agreed once, a red-team campaign run once before ship. None of that tells a team what is actually happening a month after launch, when real traffic is running through a system that was tuned against a red team’s imagination rather than against the specific population now using it. Monitoring is the layer that closes that loop, and it fails silently if it is treated as a dashboard someone glances at rather than as a pipeline with its own inputs and outputs.
The minimum viable version logs, for every request that touches a safety layer, what the layer scored, what threshold it was compared against, and what action followed — not just the aggregate block rate, which hides exactly the information a team needs when something changes. A classifier’s score distribution on real traffic drifts as language, slang and attack technique evolve, and a system that only alerts on a hard block count will not notice a slow drift toward the threshold until it has already been crossed. OWASP’s inclusion of “unbounded consumption” as a distinct top-ten risk is a reminder that monitoring has to cover resource and cost abuse alongside content harms — a system with perfect content classifiers can still be quietly drained by an automated client making the same expensive query millions of times, a failure mode invisible to any classifier scoring individual messages for harmful content [3].
Two published examples illustrate what a healthy feedback loop actually looks like once monitoring exists. The AI Incident Database exists because, across the industry, deployed AI harms are repeatedly rediscovered rather than learned from — it is a maintained public record explicitly modeled on the incident databases aviation and cybersecurity built for the same reason, on the premise that a failure that is never centrally recorded gets repeated by someone else who had no way to know it had already happened [11]. A team that treats its own internal incident log the same way — a durable record of every safety-layer miss, not just the ones severe enough to trigger a public postmortem — is applying the same lesson at the scale of one product rather than waiting for the industry-wide version to catch it. METR’s ongoing work is a second, different kind of monitoring: rather than watching for a single system’s failures, it tracks capability itself over time across many frontier models, evaluating dangerous autonomous capabilities and reporting a measured trend in how long a task a model can reliably complete unsupervised [12]. The lesson for a single deployment is the same one at a different altitude — a safety system tuned against what a model could do at launch has an expiration date, because the model behind it, or the surrounding tooling that gives it more autonomous reach, keeps changing after the tuning was done. A monitoring plan that never re-evaluates its own thresholds against the current system is measuring last quarter’s product.
The strictness dial and what it costs
Every classifier and every policy threshold described above reduces, underneath the specifics, to the same decision rule: compute a score, compare it to a threshold, act if the score crosses it. Moving that threshold does not make the system more accurate. It trades one error for the other, and the honest engineering question is never whether a threshold is strict but what it costs to make it stricter.
The cost is measurable and it is not small, even for a genuinely well-built classifier, and the reason is arithmetic rather than a flaw in any particular model. Suppose a classifier catches 98% of genuinely harmful requests and wrongly flags only 1% of benign ones — numbers that would read, on a slide, as a strong result. If the true base rate of harmful requests in real traffic is low, say one in two thousand, which is the ordinary case for a general-purpose product, precision — the share of flagged requests that are actually harmful — is
where
The other side of the same trade has an independent, peer-reviewed measurement. Cui and colleagues built OR-Bench specifically to quantify over-refusal — a model or a classifier wrongly rejecting a harmless request because it superficially resembles a harmful one — evaluating 32 models across 8 families against roughly 80,000 prompts designed to be safe but adversarially phrased to sound otherwise, and their explicit finding is that enhanced safety measures routinely come with over-refusal as a side effect, degrading a system’s practical usefulness even where nothing unsafe was ever at risk of happening [10]. Read together with the base-rate arithmetic above, the two results say the same thing from opposite directions: a classifier’s accuracy number and its practical cost are different quantities, and a threshold chosen to look strict on a slide can be, simultaneously, a threshold that floods a review queue with noise and turns away a large share of the legitimate users the product exists to serve. The engineering response is not to pick a single global threshold at all. It is to tier the response to severity — a low-confidence flag routes to lightweight friction or a second, cheaper check; only a high-confidence flag on a genuinely severe category triggers a hard block or human escalation — so that the threshold being tuned is never forced to serve every risk category and every consequence at once.
What actually has to be true for this to hold
None of the four layers, the policy structure, the red-team process, or the monitoring pipeline described here is a discovery. Every piece of it has been published, in some form, by a standards body, a security framework, or a lab’s own engineering team, which is precisely why treating “we have safety measures” as self-certifying is avoidable rather than excusable. What is missing in most first builds is not knowledge of these components; it is the discipline to build all four layers as genuinely separate systems, write the policy as triggerable rules rather than as intent, red-team the whole stack in isolation before a stranger does it in production, and keep measuring after launch on the understanding that a system tuned once is a system that is already going stale.
Horizon: 12 August 2029. Three observations, stated with what would prove them wrong. First, tiered, severity-differentiated response will displace single-threshold blocking as the default architecture for new deployments, because the base-rate and over-refusal costs documented here are structural rather than fixable by a better classifier; this would be disconfirmed by major platforms still publishing a single aggregate block rate with no severity breakdown by the horizon date. Second, published system documentation will increasingly report false-positive and false-negative rates as a paired disclosure rather than a single headline safety percentage, following the pattern OR-Bench’s methodology established for over-refusal specifically; this would be disconfirmed if leading system cards in 2029 still report one blended accuracy figure with neither error rate broken out. Third, automated, model-generated red-teaming will become a standard pre-ship gate documented in release processes the way unit-test coverage is today, because the method’s core advantage — finding failures nobody wrote a test case for — does not depend on any specific model generation; this would be disconfirmed if automated adversarial generation remains confined to research papers rather than appearing in vendors’ own documented release checklists.
A deployment safety system that actually holds is not the one with the strictest classifier or the longest policy document. It is the one where every layer can be pointed to, tested in isolation, and shown to be doing a specific, nameable job — and where someone can say, with a number rather than a slogan, what it costs.