@@ -226,12 +226,12 @@ parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
226226
227227### Fixed
228228
229- - Retained worker sessions (` spawn_agent ` , resumable via ` resume_agent ` ) now have
229+ - Retained worker sessions (` spawn_agent ` , resumable via ` resume_agent ` / ` followup_task ` ) now have
230230 their own retention cap, separate from the TUI's finished-session display cap. Previously they
231231 shared that 20-item cap, so ` resume_agent ` on an early worker failed with a bare ` not_found ` once
232232 a fan-out of more than 20 workers had finished. A session dropped by the retention cap still
233233 releases its sidecars/reactor/lock entry, always evicts least-recently-used first, and never
234- evicts a running session. ` resume_agent ` against an evicted session now reports
234+ evicts a running session. ` resume_agent ` / ` followup_task ` against an evicted session now report
235235 its terminal status plus a pointer to ` read_agent_trace ` , instead of ` not_found ` .
236236
237237## [ 0.3.0] - 2026-08-24
@@ -273,17 +273,19 @@ parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
273273 operator interrupts it (` interrupt_agent ` ) rather than the harness enforcing
274274 a count.
275275
276- - Added ` interrupt_agent({ target }) ` , the second half of reusable worker
277- sessions: ` interrupt_agent ` stops a retained worker's current turn while
278- keeping it and its context alive (distinct from the permanent ` close_agent ` ).
279- Starting the next turn on that retained session is ` resume_agent ` . Both are
280- gated to orchestrator tiers via the existing fleet-verb mechanism, denied to
281- leaves. ` interrupt_agent ` fires a signal scoped only to the in-flight
282- ` agent.send() ` call, never ` close() ` , so it cannot hit the close()-ordering
283- workdir-lock issue tracked separately — the underlying reactor cycle keeps
284- running in the background (there is no lower-level stop primitive for that in
285- the vendored agent), so this is an approximation: it stops the caller from
286- waiting, not the worker's compute.
276+ - Added ` interrupt_agent({ target }) ` and ` followup_task({ target, message }) ` ,
277+ the second half of reusable worker sessions: ` interrupt_agent ` stops a
278+ retained worker's current turn while keeping it and its context alive
279+ (distinct from the permanent ` close_agent ` ), and ` followup_task ` sends new
280+ work into a retained worker's existing session, reusing its prior context
281+ and tool outputs rather than starting fresh. Both are gated to orchestrator
282+ tiers via the existing fleet-verb mechanism, denied to leaves. ` interrupt_agent `
283+ fires a signal scoped only to the in-flight ` agent.send() ` call, never
284+ ` close() ` , so it cannot hit the close()-ordering workdir-lock issue tracked
285+ separately — the underlying reactor cycle keeps running in the background
286+ (there is no lower-level stop primitive for that in the vendored agent), so
287+ this is an approximation: it stops the caller from waiting, not the
288+ worker's compute.
287289- ` evaluateSubAgentStop ` now always requires the final assistant text; the
288290 omitted-text branch that unconditionally completed a tool-less turn is
289291 removed, so every call path gets the ` incomplete-report ` nudge and salvage
0 commit comments