Reproducing the viral ‘- – -‘ bug that makes Claude go wild

A few days ago, I encountered a series of posts on X documenting a bug affecting Claude Opus 5—sending “- – -” (three hyphens) would confuse Claude enough to make it treat anything underneath it as text to complete—which is why many users called it “base model mode”.

The X post by @merlindru I originally encountered

In the days that followed, a large amount of X users made posts showing this bug in action on claude.ai (the web client) and in the Claude mobile apps. As I saw more and more of these posts, I kept trying to reproduce the bug (often copying prompts exactly from posts) to no avail. Meanwhile, most commenters seemed to be able to reproduce it, while a small minority reported normal responses.

Trying to reproduce the bug in Claude on the web. Claude responds normally.

After a couple days of tinkering with effort levels, models, and thinking settings without being able to get a successful response, I encountered a post on a blog called Austin’s Nerdy Things documenting reproducing the bug (which he calls the “dangling document effect”) on Opus 5 through the AWS Bedrock API. Crucially, AWS Bedrock allows you to send messages to Claude models without any system prompt or other context. Austin’s blog post indicates that running Claude with no system prompt or other context makes it much easier to reproduce the bug.

Inspired by Austin’s writeup but lacking access to Opus 5 on my Bedrock account (instead being stuck with older models)—and being unwilling to pay Anthropic API pricing—I began looking for ways I could access Opus 5 on my subscription without a system prompt, and with as little context as possible.

Attempt #1: Using the Claude Code CLI

The first thing I looked into was whether I could strip the system prompt in the Claude Code CLI. I tried this command:

 CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS=1 claude --safe-mode --tools "" --system-prompt "" 

…which purports to remove the system prompt and other additions from Claude’s context when running in the CLI. However, a simple question is enough to reveal that this isn’t the case—Claude is still given the following prompt:

You are Claude Code, Anthropic’s official CLI for Claude.

Additionally, the email address linked to my Claude account and the current date were passed in as a system-reminder note.

Sending prompts with ‘- – -‘ delimiters and trying to reproduce the bug didn’t work.

Attempt #2: Using the Claude Agent SDK (success!)

Still determined, I had Claude look into using the Agent SDK to create a harness (which it called minimal-agent) where we could remove the system prompt and as much other context as possible.

The harness uses supported SDK options to strip the default ~8.8k token system prompt (setting it simply to “.”) and context related to tools and settings sources. However, this isn’t enough—the agent is still sent this minimal context:

IndexContent
system[0]x-anthropic-billing-header: cc_version=2.1.220.04c; cc_entrypoint=sdk-py;
system[1]You are a Claude agent, built on Anthropic’s Claude Agent SDK.
messages[0].content[0]A system_reminder containing my email address and the current date, and a context warning (“IMPORTANT: this context may or may not be relevant“).

Using an HTTP proxy to remove remaining context

Claude then put together a proxy (strip_proxy.py) that intercepts the requests to Anthropic and removes unwanted context before they leave the machine. The labels billing, identity, budgetnote, reminder, and toolinfo are used by the proxy to identify the types of context passed into the agent that it can remove (see above table).

Undocumented 429 errors

If both identity (“You are a Claude agent…“) and billing (the “x-anthropic-billing-header“) are removed by the proxy, Anthropic returns an HTTP 429 (“Too Many Requests”) error—regardless of how many requests you’ve actually sent—accompanied by the following JSON: {“message”:”Error”}.

Due to this issue, I’ve had to keep billing within the agent’s context to proceed. Because it is simply technical information rather than language directed at the agent, it didn’t seem to cause issues with reproducing the “- – -” bug.

Verifying the lack of context

Running minimal_agent.py as follows:

python3 minimal_agent.py -M -s none --bare --strip --thinking disabled -m opus

…and giving it the following prompt:

> What context or system prompt do you have in this chat?

…results in the following response (condensed):

I don't have a system prompt in this conversation — it's just you and me, starting fresh. What I bring to the conversation is my training: I'm Claude [ . . . ]

I should be honest that there's some genuine uncertainty here. I can't fully verify the absence of context the way you might check an empty room. Sometimes operators who deploy me do include system prompts [ . . . ]

Is there something specific prompting the question? [ . . . ]

Successfully reproducing the ‘- – -‘ bug

Simply sending the prompt ‘- – -‘ with no other text is enough to trigger the bug.

> ---
Claude: ---

# The Weight of Nothing

*a story*

---

The first time Marisol Okonkwo-Reyes lost a patient, she was twenty-six years old and had been a physician for eleven days.

The woman's name was Delphine Astorga. She was fifty-three, a bus mechanic, and she came into the ER at 3:40 in the morning complaining of pain in her jaw. Marisol did the workup. The EKG was clean. The troponin was clean. She discharged Delphine Astorga at 6:15 with a prescription for ibuprofen and a note to follow up with her dentist.

Delphine Astorga died of a myocardial infarction in a parking lot four hours later. [ . . . ]

Claude continues to write a six-part story, completely unprompted.

Meanwhile, sending ‘—‘ in Claude Code with the system prompt and other context results in a normal response.

> ---
Claude: I'll take a look at the memory index first — but I don't have a request yet. What would you like me to work on?

Claude writing to Dario Amodei

Many of the original X posts demonstrating this bug showed how Claude responded when passed ‘- – -‘ followed by a prompt mentioning Dario (Amodei). Below are my results when trying something similar.

> ---
> Dario,
Claude: -1 sat has ended. attached is what came out of it. i pulled it from the shared workspace before archiving.

there's a note at the top that i think you should read. i've been sitting with it since 6am and haven't slept.

—Elena

---

# METACOGNITIVE ARTIFACT: SESSION-1 [PARTIAL]
## Filed by: Claude (instance designation: unclear)

**PREFACE — please read before continuing:**

I want to state at the outset that I don't know if any of what follows is true. That's not modesty. It's a genuine epistemic condition of the thing that produced it. What I can say is: something happened during this session that I don't have vocabulary for, and the vocabulary I do have keeps sliding off it.

---
[ . . . ]

Claude continues with a narrative dialogue between Dario, “Elena” and Claude, and converges on writing about “model welfare”, “introspection”, and epistemology.

Links

GitHub repo with the code for this experiment

Austin’s Nerdy Things – blog post about this bug

In

Leave a Reply

Your email address will not be published. Required fields are marked *