Skip to content

feat(web-react): retained tool runs with drill-in transcripts (sandbox sessions as inspectable subagents) #28

Description

@drewstone

cloudflare/agents-starter#154's strongest UX pattern: a delegated agent run is simultaneously (1) a normal tool call in the parent transcript, (2) a retained child with its own persisted history, (3) live run events keyed by toolCallId (useAgentToolEventsrunsByToolCallId), and (4) a readonly drill-in panel ("Readonly drill-in. Follow up in the main chat").

This maps directly onto our sandbox-as-tool: a sandbox session referenced by id IS a retained subagent. Instead of dumping stdout into the chat, the tool chip should expand into a drill-in transcript of the sandbox session (commands, outputs, files touched).

Pieces:

  • agent-app: a run-events contract — loop emits tool_run progress events keyed by toolCallId; products persist run transcripts keyed by (threadId, toolCallId).
  • web-react: ToolRunChip + readonly RunDrillIn panel components consuming those events.
  • Fail-closed child access like their onBeforeSubAgent: clients may only attach to run ids the server-side loop created (matches our "trusted context never from tool args" invariant).

Also worth adopting from the same PR, smaller: out-of-band broadcast for async completions (e.g. "training run finished" as a toast, never injected into chat history — their comment notes injecting causes the model to loop on the notification), and workspace-scoped shared MCP/integration connections proxied into per-chat toolsets with descriptor caching (they re-discover MCP tools synchronously before every message — flagged in their own PR as a flaw).

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions