Non-CLI clients (Android + claude.ai web) prepend a <system-reminder>Message sent at …</system-reminder> block to message bodies, breaking slash-command parsing (regression)

Open 💬 2 comments Opened Jun 13, 2026 by ceeram

Summary

The Claude Code mobile (Android) client prepends a <system-reminder>Message sent at <ISO-8601 timestamp>.</system-reminder> block, plus a trailing newline, to the body of every message it sends.

Slash commands only fire when the message starts with /. The injected prefix pushes /compact, /context, /bug, etc. off the start of the line, so they are parsed as plain text and sent to the model as an ordinary prompt instead of executing.

Regression

This is a regression, not longstanding behavior. Slash commands — /compact in particular — previously worked from the Android client and were used routinely for a long time; they broke recently (observed 2026-06-13). The same commands continue to work from the macOS CLI on the same session, so a recent Android client (or backend) change appears to have introduced the prefix. It is not the case that slash commands "never worked" on Android.

Reproduction

  1. Open a Claude Code session and send a slash command (e.g. /compact or /context) from the Android client.
  • Observed: the command does not execute; the model responds as if to a prose prompt.
  • Expected: the command executes.
  1. Send the same slash command from the macOS CLI on the same session — it executes normally.
  2. View the session transcript from the CLI: every Android-originated message is prefixed with the raw <system-reminder>Message sent at …</system-reminder> block.

Persists across an Android app restart. Normal (non-slash) prompts are unaffected — they simply carry the extra prefix.

Impact

  1. No slash commands are usable from Android — and there is no slash-command picker/dropdown on Android, so there is no fallback.
  2. Context grows unbounded/compact cannot be invoked from Android, so a mobile-only session runs until auto-compact.
  3. /exit is not a usable workaround on mobile — after exiting, the session cannot be resumed from the Android client.
  4. Internal framing leaks into the user-visible message body — the <system-reminder> tag is harness-internal and should not appear in user message content.

Expected behavior

  • Message timestamp metadata should be carried out-of-band, not prepended into the message body.
  • Slash-command detection should be robust to (or run before) any such injected prefix.

Environment

Claude Code — Android mobile client vs. macOS CLI, same session.

Onset timeline (verified from the session transcript)

This bug began at a specific, identifiable moment in a long-running multi-day single session. Checking the model on every assistant turn and the raw body of every user message:

  • 2026-06-09 → 2026-06-13 09:20 UTC — no prefix at all (~4 days). This window includes an earlier stint on Opus 4.8 (2026-06-09 20:08 → 2026-06-10 10:42) and a long stint on Fable 5 (06-10 10:42 → 06-13 09:20). Slash commands from mobile worked throughout.
  • 2026-06-13 ~09:20 UTC — forced migration off Fable 5 onto Opus 4.8. Fable 5 (and Mythos 5) were emergency-disabled by Anthropic on 2026-06-12 to comply with a US export-control directive, so the session fell back to Opus (/model was used to select it) — i.e. an unplanned, rushed shutdown, not a planned feature rollout.
  • 2026-06-13 10:06:06 UTC — the FIRST message carrying the <system-reminder>Message sent at …</system-reminder> prefix. Its inner timestamp matches the message's delivery timestamp, confirming it is client/transport-injected (not a quoted example). Every mobile-originated message since carries it; CLI-originated messages never do.

Conclusions from the timeline:

  • Not the model. The earlier Opus 4.8 period (06-09/06-10) had no prefix, so Opus itself is not the cause.
  • Not a client app update. Onset is mid-session with no app reinstall, and it survives an Android app restart — which points to a server-side / backend change rather than a client release.
  • Coincides with the emergency Fable 5 / Mythos 5 shutdown. The prefix first appears right as that rushed 06-12/06-13 disablement forced the session off Fable. Whether the prefix was introduced by that deployment or a separate concurrent change, the emergency Fable/Mythos shutdown deploy is the natural first place to look. Suggested triage window: backend/transport changes around 2026-06-13 ~09:20–10:06 UTC.

Note for triage

While drafting this report, the harness appears to strip complete <system-reminder>…</system-reminder> elements out of user-typed message bodies (apparently anti-injection sanitization): a typed/pasted example of the offending prefix is removed before it reaches the model, while the client-injected prefix itself is not stripped. This makes the bug awkward to report by hand, so this issue body was filed via tooling to keep the literal tags intact.

View original on GitHub ↗

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