Repository navigation
Open
Labels
squadSquad triage inbox — Lead will assign to a memberSquad triage inbox — Lead will assign to a membersquad:cli-devAssigned to cli-dev (CLI Engineer)Assigned to cli-dev (CLI Engineer)squad:copilotAssigned to @copilot (Coding Agent) for autonomous workAssigned to @copilot (Coding Agent) for autonomous worktype:featureNew capabilityNew capability
Description
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/healthport scan. - The event model:
DashboardEvent {t, lane, kind, text, extra}and theDashboardSource {poll(), label}interface inpackages/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.messageandassistant.messageassistant.turn_startandassistant.turn_endtool.execution_startandtool.execution_completeskill.invokedhook.startandhook.endsession.start,session.resumeandsession.shutdownmodel.*andsession.usage_*
Proposal
- A
CopilotSessionSource. It finds the newest session for the current directory, probably from the directory recorded inworkspace.yaml, and follows itsevents.jsonlincrementally. It turns turns, tool calls and skills into the coordinator's lane.--session <id>pins a session, as it does for Claude. - 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.
- 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. - Starting it from Copilot. Add a Squad skill or prompt in the Copilot projection that runs
squad dashboard --detach --open, matching/squad:dashboard. - Privacy. Use the same rules as the Claude source. Never show system prompts or
model.messages_snapshotcontents, and build test fixtures from synthetic data rather than real sessions.
Open questions
- Is the
events.jsonlschema 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 dashboardin 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.jsonlfixtures. features/claude-code-plugin.md, or a new host-neutral dashboard page, documents Copilot use.
Metadata
Metadata
Assignees
Labels
squadSquad triage inbox — Lead will assign to a memberSquad triage inbox — Lead will assign to a membersquad:cli-devAssigned to cli-dev (CLI Engineer)Assigned to cli-dev (CLI Engineer)squad:copilotAssigned to @copilot (Coding Agent) for autonomous workAssigned to @copilot (Coding Agent) for autonomous worktype:featureNew capabilityNew capability
Activity