Move subagents into session side panel
This commit is contained in:
1 parent
cd0229bed6
commit
0a2f0eed5f
8 files changed
+497
-536
No files matched your search
+22
-20
@@ -1,8 +1,8 @@
|
||||
# Subagents
|
||||
|
||||
A session's subagents -- helpers started by Claude Code's Task tool or Codex's
|
||||
collaboration tools -- each get a transcript of their own, listed under the
|
||||
session's card and readable in the same transcript view the session has.
|
||||
collaboration tools -- each get a transcript of their own, listed in a panel
|
||||
over the open session and readable in the same transcript view the session has.
|
||||
Designed 2026-09-05; extended to Codex's multiplexed app-server threads on
|
||||
2026-09-13. The decisions Bryan has not yet reviewed are in `DECISIONS.md`.
|
||||
|
||||
@@ -253,29 +253,31 @@ The per-subagent status is only read when the list route is asked for.
|
||||
because a subagent that is thinking reports nothing meanwhile and would sink
|
||||
below one that just finished.
|
||||
- **Holding a subcard selects it, and several at a time**, exactly as the
|
||||
import list works, with the selection bar drawn inside the session's card
|
||||
rather than at the bottom of the screen: this selection belongs to one card,
|
||||
and a bar down there would read as acting on the whole list. One card at a
|
||||
time -- picking a row in another card moves the selection rather than adding
|
||||
to it, since one Delete is one request against one parent. Delete is
|
||||
import list works, with the selection bar drawn inside the panel rather than
|
||||
at the bottom of the session: this selection belongs to the subagent list,
|
||||
and a bar under the composer would read as acting on the conversation.
|
||||
Delete is
|
||||
*disabled*, with the reason in words, while anything selected is still
|
||||
running. Deleting confirms first, dims the rows it is acting on
|
||||
(`BusyItem`), and on success takes them out of that card and off the
|
||||
session's count without refetching anything else. The phone's cached copy of
|
||||
(`BusyItem`), and on success takes them out of the panel without refetching
|
||||
anything else. The phone's cached copy of
|
||||
a deleted subagent's transcript is purged with it.
|
||||
- `SessionSummary.subagents: Int`. A card with a non-zero count ends in an
|
||||
expander row -- a full-width `Chevron(Pointing.Down)` row that flips to
|
||||
`Pointing.Up` -- collapsed by default. Expanding fetches
|
||||
`/sessions/{id}/subagents` and draws one `OutlinedCard` per subagent,
|
||||
indented inside the session card, the way dev-updater draws a project's
|
||||
components: title, then the status word and a relative time. The
|
||||
expansion state is per session id and survives a refresh of the list.
|
||||
- Tapping a subcard opens `Screen.Subagent`, which is `SessionScreen` in
|
||||
**read-only** form: the same transcript, paging, cache, selection,
|
||||
- The main session list does not expand or count subagents. Swiping left over
|
||||
an open session pulls an 88%-wide panel in from the right and fetches
|
||||
`/sessions/{id}/subagents`; it draws one `OutlinedCard` per subagent: title,
|
||||
then the status word and a relative time. The transcript remains composed
|
||||
under the panel, so its event stream, draft and scroll position stay live.
|
||||
Horizontal scrollers inside the transcript win the gesture. Collapsing one,
|
||||
or starting over any ordinary part of the session, gives the gesture back to
|
||||
the panel; Android keeps its own edge Back gesture. Swiping right on the
|
||||
panel, tapping outside it, or Back closes it.
|
||||
- Tapping a subcard opens a `SessionScreen` layer in **read-only** form: the
|
||||
same transcript, paging, cache, selection,
|
||||
images and status row, with the composer, the process button, the model
|
||||
picker, the files button, the settings cog and the usage bar left out.
|
||||
The header shows the subagent's title with the session's title beneath
|
||||
it. Back returns to the list.
|
||||
The header shows the subagent's title with the session's title beneath it.
|
||||
It is another layer over the still-composed session and its panel; Back
|
||||
returns to the panel.
|
||||
- Addressing: `fetchTranscript`, `EventStream`, `TranscriptSource` and the
|
||||
cache take a transcript address rather than a session id --
|
||||
`sessions/{id}` or `sessions/{id}/subagents/{sub}` -- so the cache nests a
|
||||
|
||||
Reference in new issue
Block a user