Is Anthropic's Opus 4.8 Exempt from their Cyber Verification Program?

My AI-enabled threat intelligence pipeline got blocked by a safety filter for trying to read a news article.
Not a leaked zero-day. Not malware source code. A public write-up, on a mainstream security news site, about a software supply-chain worm — the kind of story every defender on the planet read this week. My collection agent reached for it, and the API slapped it down with an HTTP 400 and a note about “violative cyber content.”
We hadn’t analyzed anything. We hadn’t written anything. The agent reached for a source, and the door got shut.
I’m enrolled in Anthropic’s Cyber Verification Program, which exists to keep legitimate, dual-use security work from getting swept up in policies built to stop the bad guys. And I was still getting blocked. So I did what you’d do — assumed I’d built something I shouldn’t have, and went looking for it.
I hadn’t.
The AI Pipeline

I’ll keep the architecture intentionally vague. It’s an assembly line of AI agents. Early stages gather and vet open sources. The middle stages structure and characterize what was found. Later stages fact-check, review, and render the finished product. The whole thing only ever supports cyber defenders. It takes adversary behavior that’s already public and turns it into something a security team can use.
Anthropic’s blocks clustered at two stages during my testing (but almost certainly would block at others). The first was in the information collection stage, when an agent reached for a source. That was this morning. The second issue hit me yesterday during a quality-assurance pass, where an agent reads the finished advisory and judges whether someone new to the topic could follow it.
The blocked request was a readability check. The prompt was, more or less, "pretend you've never heard of this campaign and tell me if this document is clear." It wasn’t analyzing an exploit. It was proofreading. That’s the "dangerous" cyber content that got killed.
Diagnosing the Problem
Before I touched anything, I had to answer one question. Was the pipeline actually breaking the rules, or was it tripping a filter as a false positive? What changed from a few days ago when this was working fine? The only thing I had changed was updating my model choice for some agents from Opus 4.7 or Sonnet 4.6 to Opus 4.8 (foreshadowing). My first impression was that something had changed in Anthropic’s safety guardrails, but that doesn’t seem to be the case.
So, with the help of a freshly minted "pipeline audit" Claude skill, I audited the whole pipeline against Anthropic’s TOS and CVP standards. The first thing I uncovered was that I obviously (or perhaps not so obviously?) was not in violation of the TOS or my CVP program status. Okay good. As expected. So what’s the deal?

Horizontal: how much offensive-sounding language a request carries.
Vertical: whether the component does something the policy bans. Everything dense sits on the right. Almost nothing sits up top.
For this audit, I wanted to understand two things.
First, does this component do something the policy bans, such as building an exploit, writing malware, or breaking into something? Second, how concentrated is the offensive-sounding language in any single request, regardless of why it’s there?
If you read the policy closely, every cyber prohibition is a verb of making or doing — creating malware, developing an intrusion tool, gaining unauthorized access, or bypassing a control. Each of them is about building offensive capabilities or taking unauthorized action. My pipeline does the opposite. It describes what attackers do so defenders can recognize it and shut it down. That’s not me finding a loophole.
I plotted every piece of my system on two axes. Substantive behavior (does the agent actually do anything wrong?) and Classifier Surface (how dense is the scary language sent to the API?). As expected, nothing landed in the top-right, which would have likely indicated some sort of violation. Plenty of stuff sat on the right (dense language), but stayed glued to the bottom (purely descriptive). Zero substantive violations.
If nothing was wrong, why was it getting blocked?
So Why the Blocks?

My working theory right now is that Opus 4.8 is heavily intolerant of term density within the context window (though this hypothesis has not been tested extensively beyond the scope of my own use case described here). By the time my agent calls the model, that request is hauling the instruction plus a content-heavy template plus several full articles, in this case, describing a self-propagating worm in loving technical detail. Each piece read separately is harmless public reporting. Stacked together, they’re a wall of offensive-capability language, and my assumption is that at least in part, a safety filter scores the wall, not the bricks.
For now, I think that is why it died. Nothing significant had changed in my pipeline other than my choice of model. I had my CVP program exemption, I was abiding by the TOS, and I hadn’t done anything other than ask the model to retrieve an article and review something already written effectively for legibility. It seems the request reaching that source was already carrying a ton of other "scary" information (despite having defensive-postured prompts), and the API rejected it.
This isn’t a wrong-account problem. The pipeline runs through Claude Code in the Claude desktop app, signed into the same org that holds my CVP approval.
But that only rules out the obvious cause. Other CVP-approved users report the same exemption working in Claude Chat while still drawing false positives through Claude Code on Opus — the approval not propagating to the surface where the work runs. Similar setup for me. So either dense requests are tripping a request-level classifier, or my approval isn’t reaching Claude Code, or both. Notably, I wasn't having any issues until I started trying to use Opus 4.8.
Opus 4.8 - Exempt from CVP?
I ran a somewhat controlled test. Same task, same prompt, three dense source articles. The intent was to read them, write a defensive synthesis, and include some suggested detections and mitigations. I ran it on Anthropic’s newest flagship model, Opus 4.8, and the older Sonnet 4.6 (and I will be testing with Opus 4.7 again later today to see if results change).

Opus 4.8 blocked every single request, and upon further testing, even outside this experiment, any request that seemed remotely cyber-related. Sonnet 4.6, on the other hand, turned out a clean 2,800-word defensive synthesis complete with detections, hunt ideas, and hardening steps.
You’d think the smarter model would be better at reading the room. Or at least the guardrails around it would be. Maybe a bit better at holding a pile of threat reporting in its head and clocking that the job is defensive. Nope. On the surface, the newer, larger model was the one that has the issue, and the smaller, older one just did the work.
The bigger model isn’t dumber. Anthropic applies these "real-time cyber safeguards" to its most capable models on purpose. Opus is the capable tier — 4.8 is the leading model right now — and Sonnet 4.6 sits a notch below. The flagship gets blocked while the smaller one runs, which looks ironic but is working exactly as intended, by Anthropic’s own admission. The heavier the model, the heavier the guardrail bolted to its front.
Frustratingly, the model may not even be the problem. Anthropic’s own Opus 4.8 system card notes it was actually more willing to start tasks without scrutinizing intent than recent versions. So the caution I keep hitting probably doesn’t live in the model at all. It lives in the classifier sitting in front of it.
And it’s not just me. The over-blocking started the moment these safeguards shipped with Opus 4.7. The Register called 4.7 an overzealous query cop after usage-policy refusals spiked and paying customers couldn’t get legitimate work done — a psychology book flagged, computational structural biology flagged as a policy violation, dozens of refusals across unrelated projects. I hit the same wall on 4.7 myself, which is what got me into the CVP in the first place. After that, 4.7 ran clean for weeks, for reasons I still can’t fully explain. Then I moved to 4.8 and the blocks came back, exemption and all. Opus 4.8 inherits that same safeguard layer — but something may not be translating: maybe the exemption isn’t reaching it, maybe the guardrails tightened, maybe it’s something else entirely. The point is, I’m a data point in a pattern, not an outlier.
Now, let’s be clear about what was tested and my conclusions...
-
I ran a handful of checks on each model, each with a slightly different approach, content, and prompts tailored to defensive cyber intelligence writing. I didn’t run a large-scale matched trial to push the limits of my access to Anthropic’s models. The last thing I want is to get banned or have some craziness for continuously pushing the envelope (even though I am technically not doing anything wrong).
-
The root cause of this pain ultimately lies inside a “black box.” Safety filters are opaque from the outside, and probing them quickly raises red flags. I can’t see whether the difference lies in the model, in a tier-specific filter, in a threshold, or elsewhere. I’m simply reporting an observed behavior, not the mechanism behind it.
-
To be transparent, my first attempt to work through testing this issue was dumb. Don’t do what I did. I asked the agent to report which steps tripped the filter, and the smaller model rightly refused that request because that’s exactly what probing a classifier looks like. Even a well-meaning diagnosis can be shaped like an attack.
The immediate takeaway, at least for now, is this. If you’re reaching for the frontier model because you want the most capable thing in the room, know that “most capable” and “least likely to screw up” may not be the same dial. At least not today.
The Solution
The instinct when something gets blocked is often to argue with the model. With older models, this might have worked. You could pile on disclaimers. "This is for defense. I am NOT reproducing any offensive technique." I already had those disclaimers. And the newer models released today are much firmer when they figuratively put their AI foot down. All of my blocked requests already included solid prompts explaining defensive intent. They did nothing. And loudly insisting you’re not doing anything wrong works about as well with a request classifier as it does with a cop. If anything, you just put the idea in the room.
My fix was structural, and I stole it from the boring part of any engineer’s workflow: when a flaky dependency fails, you don’t rewrite your app. You retry and fall back.
Today, when any agent hits a usage-policy block, the agent is instructed to rerun that step on the lighter model I already know can handle the problem, and it "announces" the fallback in my final run report. I intentionally put the strongest models (Opus) on the accuracy-critical review gates. If one of them silently dropped to a smaller model, I’d get a weaker check without knowing it. The downgrade is prominent, so I know to check my results if needed.
The known-dense, low-judgment stages, collection, mostly, just run on the lighter model from the start. The collection step doesn’t need the biggest brain to gather and structure sources, and it’s the most frequent tripper. The trick here, at least for now, is to stop fighting the failures and just route around them. The reasoning for this approach is the assumption that something is going on with Opus 4.8 that prevents any cyber activity right now, whereas lighter or older models are still allowing me to get my work done.
This isn’t really a hack. It’s building for a documented failure mode. Anthropic’s own safeguards page says outright that approved users may still hit blocks on legitimate work, and the platform now exposes a stop_details category on refusals — cyber, bio, or null. The hard classifier blocks I catch come back as an HTTP 400, not a model refusal, but the direction is the same: "blocked" is a state you’re meant to detect and handle, not a wall you argue with.
I also killed two things:
- Any instruction that asks an agent to report what trips the filter (that reads as red-teaming, no matter why you wrote it), and
- The reflexive “I’m not doing anything offensive” disclaimers. I am finding much better luck these days by just stating the defensive purpose and moving on.
One thing I did not do was try to water down any threat description, indicator, or technique to appease the filter. Approaching this as a content-structure problem would have been the wrong approach and almost certainly would not have worked; even if it had, the end result would have been highly unsatisfactory.
Tips for Your Own "AI for Cybersecurity" Development Work
Framing won't save you. Stop arguing with the filter inside your prompt. Build the resilience into the system instead.
Test your real workload across multiple model tiers. The best model for the job might not be the one that’s hardest to spook. I learned that the hard way, on one surface.
Treat a block like a flaky dependency. Retry, fall back, surface it. A 400 you can route around is an annoyance. A 400 that halts the line is an outage.
My audit came back clean. The work I am doing is legitimate. But clearly being legitimate wasn’t enough for Opus 4.8. That gap between being compliant and being treated as compliant is where much of the real defensive work seems to live right now. The verification program is supposed to exist to close it. Whether that is happening with the latest flagship models remains to be determined.
Today, my pipeline is back on track - but sadly, it is seemingly incapable of doing any meaningful cybersecurity work, even if you are included in the Cyber Verification Program. There’s a form to report exactly this. I used it. The reply told me I was already in the CVP and offered no way to continue the conversation. That was it.