Repository navigation
Replies: 2 comments
|
Thanks for the detailed proposal and the work on inspectable child activity. The orchestrator V2 work has now merged in #2829. V2 now represents native subagents as child threads with their own projected activity, history and results, reachable through the thread's agent/lineage view. This supplies the supported path for inspecting child work beyond the parent's activity list; the available detail still depends on what the provider exposes. Closing this as delivered. If a specific part is still missing in a build containing V2, please open a focused follow-up with the provider/version and the behavior you are seeing. |
0 replies
This comment was marked as spam.
This comment was marked as spam.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Full activity for subagents
A compact Agents panel with recent tools, saved child history, and final responses
Make the Agents panel a useful place to inspect delegated work: a compact roster by default, the latest tools when an agent is expanded, and a read-only full activity view that retains the agent’s final message after it finishes.
I built and tested an implementation in PR #10881 — show recent tools and saved child history. This discussion records the product request, design, implementation findings, and remaining gaps so maintainers can evaluate the idea separately from accepting that PR’s full diff. The reviewed implementation described below is at commit 3304f29b.
This is an implementation-backed follow-up to discussion #10507: inspect sub-agent prompts and live activity. That discussion already describes the underlying need well; this proposal adds a working UI, provider-specific findings, and evidence. It also relates to viewing tool/command output (#6682), nested subagent threads (#6689) and mobile subagent visibility (#6971).
Why this matters in everyday use
When several agents are working on the same project, a status, token count, and latest command are useful but incomplete. I need to know what each agent was asked to do, what it has checked, what it changed, and what it concluded—without asking the parent agent to narrate everyone’s progress or switching to provider-specific files and terminals.
For example, a parent delegates work to
implement_offersandimplement_documents. From the parent conversation I want to:The original panel was a plain roster with the most recent activity label. During development, a redesigned card could still show “no activity” even while the provider had a saved child transcript. That distinction matters: improving the layout alone cannot make the history appear.
Proposed interaction and design
1. Compact overview by default
Each agent has one card with its name, model/effort when available, readable status, latest activity or outcome, token usage, and elapsed time. Workflow members remain associated with their phases; direct spawns have their own group. Settled agents collect under a Finished disclosure so the roster gives active work priority.
An agent’s card begins collapsed. Looking at the roster should not require scrolling through command output or patches. Status must remain understandable without relying only on color. The current implementation treats idle agents as settled; that grouping is a product choice maintainers can review.
2. Expand a card for recent tools
Expansion shows the latest five tools, in chronological order, inside compact step boxes. The card reads the selected agent’s saved history rather than relying exclusively on attributed events in the parent’s retained activity list.
A muted, full-width Open full activity footer with a trailing chevron opens the detail view. This is the intended design shown below. Earlier intermediate versions used a bright inline link; those are not the proposed final footer.
Only mounted, expanded cards query recent history. Active cards refresh every ten seconds while the document is visible, and a card does not start a second refresh while its query is pending. This is periodic saved-history retrieval, not a claim of complete live child-event streaming.
3. Open full activity at the latest work
The detail view opens on the newest page of up to 50 entries and scrolls to the bottom. Previous/Next navigation makes older pages accessible, and Refresh retrieves another snapshot.
Tool output and file patches are collapsed behind clickable titles. Where the provider supplies structured file-edit information, the title identifies the affected path, such as
Edit src/X.jsx; clicking exposes the available patch or tool details. Shell commands remain commands—we do not infer a reliable file diff from arbitrary shell text.The agent’s messages, particularly its final response, stay expanded. Collapsing tool output must not hide the answer I opened the panel to read. Available reasoning summaries remain distinct from ordinary messages. An empty provider reasoning marker should not become a blank “Reasoning summary” card.
4. Preserve the conversation and explain missing history
History inspection is read-only. Opening a card must not create, resume, reload, or restart a provider coding session. Saved history should remain readable after the child stops, provided the environment still has the native history and can verify the child belongs to the parent.
Unsupported providers and unavailable/deleted histories need clear explanations. Neither case should pretend that the agent performed no work. The parent chat remains the place where the user continues the coding conversation.
Before and after
These are actual tester screenshots. The collapsed overview is the default; the lower row shows the two levels of additional detail.
Original light-theme design prototype
This is the design reference used while developing the feature, rather than a separate runtime verification. The screenshots above show the implemented Linux desktop UI.
Short interaction recording: expand recent tools, open full history, expand/collapse a patch, and return to the roster. Playback is sped up.
agent-activity-interaction.mp4
What the implementation revealed
The roster and the child’s detailed transcript are different data sources. A provider can supply enough progress information to update a card without supplying attributed child tool events to the parent’s activity stream. A progress summary can replace an earlier summary; it is not a durable tool history.
For Codex specifically, T3’s child-item handling supplied progress summaries while the activity presentation needed retained tool entries. Native saved child history was available through
thread/read. The implementation therefore adds a separate on-demand history read, rather than trying to reconstruct a complete transcript from the current progress label.This distinction also avoids making history depend entirely on the parent client’s bounded retained activity list. It does not remove native transcript availability, truncation, or provider protocol limitations.
Implementation approach in PR #10881
The client sends a typed, read-authorized
orchestration.getAgentHistoryrequest to the environment that owns the thread. The server uses the persisted provider-instance binding and resume metadata to select the correct adapter. Provider-specific interpretation stays at that boundary.Adapters verify the selected child’s ancestry before returning its saved content. Responses normalize messages, reasoning, tools, and file edits into bounded entries. The implementation limits pages to 50 entries, titles to 500 characters, and details to 8,000 characters, with explicit truncation. Recent-tool previews use shorter details.
This is intentionally an environment-local read exposed through the existing WebSocket architecture. It does not assume that the browser can read the server’s filesystem or that localhost in the browser is the provider’s machine. Configured provider homes and credentials remain associated with the server’s provider instance.
Codex, Grok, and fallback OpenCode history reads share read-only transports per provider instance and working directory. They use a bounded pool of eight connections, release connections after 30 seconds idle, and release resources with the adapter’s scope. Initialization and reads have 20-second deadlines; failed connections are invalidated. This addressed review feedback that polling multiple cards must not repeatedly launch and terminate provider processes.
Provider support and confidence
thread/read, with child ancestry verification and an initialize-only history transport.The feature should communicate these differences honestly. Native validation of Codex and Claude should not be presented as proof that the other providers have equivalent coverage.
Verification completed
Boundaries and work still needed
Suggested acceptance criteria
Adoption options for maintainers
The existing PR is a working reference, not a request that every part must be accepted together. The user-facing behavior and screenshots are the outcome I care about; maintainers can simplify or reimplement the internals.
A smaller rollout could start with the shared history endpoint and Codex + Claude, then add the presentation and other providers in focused follow-ups. Alternatively, the UI implementation can be consolidated while preserving the same interactions. Simply deleting OpenCode/Grok from the existing diff does not make it a sub-1,000-line PR, because much of the size comes from replacing the old panel. Removing tests or compressing formatting would not improve reviewability.
For Julius and other maintainers evaluating this request, the main decisions are:
The full implementation, review discussion, screenshots, and recording are linked in PR #10881. This proposal is intended to remain useful even if that PR is split, deferred, or replaced.
Model: GPT-6 Astra. Harness: Codex.
All reactions