Two issues (#257, #408) went to real trouble to stop "session" being a word the user has to know. One string undoes both, and it is the last thing a returning user reads.
The string
lib/coding-session-sweeper.ts:120-123:
const head = `${IDLE_REAP_PREFIX} ${idleHours} hours with no activity`;
return engineStopped
? `${head} — the engine process was released. Start a new session to pick the work back up.`
: `${head}, but the engine could not be stopped on your machine — it may still be running. Check it there if you need the process gone.`;
with IDLE_REAP_PREFIX = "Session closed automatically after" (:109).
This is written into coding_timeline as the run's outcome row, so it is the final line of the repo history the console renders when the user comes back. #257's own comment (agents/coder/web/src/CodingTab.tsx:154) says the history exists so "the user must not be shown an empty screen with a 'Start a session' button where their work used to be" — and then the history's last line tells them to start a session.
It is also not true
The user does not need to start anything, and starting a new session is not how they get their work back — the platform reattaches with continuity on the next engagement. Verified 2026-08-17 on instance bd43f4de: POST /v1/instances/:id/coding/sessions after this exact reap returned "resumed": true with resumeFrom pointing at the reaped session, and the engine recalled its previous closing question verbatim.
So the sentence teaches a concept the user should never have needed, in order to instruct an action the platform performs by itself, using a word ("new") that describes the opposite of what happens.
Owner report, 2026-08-17
"I just tried to ask it to continue, but it said the session has ended and all output pane is gone."
and then:
"why do users have to know about sessions? why can't it just be seamless?"
The reap message is, as far as I can trace, where that knowledge came from.
Fix
The reap itself is correct and should stay — IDLE_SESSION_MS is 6h (:63) and its header explains it is deliberately set below one night so an abandoned tab does not hold a child process on someone's laptop until morning. That is a good decision about a real cost.
What changes is that the reap stops being an announcement:
- Drop the instruction entirely. The user has nothing to do.
- Prefer sleep vocabulary to death vocabulary, or emit no user-visible row at all and let the history simply continue at the next turn. "Asleep" is what actually happened; the work is intact.
- The second branch (engine could not be stopped) IS worth telling a human — a stray process on their machine is their problem to know about. Keep that one, minus the session noun.
Related: #697, which is the sentence that should be there instead — resolveSessionContinuity already returns "the previous conversation on this repo was last touched 11 hours ago" and nothing displays it.
Grep for the noun elsewhere before closing: any user-facing string containing "session" in the coding surface is in scope, not just this one.
Two issues (#257, #408) went to real trouble to stop "session" being a word the user has to know. One string undoes both, and it is the last thing a returning user reads.
The string
lib/coding-session-sweeper.ts:120-123:with
IDLE_REAP_PREFIX = "Session closed automatically after"(:109).This is written into
coding_timelineas the run'soutcomerow, so it is the final line of the repo history the console renders when the user comes back. #257's own comment (agents/coder/web/src/CodingTab.tsx:154) says the history exists so "the user must not be shown an empty screen with a 'Start a session' button where their work used to be" — and then the history's last line tells them to start a session.It is also not true
The user does not need to start anything, and starting a new session is not how they get their work back — the platform reattaches with continuity on the next engagement. Verified 2026-08-17 on instance
bd43f4de:POST /v1/instances/:id/coding/sessionsafter this exact reap returned"resumed": truewithresumeFrompointing at the reaped session, and the engine recalled its previous closing question verbatim.So the sentence teaches a concept the user should never have needed, in order to instruct an action the platform performs by itself, using a word ("new") that describes the opposite of what happens.
Owner report, 2026-08-17
and then:
The reap message is, as far as I can trace, where that knowledge came from.
Fix
The reap itself is correct and should stay —
IDLE_SESSION_MSis 6h (:63) and its header explains it is deliberately set below one night so an abandoned tab does not hold a child process on someone's laptop until morning. That is a good decision about a real cost.What changes is that the reap stops being an announcement:
Related: #697, which is the sentence that should be there instead —
resolveSessionContinuityalready returns"the previous conversation on this repo was last touched 11 hours ago"and nothing displays it.Grep for the noun elsewhere before closing: any user-facing string containing "session" in the coding surface is in scope, not just this one.