Tell the model when a message was a steer

A message typed during a turn reaches the model at the next model call if
the turn has one left, and otherwise as the opening line of the next turn --
Claude's read out of the fifo after the turn ended, Codex's requeued when
turn/steer is refused. Read there it is indistinguishable from a reply, so
the model treats the answer it just gave as seen.

Both drivers now compose the text the CLI receives through
driver::message_body, which prefixes a note saying the message was written
without having seen the rest of that turn. The transcript still holds the
words that were typed; only the CLI's copy carries the note.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
iris-aiandClaude Opus 5 committed 2026-09-13 22:30:32 -04:00
1 parent 59ebd75b46
commit 3af2502982
4 files changed
+107 -18

No files matched your search

+21
View File
@@ -453,6 +453,27 @@ error row a screen away.
`Unknown` is not "we could not find out": a driver that is gone reported
everything it was holding when it closed.
### A steer says that it is one (2026-09-13)
A message typed during a turn reaches the model with a bracketed note in
front of it saying it was written without having seen the rest of that turn
(`driver::message_body`, and `STEERING_NOTE` beside it). The transcript keeps
the words that were typed; only the copy the CLI is handed carries the note.
The reason is that where a steer lands is not ours to choose. It reaches the
model at the next model call if the turn has one left, and otherwise as the
opening line of the *next* turn -- Claude's read out of the fifo after the
turn ended, Codex's requeued when `turn/steer` is refused as
`activeTurnNotSteerable`. In that second case nothing distinguishes it from
an ordinary reply, so the model treats the answer it just gave as read and
answers around it. Bryan reported this as the ordinary experience of steering
from the phone: the interruption is meant to arrive mid-work, and it lands
after the fact often enough to matter.
It is prefixed on every steer rather than only on the ones that land late,
because the two are the same message until the CLI reads it, and the note is
true either way: a steer never saw the rest of the turn it was typed into.
### Session processes outlive the backend (2026-08-29)
A session's process is **left running when the backend stops and adopted