@@ -202,12 +202,12 @@ parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
202202
203203### Fixed
204204
205- - Retained worker sessions (` spawn_agent ` , resumable via ` resume_agent ` ) now have
205+ - Retained worker sessions (` spawn_agent ` , resumable via ` resume_agent ` / ` followup_task ` ) now have
206206 their own retention cap, separate from the TUI's finished-session display cap. Previously they
207207 shared that 20-item cap, so ` resume_agent ` on an early worker failed with a bare ` not_found ` once
208208 a fan-out of more than 20 workers had finished. A session dropped by the retention cap still
209209 releases its sidecars/reactor/lock entry, always evicts least-recently-used first, and never
210- evicts a running session. ` resume_agent ` against an evicted session now reports
210+ evicts a running session. ` resume_agent ` / ` followup_task ` against an evicted session now report
211211 its terminal status plus a pointer to ` read_agent_trace ` , instead of ` not_found ` .
212212
213213## [ 0.3.0] - 2026-08-24
@@ -249,17 +249,19 @@ parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
249249 operator interrupts it (` interrupt_agent ` ) rather than the harness enforcing
250250 a count.
251251
252- - Added ` interrupt_agent({ target }) ` , the second half of reusable worker
253- sessions: ` interrupt_agent ` stops a retained worker's current turn while
254- keeping it and its context alive (distinct from the permanent ` close_agent ` ).
255- Starting the next turn on that retained session is ` resume_agent ` . Both are
256- gated to orchestrator tiers via the existing fleet-verb mechanism, denied to
257- leaves. ` interrupt_agent ` fires a signal scoped only to the in-flight
258- ` agent.send() ` call, never ` close() ` , so it cannot hit the close()-ordering
259- workdir-lock issue tracked separately — the underlying reactor cycle keeps
260- running in the background (there is no lower-level stop primitive for that in
261- the vendored agent), so this is an approximation: it stops the caller from
262- waiting, not the worker's compute.
252+ - Added ` interrupt_agent({ target }) ` and ` followup_task({ target, message }) ` ,
253+ the second half of reusable worker sessions: ` interrupt_agent ` stops a
254+ retained worker's current turn while keeping it and its context alive
255+ (distinct from the permanent ` close_agent ` ), and ` followup_task ` sends new
256+ work into a retained worker's existing session, reusing its prior context
257+ and tool outputs rather than starting fresh. Both are gated to orchestrator
258+ tiers via the existing fleet-verb mechanism, denied to leaves. ` interrupt_agent `
259+ fires a signal scoped only to the in-flight ` agent.send() ` call, never
260+ ` close() ` , so it cannot hit the close()-ordering workdir-lock issue tracked
261+ separately — the underlying reactor cycle keeps running in the background
262+ (there is no lower-level stop primitive for that in the vendored agent), so
263+ this is an approximation: it stops the caller from waiting, not the
264+ worker's compute.
263265- ` evaluateSubAgentStop ` now always requires the final assistant text; the
264266 omitted-text branch that unconditionally completed a tool-less turn is
265267 removed, so every call path gets the ` incomplete-report ` nudge and salvage
0 commit comments