feat(tui): fire-and-forget async subagent tasks
Summary
- Add fire-and-forget async subagent tasks with parent notifications and status tracking.
- Surface background task state in the TUI and system prompt, including subtask reminders and navigation.
- Add async task limits and async-only permission rules for tighter control.
- <task_tool_agents> system reminder similar to <skills_available> with a list of currently running async subagents.
Config
-
experimental.async_task_limit(default 3) -
experimental.async_task_permissions -
permission.task_async
UX
- Sidebar shows background tasks with status.
- Session view renders subtask completion reminders and links to subagent sessions.
- Compaction includes running async tasks to preserve context.
Testing
- I have tested it as thoroughly as I can, but there's only so much I can do myself (my imagination ran out of edge case scenarios). Hope it at least helps as a stub if a similar feature is planned.
The following comment was made by an LLM, it may be inaccurate:
No duplicate PRs found
I absolutely love this!
I know this is not the scope of this PR, but I was wondering if we could slip in optional model to the task tool. Ignore if this is out of scope.
I absolutely love this!
I know this is not the scope of this PR, but I was wondering if we could slip in optional model to the task tool. Ignore if this is out of scope.
@arsham Thank you. I decided to keep it minimal to make it a. easier to integrate b. more likely to merge.
I have a more complex version that restores input prompt box to subagents, allows to pass a summary back to main agent via /finished if you ever interact with a subagent, can purge subagent sessions via /wipe (current) or /wipeout (all)... And another one that allows a skill to be an argument of a task tool, where it basically injects the skill immediately before the subagent starts doing anything.
It's all doable but overcomplicates a single pr.
@IgorWarzocha those are great ideas. Do you have them on your fork by any chance?
@arsham WIP. need proper testing etc, and all are based on pre 1.1.1. Unsure why started with async one, it just felt right. https://github.com/IgorWarzocha/opencode/pulls