Skip to content

Claude team dashboard: read live Claude Code sessions instead of captured stream-json #2459

Open

Description

@bradygaster

Part of #2438 (a follow-up from the Claude Code end-to-end test). Feeds #2443.

Problem

The Squad + Claude Code end-to-end test (BRICKBREAK, from an empty repo) used a prototype team dashboard: a Board, a Roadmap ("who's working when") and a Conversation view of the coordinator and each member subagent. It made the multi-agent behaviour easy to follow, which the terminal does not.

The prototype only works on logs captured by hand: it reads claude -p --output-format stream-json --verbose output saved with tee. Normal interactive users never produce that, so as it stands it can't ship.

The prototype is on branch squad/2443-claude-plugin under prototypes/claude-dashboard/ (server.mjs and index.html; no tests).

What Claude Code already writes

Claude Code keeps every session on disk, interactive or headless, so no capture is needed:

  • ~/.claude/projects/<encoded-cwd>/<session-id>.jsonl: the main (coordinator) transcript. Lines have type (user, assistant, system, attachment, …), uuid/parentUuid, timestamp, sessionId, cwd and gitBranch. Stop-hook runs show up as system / stop_hook_summary.
  • <session-id>/subagents/agent-<id>.jsonl: one transcript per subagent run.
  • <session-id>/subagents/agent-<id>.meta.json: agentType (the member, e.g. pinky), description, toolUseId (links back to the coordinator's Agent tool call), requestShape (background or not), the chosen model and finished.

These are internal Claude Code files, not a documented API, so the reader must be tolerant: skip unknown line types, and fail visibly (not silently) if the layout changes.

What needs to be done

  • A transcript reader that turns a session directory into the same normalized events the prototype uses (session, dispatch, start, progress, tool, say, hook, end, result), with one lane per member (agentType) plus the coordinator.
  • Follow the files while they grow (new lines, new subagent files), and stream the updates to the page over SSE, as the prototype does.
  • Pick the session: by default the newest session for the current repo (encode the cwd the way Claude Code does); allow --session <id>; and handle --continue runs, which append to the same session.
  • Keep the existing stream-json input as a second source, for headless and CI runs (squad watch --execute uses it).
  • Map names through the team roster (.squad/team.md), so members show with their cast names and roles; unknown subagent types fall back to their type (for example general-purpose).
  • Bind to 127.0.0.1 only, and treat transcript content as untrusted: escape everything rendered, and don't render links or HTML from it.
  • Tests: unit tests for the reader against a small checked-in fixture session (trimmed and scrubbed: no real paths, tokens or prompts), covering parallel background members, a --continue second turn, a hook event, and an unknown line type. Consider reusing the golden-trace fixture approach from test(backend): run the golden trace live on the claude-agent-sdk harness (#2441) #2452.

Done when

  • Running the dashboard in a repo with an active or past Claude Code Squad session shows the team without any extra flags on claude.
  • The reader has tests, and the prototype's behaviour (lanes, background shells owned by a member, coordinator comments, light/dark) is kept.
  • The page stays local-only and escapes all transcript content.

Activity

  1. added
    squadSquad triage inbox — Lead will assign to a member
    squad:plugin-platform-devAssigned to plugin-platform-dev (Plugin Platform Engineer)
    squad:observability-devAssigned to observability-dev (Observability Engineer)
    on Nov 10, 2026
  2. github-actions commented on Nov 10, 2026

    @github-actions
    Contributor

    📋 Assigned to observability-dev (Observability Engineer)

    Issue: #2459 — Claude team dashboard: read live Claude Code sessions instead of captured stream-json

    observability-dev will pick this up in the next Copilot session.

    For Copilot coding agent: If enabled, this issue will be worked automatically.
    Otherwise, start a Copilot session and say:
    observability-dev, work on issue #2459

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    squadSquad triage inbox — Lead will assign to a membersquad:observability-devAssigned to observability-dev (Observability Engineer)squad:plugin-platform-devAssigned to plugin-platform-dev (Plugin Platform Engineer)type:featureNew capability

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions