Skip to content

Dashboard: show GitHub Copilot sessions (CopilotSessionSource) #2464

Open

Description

@bradygaster

Summary

The team dashboard from #2460 (squad dashboard, /squad:dashboard) only reads Claude Code sessions. It should also show sessions from the GitHub Copilot app and CLI.

What is already host-neutral

  • The server in packages/squad-cli/src/cli/dashboard/server.ts: it binds to 127.0.0.1, checks the Host header, sends the CSP and replays over SSE.
  • The page in packages/squad-cli/src/dashboard-ui/.
  • The state file in ~/.squad/dashboards/ and the /health port scan.
  • The event model: DashboardEvent {t, lane, kind, text, extra} and the DashboardSource {poll(), label} interface in packages/squad-cli/src/cli/dashboard/sources.ts.

The only Claude-specific parts are the two sources (the transcripts in ~/.claude/projects/ and claude -p stream-json) and the /squad:dashboard plugin command.

What Copilot writes

Each session has its own folder, ~/.copilot/session-state/<uuid>/, containing events.jsonl, workspace.yaml, session.db, checkpoints/ and files/. One local session included these event types (only the types were checked, not the content):

  • user.message and assistant.message
  • assistant.turn_start and assistant.turn_end
  • tool.execution_start and tool.execution_complete
  • skill.invoked
  • hook.start and hook.end
  • session.start, session.resume and session.shutdown
  • model.* and session.usage_*

Proposal

  1. A CopilotSessionSource. It finds the newest session for the current directory, probably from the directory recorded in workspace.yaml, and follows its events.jsonl incrementally. It turns turns, tool calls and skills into the coordinator's lane. --session <id> pins a session, as it does for Claude.
  2. Member lanes. First find out whether Copilot records member dispatches (custom agents or subagents) as events of their own and how they link to the parent tool call. If it doesn't, show only the coordinator's lane and say so on the page.
  3. Choosing the source. Add squad dashboard --host claude|copilot. Without it, the dashboard should use whichever host has the newest session for the current directory.
  4. Starting it from Copilot. Add a Squad skill or prompt in the Copilot projection that runs squad dashboard --detach --open, matching /squad:dashboard.
  5. Privacy. Use the same rules as the Claude source. Never show system prompts or model.messages_snapshot contents, and build test fixtures from synthetic data rather than real sessions.

Open questions

  • Is the events.jsonl schema stable, or versioned across Copilot releases?
  • Do the Copilot app and the Copilot CLI share ~/.copilot/session-state/?
  • Where do sessions live on Windows, and is there an override similar to COPILOT_HOME?

Done when

  • squad dashboard in a repository being worked on in Copilot shows the live session, including member lanes if Copilot records them.
  • There are source tests using synthetic events.jsonl fixtures.
  • features/claude-code-plugin.md, or a new host-neutral dashboard page, documents Copilot use.

Follow-up to #2460 (epic #2438).

Activity

  1. added
    squad:cli-devAssigned to cli-dev (CLI Engineer)
    squad:copilotAssigned to @copilot (Coding Agent) for autonomous work
    on Nov 10, 2026
  2. added
    squadSquad triage inbox — Lead will assign to a member
    on Nov 10, 2026
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:cli-devAssigned to cli-dev (CLI Engineer)squad:copilotAssigned to @copilot (Coding Agent) for autonomous worktype:featureNew capability

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions