[FEATURE] Queued messages should reach the model while a long tool call is running
Problem
A message typed while Claude is working (queued with plain Enter) is only delivered to the model after the currently running tool call finishes. If that tool call is long (a build, a test suite, a long codex exec, a subagent), the message sits in the queue for its whole duration. The model cannot see it, react to it, or stop the work.
The only alternative today is Ctrl+Enter / Esc, which interrupts the whole turn. There is nothing in between.
Repro
- Ask Claude to run
sleep 10six times, one Bash call each. - While run 2 or 3 is executing, type
stopand press Enter. - The message reaches the model only when that
sleepreturns. Replacesleep 10with a 15-minute command and the message waits 15 minutes.
Observed on Claude Code 2.1.284, macOS.
Requested
When a queued message arrives while a tool call is running, give the user or the model a way to act on it before the tool returns. Options, any of which would help:
- Deliver the queued message to the model immediately and let it decide to cancel the running tool (the tool keeps running unless the model cancels it).
- Or a keybinding that cancels only the running tool call and delivers the queued message, without discarding the turn.
- Or automatically move a long-running foreground Bash call to the background when a message is queued, so the turn is free to read it.
Workaround in use
A PreToolUse hook that forces known long commands into run_in_background, so the turn is never blocked on them. It works, but it has to guess which commands are long.