Activity Feed
Applies to: Dispatch v1.0.0, last verified 2026-04-05
The activity feed occupies the right column on desktop. It shows a live stream of structured events (phase completions, session starts/ends, agent spawns, and errors) across all projects and epics in real time.
TL;DR: The right column streams activity events as agents work. You can filter by persona or project, group entries, and control what details each card shows.
How the feed works
Section titled “How the feed works”The feed is driven by ActivityEvent objects, not by direct parsing of execution-log.md markdown. Events are emitted server-side by server/activity-store.ts (a ring buffer), broadcast to the dashboard as activity_event SSE messages, and fetched on initial load from GET /api/activity. The useActivityEvents() hook in the frontend manages the subscription and local state.
Event types:
| Type | What triggers it |
|---|---|
phase_completed | An agent appends a completion entry to execution-log.md |
phase_started | A phase transitions to IN_PROGRESS |
phase_blocked | A phase transitions to BLOCKED |
session_started | A session starts on a registered project (any provider) |
session_ended | A session ends (any provider) |
agent_spawned | A parent session spawns a subagent |
error | A server-detected error event |
What an entry shows
Section titled “What an entry shows”Each entry is rendered as a typed card. Click anywhere on a card to expand it inline. Expanded cards show an ActivityRelationGraph, an inline SVG mini-graph showing the event’s relationships to epics, sessions, and parent agents.
| Element | Description |
|---|---|
| Timestamp | When the event occurred |
| Event type badge | The event type (e.g. phase_completed, agent_spawned) |
| Persona / agent name | The agent associated with the event |
| Epic title | The human-readable epic title (from title: frontmatter, request: first sentence, or prettified slug), not the raw kebab-case slug |
| Project name | Which registered project the epic belongs to (hideable via Settings) |
| Summary / body | Phase completion summaries show the prose from the execution log; session events show the opening prompt |
Toolbar controls
Section titled “Toolbar controls”The toolbar above the feed has the following controls, from left to right:
Sort toggle: switches between newest-first (default) and oldest-first. The button shows in the accent color when oldest-first (non-default) is active.
Collapse / Expand All: located in the group-by row (not the top toolbar). Toggles the summary body of all visible entries open or closed.
Font size: four sizes: 10, 11, 12, 13 px. Affects only the feed entries.
Filter panel toggle: opens a collapsible panel with:
- Persona chips: filter to entries from one or more personas
- Project chips: filter to entries from one or more projects
- Group by: group entries by none (flat list), epic, persona, or project. Group headers are sticky.
- Clear filters shortcut at the bottom of the open panel
When active filters produce zero results, the empty state shows a “Clear filters” shortcut.
Visibility
Section titled “Visibility”If you do not want the activity feed visible at all, go to Settings → Visibility and toggle Activity Feed off. This removes the right column entirely. You can re-enable it at any time.
To keep the panel visible but make it less prominent, enable Dim Activity Bar in Settings → Visibility. This renders the panel at 60% opacity.
The feed panel width is draggable on desktop. The width persists across page loads.
Feed entry detail controls
Section titled “Feed entry detail controls”Within Settings you can also control what each entry shows:
| Setting | Location | Effect |
|---|---|---|
| Timestamps | Settings → Visibility → Activity Feed Details | Show or hide the ISO timestamp on each entry |
| Project Names | Settings → Visibility → Activity Feed Details | Show or hide the project label on each entry |
Event-specific card details
Section titled “Event-specific card details”The following applies to session_started, session_ended, and agent_spawned events.
Session events: prompt previews and origin badges
Section titled “Session events: prompt previews and origin badges”For session_started or session_ended events, the card title shows the actual prompt that started the session instead of the old “Session started for projectName” text. The title truncates at 80 characters with an ellipsis.
The badge on the card tells you where the agent process was launched from. Two values are possible:
| Badge | Color | Meaning |
|---|---|---|
terminal | Green | Session was started from a terminal (claude CLI) |
ide | Cyan | Session was started from an IDE integration |
When you expand a session event card, a green left-bordered callout labeled Prompt shows the full prompt text.
The “Open session” button uses the session’s prompt snippet as its label rather than a raw hex ID.
Agent spawned events: intent badges
Section titled “Agent spawned events: intent badges”When an agent is spawned, Dispatch infers the intent by looking at the task description. The badge on the card shows that inferred intent instead of the generic spawned label.
| Badge | Color | Inferred when the task description mentions |
|---|---|---|
code review | Sky blue (#38bdf8) | review, audit, inspect, security |
plan | Indigo (#818cf8) | plan, architect, design, strategy, structure, outline, propose |
explore | Fuchsia (#e879f9) | explore, research, investigate, discover, search, scan, find |
confirm | Gold (#fbbf24) | confirm, verify, validate, ensure |
expertise | Teal (#34d399) | expert, expertise, advice, consult, opinion, recommend, guidance |
task | Orange (#fb923c) | implement, build, write, fix, create, develop, execute, add, refactor |
When none of these keywords match, the badge falls back to spawned.
The left accent bar and the badge share the same intent color, so each spawned agent card is visually consistent. Background agents render the badge in italic.
The metadata line below the description shows the epic title (purple) when the agent is part of an epic, or the intent label when it is not. Background agents append · background to that line.
Expanded detail panel for agent_spawned events:
When you expand an agent spawn card, two callouts appear above the standard payload fields:
- Spawned by (indigo left border): shows the first 60 characters of the parent session’s prompt and an Open parent ↗ button that jumps to the parent session drawer.
- Task (intent-colored left border): shows the full task description the agent was given.
Relationship mini-graph
Section titled “Relationship mini-graph”Every expanded entry includes an inline SVG mini-graph. The graph layout depends on the event type.
For agent_spawned events, the graph is a vertical linear chain:
[parent session] ← green box, clickable (navigates to parent session) ↓ spawned[@agent-role] ← colored by intent, not clickable (this IS the current event) ↓ in (only present if the agent belongs to an epic)[epic title] ← purple box, shows human-readable title, clickable (navigates to epic)For all other event types, the graph uses a hub-and-spoke layout with the event at the top and related entities fanning out below. For session_started and session_ended events, the self-referential session spoke is omitted because the event itself is the session.
Clickable nodes have a two-ring halo (outer glow, inner dashed ring) and a ↗ glyph in the top-right corner. Edges have arrowheads showing direction.
Accessibility
Section titled “Accessibility”The feed uses aria-live="polite" on the empty state. Filter and sort controls set aria-pressed. The filter panel toggle sets aria-expanded. Persona and project chip groups use role="group".