Queued message that starts with a dragged file path ("/Users/…") is never delivered mid-turn; it waits for the whole turn to end

Status Open
Reported on v2.1.263
Maintainer reply None cached
Activity 0 comments · opened Sep 8, 2026

Summary

A message typed while Claude is mid-turn is queued and normally delivered at the next tool boundary ("absorbed mid-turn"). If the queued text starts with /, it is never absorbed mid-turn: it waits until the whole turn ends. Every absolute file path dragged into the prompt starts with /Users/…, so a message like /Users/me/Downloads/report.pdf please read this sits in the queue for the entire turn while Claude keeps working. In plan mode a turn can span research, several AskUserQuestion dialogs, the plan approval dialog and the execution, so the message was effectively never seen: the model asked me for the file that was sitting in the queue.

Environment

  • Claude Code 2.1.263, macOS 26.6 (Apple Terminal), interactive session, plan mode entered with Shift+Tab

What happened (from the session transcript's queue-operation lines, paths shortened)

09:48:13Z enqueue  "/Users/me/Downloads/report.pdf here is the pdf from the email, please review it"
09:50:58Z          AskUserQuestion (one of the questions asks me for that very file)
09:52:45Z remove   <task-notification …>   reason: absorbed_mid_turn        <- a later item is absorbed, the path message is skipped
09:55:00Z enqueue  "look at the message I sent"
09:55:29Z remove   "look at the message I sent"   reason: absorbed_mid_turn  <- plain text: delivered within 30 s
09:57:43Z          ExitPlanMode (plan dialog), rejected with feedback, ExitPlanMode again, approved 10:00:45Z
10:09:14Z popAll   "/Users/me/Downloads/report.pdf here is …"                <- I pulled it back with Up; it never reached the model

No absorbed_mid_turn was ever logged for the first message although the turn hit many tool boundaries in those 21 minutes.

Cause

In the CLI bundle, the filter that selects queued commands for mid-turn absorption drops any entry for which typeof value === "string" && value.trim().startsWith("/") && !skipSlashCommands (it looks like a possible slash command). The check is on the leading character only, so a dragged file path counts as a slash command. At turn start the same text is passed through to the model as an ordinary prompt (it is not a registered command), so behaviour differs between "typed while idle" (works) and "typed while working" (held until the turn ends, without any hint).

Steps to reproduce

  1. Start a turn that runs a long tool call: Run \sleep 120\ with the Bash tool, then say done.
  2. While it runs, type /tmp/anything.txt read this and press Enter (queued).
  3. Then type read this /tmp/anything.txt and press Enter (queued).
  4. When the sleep finishes, the second message is absorbed mid-turn; the first stays queued until the turn ends.

Expected

Either deliver the message mid-turn when the leading / token is not a registered command (a path with a / inside the first token, or any first token that is not a known command name), or show a hint next to the queued message ("held until the turn ends: starts with /"). Today there is no indication at all.

Workaround

Put a word before the dragged path (read /Users/me/…), or recall a stuck message with Up, add a word in front, and press Enter again.

View original on GitHub ↗