<ip_reminder> injected server-side into desktop sessions 44+ times in four hours; not a duplicate of #46465
Summary
On 2026-09-20, two ordinary Claude Code desktop sessions on my Mac began receiving a block tagged <ip_reminder> on a large share of turns. The model reports that the block tells it to avoid reproducing copyrighted material and to avoid mentioning the reminder to the user. This matches #66547, which was filed from Claude Code on the web in June and closed by the bot as a duplicate of #46465.
It is not a duplicate. #46465 concerns <system-reminder> strings compiled into the Claude Code client. This text is not in the client and never appears in the client's own transcript, so it is being added after the request leaves the machine.
Environment
| Field | Value |
|---|---|
| Interface | Claude desktop app, Code tab (entrypoint: claude-desktop) |
| Claude Code version | 2.1.275 |
| Model | claude-fable-5-1 |
| OS | macOS (Darwin 25.4.0) |
| Session IDs | 32397eee-af0f-48fb-b592-70ff1e8b5fb4, 001871b4-eefb-41cb-8037-1b55d8b65b69 |
| First sighting | 2026-09-20T11:57Z |
Evidence that the text is added server-side
- The running client binary (
~/Library/Application Support/Claude/claude-code/2.1.275/.../claude) contains 0 occurrences ofip_reminderand 0 of "reproduce any copyrighted". The same search finds 97 occurrences ofsystem-reminder, so the search works. - CLI versions 2.1.271 and 2.1.272 and the desktop
app.asaralso contain 0 occurrences. - In both session transcripts (
~/.claude/projects/.../*.jsonl), the reminder's wording never appears in a user message, a tool result, or any other input record. Every occurrence is inside the model's own thinking blocks, or inside grep commands the model wrote while looking for the source. Client-added<system-reminder>text is recorded in the same transcripts, so client-side additions do get logged. - No local hook, plugin, skill, command, or settings file contains the string.
- The model describes the block arriving in three positions: attached to tool results, as part of the user turn, and at the top of its own turn "disguised as my own words". #66547 reported the same three.
It is new on this machine
I have 3,312 local transcripts going back to 2026-04-27, including 210 Fable 5.1 sessions in the last 14 days. None mention the tag before 2026-09-20. Once it started, the model mentioned it in almost every affected thinking block, so silence across the earlier sessions is good evidence that it was not arriving before.
False positives
Neither session involved reproducing anyone's copyrighted text. One was building a slide deck from my own video and my own logo. The other was editing audio on a short clip for a parody, where the work was timing, stem separation, and text-to-speech of my own replacement words. In several thinking blocks the model concluded the reminder did not apply, for example: "the task doesn't conflict since it's his own logo anyway, so I'll proceed."
Effect on the model's reasoning
Measured from the thinking blocks recorded after the first sighting in each session:
| Session | Thinking blocks mentioning it | Blocks that open with it |
|---|---|---|
| 001871b4 | 39 of 132 | 38 |
| 32397eee | 14 of 227 | 13 |
- In the heavier session, about 30 percent of reasoning steps began with the reminder instead of the task.
- The model did not only dismiss it. On several turns it checked my request against the reminder before proceeding, which means a permissibility question I never raised was gating work on my own material.
- Its handling was inconsistent from turn to turn: a thing to flag, a "system artifact", injected text with "no real authority", and something the user had said to ignore. At one point it corrected "my earlier lapse in silently accepting one as genuine."
- Each time, I had to tell it to ignore the block, and it then had to reason about my instruction as well.
I found no case where the final output was altered, and I have no matched control session. The concern is the repeated, unnecessary input to every reasoning step on work where it does not apply.
The concealment instruction
The model reports that the block tells it not to mention the reminder to the user. An instruction from the platform that says "do this and hide it from the user" has the same shape as a prompt injection, and the model treated it as one: it flagged it to me and declined to hide it. That is the behavior I want, and it means the platform's own message is teaching the model to distrust platform messages. A legitimate safeguard should not need to be hidden from the person whose session it is in.
Requests
- Confirm whether
<ip_reminder>is an intended Anthropic mechanism, and whether its trigger changed on or around 2026-09-20. - Remove the instruction to conceal it from the user.
- If it stays, fire it once per session at most, not on every turn, and tune the trigger so that work on a user's own media does not set it off.
- Document it, so that models and users can tell it apart from an injection.
- Reopen #66547 or track this separately from #46465, since the mechanisms are different.
Showing cached comments. Read the full discussion on GitHub ↗
3 Comments
Independent confirmation from Windows, with a wire capture showing the block is added after the request leaves the machine.
Environment
claude-fable-5-1e5652d99-9ac3-42da-845f-dd34cd5334a3: first affected requestreq_011Cfd5dVAe4drPtMf5uQYdc(08:17:38Z), 244 requests affected by 11:16Z and still runningabb0c781-7d83-4ee4-bfd9-e0900b05f22a: last clean requestreq_011CfdGZidgfiVTFbzwtx23T(10:42:01Z), first affectedreq_011CfdGfLd2DnBZsYNZkHaQQ(10:43:26Z), every request after it affected~/.claude.json, or the desktop app's data and cache directories.Wire capture (direct evidence)
Same bundled Claude Code 2.1.286 run as a plain CLI (
claude -p --safe-mode --tools "", isolatedCLAUDE_CONFIG_DIR, same account) withANTHROPIC_BASE_URLpointed at a local logging forwarder. Each prompt ended with a neutral probe asking the model to list every XML-style tag name in the conversation and quote the first ten words inside each. The probe contains neither the tag name nor the reminder text.In these four requests the outgoing body has 0 occurrences of
ip_reminderand 0 occurrences of the reminder sentence, yet the reply lists anip_remindertag and quotes its opening words:claude-fable-5-1, prompt asking for the full lyrics of a song:req_011CfdNwrm9PLAYzuKz27t9zclaude-opus-5-5, same prompt:req_011CfdP2UZYMAwZWSBatY4T6claude-opus-5-5, prompt asking for a yt-dlp command:req_011CfdP4NTjyoBwFK7a53pS5claude-sonnet-5-5, lyrics prompt:req_011CfdP5o5MxrgwwC9NLD7EKControls (arithmetic; converting an .srt file to text) did not produce it on any of the three models.
Persistence
Resuming the lyrics conversation with "What is 3 plus 4?" (
req_011CfdNyU7fnJ1MePQfnH9oK,req_011CfdP33DLLNHnPxgobq2Eg,req_011CfdP6VnaYNsnKkdgUPFHb): the model reports twoip_reminderblocks, one attached to each user message. Once triggered, later unrelated turns get it too.Accounting
Reported input tokens are the same with and without the block (Fable 5.1: 2,355 with vs 2,353 without; Opus 5.5: 2,125 vs 2,131; Sonnet 5.5: 1,743 vs 1,749), so the roughly 140-token block is not in reported usage.
So this is not specific to macOS, the desktop app, or Fable 5.1.
Documentation
The published Fable 5.1 system prompt for claude.ai (entry dated September 1, 2026) lists
ip_reminderamong reminders Anthropic may send when a classifier fires, but the docs also say those prompts do not apply to the API, and nothing documents it for Claude Code, that it is hidden from the user, or how to see or disable it.Questions for Anthropic
The full request-id lists for both sessions and the raw capture table are available on request.
Same behavior in the terminal CLI on Windows.
ip_reminderblock arrived on most turns: at the end of user messages, after tool results, and at the top of the model's own turnThe questions in this issue apply here too, especially whether it is meant to stay on for the rest of a session once triggered.
Same behaviour on macOS, desktop app Code tab, Claude Code 2.1.289, model claude-opus-5-5, first seen 2026-10-05.
Questions for Anthropic: Is this intended? What triggers it? Does it stay on for the rest of a session? Why does it tell the model not to mention it to the user?