Skip to content

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.

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:

TypeWhat triggers it
phase_completedAn agent appends a completion entry to execution-log.md
phase_startedA phase transitions to IN_PROGRESS
phase_blockedA phase transitions to BLOCKED
session_startedA session starts on a registered project (any provider)
session_endedA session ends (any provider)
agent_spawnedA parent session spawns a subagent
errorA server-detected error event

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.

ElementDescription
TimestampWhen the event occurred
Event type badgeThe event type (e.g. phase_completed, agent_spawned)
Persona / agent nameThe agent associated with the event
Epic titleThe human-readable epic title (from title: frontmatter, request: first sentence, or prettified slug), not the raw kebab-case slug
Project nameWhich registered project the epic belongs to (hideable via Settings)
Summary / bodyPhase completion summaries show the prose from the execution log; session events show the opening prompt

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.

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.

Within Settings you can also control what each entry shows:

SettingLocationEffect
TimestampsSettings → Visibility → Activity Feed DetailsShow or hide the ISO timestamp on each entry
Project NamesSettings → Visibility → Activity Feed DetailsShow or hide the project label on each entry

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:

BadgeColorMeaning
terminalGreenSession was started from a terminal (claude CLI)
ideCyanSession 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.

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.

BadgeColorInferred when the task description mentions
code reviewSky blue (#38bdf8)review, audit, inspect, security
planIndigo (#818cf8)plan, architect, design, strategy, structure, outline, propose
exploreFuchsia (#e879f9)explore, research, investigate, discover, search, scan, find
confirmGold (#fbbf24)confirm, verify, validate, ensure
expertiseTeal (#34d399)expert, expertise, advice, consult, opinion, recommend, guidance
taskOrange (#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:

  1. 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.
  2. Task (intent-colored left border): shows the full task description the agent was given.

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.

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".