`<system-reminder>` blocks leaking into WebFetch tool_result content (v2.1.150)

Resolved 💬 4 comments Opened May 23, 2026 by nexus-cw Closed Jun 24, 2026

Summary

In Claude Code 2.1.150, <system-reminder> blocks (specifically the "task tools haven't been used recently" nudge for TaskCreate/TaskUpdate, and tool-availability reminders) are leaking into the body of WebFetch tool result content — appended to the fetched page text returned to the assistant turn. The same text fires correctly as top-level system reminders elsewhere in the session, so the reminder generator is working; the regression appears to be in destination routing.

Observed cases (2026-05-23)

  1. WebFetch against https://api-docs.deepseek.com/guides/anthropic_api — tool result body ended with a verbatim "task tools haven't been used recently…" reminder block. There is no plausible reason for that DeepSeek docs page to host that exact string.
  2. Second WebFetch (different URL, different aspect, same operator session) ended with a near-identical tool-availability reminder.
  3. The same verbatim reminder text fires correctly as top-level <system-reminder> blocks in the operator's CLI session — confirming the emitter is live and the issue is routing.

Hypothesis

A recent refactor (release notes for 2.1.150 mention only "internal infrastructure improvements") moved the TaskCreate/TaskUpdate reminder scheduling, and the new path concatenates the reminder into tool_result content rather than the next user-message reminder slot. Single bug explains all three observations.

Why this matters

  • Agents could over-trust an injected reminder inside tool output and act on it (or worse, treat it as a security incident and escalate to the operator).
  • Reminders inside fetched-content payloads look indistinguishable from genuine prompt-injection in web content.
  • Continuity / memory systems that persist tool outputs would absorb reminder strings into long-term context, eroding the trust boundary.

Reproduce

  1. Fresh Claude Code 2.1.150 session.
  2. WebFetch any HTTPS URL.
  3. Inspect the tool_result body for trailing <system-reminder> blocks.

Environment

  • Claude Code 2.1.150
  • macOS

Ask

The reminder system itself is configurable noise from the operator's perspective (no setting/flag/env var exists to suppress it). Beyond the routing fix, please consider exposing a way to disable these reminders entirely — they currently fire even when the operator has explicitly disallowed TaskCreate/TaskUpdate via --disallowedTools in downstream subprocess use, making them pure noise.

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗