[FEATURE] Setting to hold queued messages until the turn completes instead of folding them mid-turn
Feature request
Add a setting that makes a message typed while Claude is working wait until the current turn finishes, instead of being injected into the running turn.
Current behavior
Two separate paths deliver typed input into a turn that is already in progress, and neither is configurable:
- Mid-turn fold. At each tool-result boundary the main loop pulls every queued command with priority
<= nextand injects it into the running turn as aqueued_commandattachment. Typed input always enqueues atnext, so it is always folded. The only suppressor isisMidTurnFoldSuspended(), which is set solely byend_session. - Interrupt on submit. When every currently executing tool reports
interruptBehavior() === "cancel", the engine emitsinterruptible_tool_in_progress: true, and a fresh submit aborts the running turn outright (interrupt_on_submit) rather than queuing.
Checked against 2.1.234 on darwin-arm64: there is no settings key and no CLAUDE_CODE_* environment variable that controls either path.
Desired behavior
A setting, with the current behavior as the default, that holds human-typed input below the next priority (or otherwise excludes it from the mid-turn fold) and suppresses interrupt-on-submit, so the message lands only once the turn completes.
Why this matters
Mid-turn injection changes what the model is doing halfway through work I already asked for. When the follow-up is a next task rather than a correction, folding it in mixes the two: the model re-plans against a goal that arrived after it started, and the original turn never reaches a clean finish. Steering is the right default for corrections. It is the wrong default for stacking work. Ctrl-C already covers the case where I do want to stop it now.
The workaround today is to leave the text sitting in the input box and not press Enter, which means staying at the session instead of queueing work and stepping away.
Suggested shape
{ "queuedMessages": { "delivery": "steer" } }
with "turn-end" as the opt-in alternative.
Related issues
- #65452 — the same request, closed by the stale bot with "open a new issue if this is still relevant".
- #73661 (open) — sequential vs merged delivery of queued messages. Complementary: it assumes queueing already defers to turn end.
- #50246, #36817 — closed, covering queue-vs-interrupt in earlier versions.
Environment
- Version: 2.1.234 (Claude Code)
- Platform: darwin-arm64, macOS 25.5.0
- Install: npm global, native binary