[FEATURE] Cowork Dispatch should proactively notify user when child tasks complete
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
When Cowork Dispatch spawns child tasks via start_task or start_code_task, completions don't reliably surface to the user. Even when the user is actively in the conversation, Dispatch frequently fails to relay a completed child until the user prompts with something like "is X done?" or "any updates?". This forces the user into a polling pattern instead of getting pushed updates.
Concrete example (2026-04-27): Across one ~25-turn Dispatch session orchestrating a typical multi-task workflow (~15 child tasks spawned), roughly half of completions required me to ask before they were relayed, despite the system clearly knowing they were done — I'd see system reminders saying "Task X completed. Use read_transcript..." but Dispatch wouldn't act on them without a user nudge.
What's narrow about this: even for self-spawned children where Dispatch DOES receive a system reminder saying "Task X completed", the model waits for a user prompt before acting. The signal is present; the model behavior is the gap.
Proposed Solution
Ranked from cheapest to most architectural:
- System-prompt change (cheapest fix — pure orchestration behavior): have Dispatch run a
list_sessionscheck at the start of every user turn and proactively relay any newly-idle children BEFORE responding to the user's new message. - Push-trigger architecture: when a child task completes, fire a system message into the Dispatch session that triggers a turn for it to relay the completion, even if the user hasn't messaged.
- UI surface: a "Tasks" tray/inbox in the Cowork sidebar that shows newly-idle child sessions with badges, so the user can see at a glance what's complete.
Any one of these would close the gap.
Alternative Solutions
Failed workaround attempt: I tried building a 5-min cron heartbeat that scans for completed-but-un-relayed child sessions and surfaces them. Spent meaningful time wiring up a ledger and a scheduled task. Disabled it within the day because the scheduled-task notification surface ALSO doesn't reach the user — notifyOnCompletion: true digests land in sibling sessions that the user doesn't see. So the workaround hit a deeper version of the same gap. (I'll file the scheduled-tasks-notification gap as a separate issue if it's not already known.)
Priority
Medium - Would be very helpful
Feature Category
Other
Use Case Example
Reproduction: Open a Cowork Dispatch session. Spawn 10–15 child tasks via start_task or start_code_task. Continue interacting with Dispatch on other matters. Observe that approximately half of child completions are not relayed until the user explicitly asks "is X done?" or "any updates?". Despite the parent session receiving system reminders confirming completion, the model defers acting on them.
Related issues (overlapping symptoms, different framings):
- #43960 — "Dispatch/Cowork should have visibility into all Claude Code sessions" — captures the "user has to ask Dispatch about child tasks" symptom but frames as a visibility gap rather than a model-behavior gap.
- #33563 — "Cowork scheduled tasks should send feedback back to parent session/inbox" — adjacent: scheduled-task → parent feedback channel.
- #32085 — "Background agent resume creates retry loop, model doesn't wait for completion" — same architectural failure: model not auto-acting on completion signals.
- #21048 — "Background task completion notification not appearing" — closest semantic match.
- #24983 — "External event sources to trigger messages in active conversation" — acknowledges no mechanism to wake an active session.
This issue is narrower than any of those: even for self-spawned children where Dispatch DOES receive a system reminder saying "Task X completed", the model waits for a user prompt before acting. The signal is present; the model behavior is the gap.
Cowork is a research preview and the orchestration loop is hard — appreciate the work going in. This particular gap was the most-felt friction point in a real session.
Additional Context
_No response_
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗