PRD-72: Activity Command Centre v2
Version: 2.0 Status: Draft Priority: P1 Author: Gar Kavanagh + Auto CTO Created: 2026-03-07 Updated: 2026-03-11 Dependencies: PRD-10 (Workflow Engine — COMPLETE), PRD-55 (Agent Heartbeats — COMPLETE), PRD-06 (Monitoring & Analytics — COMPLETE), PRD-76 (Agent Reporting — COMPLETE), PRD-77 (Agent Self-Scheduling — IN PROGRESS) Branch: feat/activity-command-centre-v2 Inspiration: crshdn/mission-control — Kanban patterns, @hello-pangea/dnd, SSE real-time
Executive Summary
The Activity page is the nerve centre of Automatos — but v1 was a list-based feed that required clicking through multiple pages to understand what's happening. Users couldn't track task progress, manage workload, review agent output, or see their schedule without navigating 3-4 different views.
v2 rebuilds Activity as a five-tab operational dashboard that replaces the need for Jira, combines Feed + Reports into a Kanban board, adds a Calendar for scheduled tasks, enhances Memory with a daily journal view, and introduces a Projects page for multi-agent initiatives.
What's Changing
Dashboard
Summary
Rename + new analytics widgets (status donut, priority breakdown, workload, types of work)
Feed
Board
List → Kanban board with drag-and-drop, agent sidebar, unified task viewer
Reports
(merged into Board)
Reports are now viewable inside task cards at Review/Done stages
Memory
Memory
Enhanced: two-panel layout, daily journal, organized by day/agent/type
Missions
Projects
Evolved from placeholder into project cards with progress tracking
(new)
Calendar
Full scheduler view: always-running tasks, week grid, next-up list
What's New (Cross-Cutting)
Global Search (Cmd+K) — spotlight-style overlay searching tasks, memories, documents, agents
SSE real-time updates — Board receives live task status changes via Server-Sent Events instead of polling
Unified Task Viewer — one slide-over component replaces separate Feed detail, Reports viewer, and Execution detail
What We're NOT Building
New execution engine (existing recipe executor + heartbeat service are sufficient)
Agent Zero / Orchestrator rename (separate effort, out of scope)
Chat entries on the Board (chat history stays at
/chat)Analytics replacement (Analytics page stays for cost/performance trends)
1. Naming Convention
User-Facing Terminology
UI displays "Task" — backend remains "Recipe". No backend rename.
Recipe execution (single/multi-step)
Task
CheckSquare
A unit of work — one step or many
Agent heartbeat
Routine
RefreshCw
Recurring background check
Complex dynamic workflow
Project
FolderKanban
Multi-task initiative with progress tracking
Chat + tool calls
Chat
MessageCircle
Conversations (not shown on Board)
Task Status Labels (Board Columns)
inbox
Inbox
--muted
bg-muted/10 text-muted-foreground
assigned
Assigned
--agent
bg-[hsl(var(--agent))]/10 text-[hsl(var(--agent))]
in_progress
In Progress
--info
bg-[hsl(var(--info))]/10 text-[hsl(var(--info))]
review
Review
--warning
bg-[hsl(var(--warning))]/10 text-[hsl(var(--warning))]
done
Done
--success
bg-[hsl(var(--success))]/10 text-[hsl(var(--success))]
failed
Done (with error)
--destructive
bg-destructive/10 text-destructive
Priority Levels
urgent
--destructive
Red dot / border
high
--warning
Amber badge
medium
--info
Blue badge
low
--muted
Gray badge
2. Design System Compliance
All components follow the established Automatos design language from globals.css. No custom colours or one-off styling.
Required Patterns
Page header
<PageHeader> shared component
Title with gradient-text accent
Stat cards
<StatsBar> shared component
4-up hero stats, glass-card + card-glow
Tab navigation
<FilterTabs> shared component
Icon + label tabs, bg-secondary/40 backdrop-blur
Content cards
glass-card class
All card surfaces
Drill-down panels
glass-panel class
Task viewer slide-over
Status badges
Semantic Badge variants
Using CSS variable palette above
Charts
Recharts with MODEL_COLORS palette
Donut, bar charts on Summary
Motion
framer-motion staggered entrance
initial → animate with delay: index * 0.08
Empty states
Centered icon + two-line text
Muted icon (30% opacity) + description
Loading
<Skeleton> matching card layout
Skeleton grid matching real content shape
Mobile
Reduced backdrop-blur(8px)
Per globals.css @media (max-width: 767px)
Typography Scale
Page title:
text-2xl md:text-3xl font-boldStat value:
text-2xl font-bold leading-noneStat label:
text-sm text-muted-foregroundCard title:
CardTitlewith icon +gap-2Table header:
text-[11px] font-medium text-muted-foreground uppercase tracking-widerBody text:
text-smTimestamps:
text-xs text-muted-foreground
Colour Semantics (DO NOT hardcode hex)
3. Page Layout
Route
Tab Structure
Deep-link support: ?tab=board&task_id=123 opens Board with task viewer for that task.
4. Summary Tab (Default)
Renamed from "Dashboard". Draggable widget grid using react-grid-layout (already installed).
4.1 Existing Widgets (Keep)
Active Now
active-now-widget.tsx
Top 5 currently running tasks with progress bars
Schedule
schedule-widget.tsx
Week calendar dots + upcoming 5 items. Click "View All" → Calendar tab
Agent Reports
agent-reports-widget.tsx
Pinned agent report cards
Recent Activity
recent-activity-widget.tsx
Last 5 completed + 3 failed. Click "View All" → Board tab
4.2 New Widgets
Status Overview (Donut Chart)
Recharts
PieChartwithinnerRadiusfor donutCounts from Board data (
GET /api/activity/board/stats)Click segment → navigates to Board tab filtered by that status
Click "View all" → Board tab
Priority Breakdown (Bar Chart)
Recharts
BarChartShows task count by priority level
Colour-coded bars using priority colours from Section 1
Types of Work (Horizontal Bar)
Shows distribution of work items by type
Horizontal stacked bars
Team Workload (Agent Distribution)
Horizontal bars per agent
Click agent row → Board filtered by that agent
4.3 Widget Grid
All 8 widgets rendered via react-grid-layout with drag-to-reorder. Layout persisted in localStorage (automatos:dashboard-layout). "Customize" toggle + "Reset Layout" button (existing pattern from v1).
Default layout (2-column on desktop):
5. Board Tab (Replaces Feed + Reports)
The centrepiece of v2. A Kanban board with agent sidebar, drag-and-drop task management, and a unified task viewer that replaces the separate Feed detail and Reports pages.
5.1 Layout
5.2 Agent Sidebar
Left panel showing all workspace agents:
Agent avatar, name, role badge (LEAD/INT/SPC), status dot
Click agent → filters board to show only that agent's tasks
Active filter shown as highlighted agent row
Click again to clear filter
Collapsible on mobile (hamburger toggle)
Data source: GET /api/agents?workspace_id=X (existing endpoint)
5.3 Board Columns
5 columns using @hello-pangea/dnd (fork of react-beautiful-dnd, actively maintained):
Inbox
inbox
--muted
New tasks not yet assigned
Assigned
assigned
--agent
Assigned to an agent, waiting to start
In Progress
in_progress
--info
Currently executing
Review
review
--warning
Awaiting human or LLM review
Done
done
--success
Completed (success or failure)
Each column header shows: ● COLUMN NAME (count)
Columns are scrollable vertically. Cards within a column are ordered by priority (urgent first), then by updated_at DESC.
5.4 Board Card
Each task is a draggable card:
Card fields:
Task name (line-clamp-2)
Description snippet (line-clamp-2,
text-sm text-muted-foreground)Agent avatar + name (bottom-left)
Time ago (bottom-right)
Tags as pills (
text-xsbadges)Priority indicator: left border colour or small dot next to title
Arrow button → opens Task Viewer
For "In Progress": mini progress bar showing step X of Y
Drag behaviour:
@hello-pangea/dnd<DragDropContext>wrapping the boardEach column is a
<Droppable>Each card is a
<Draggable>On drag end: optimistic UI update →
PATCH /api/activity/tasks/{id}/statusOn API failure: revert to previous position + toast error
Cards in "In Progress" with
runningbackend status: draggable (user can force-move to Review/Done)Cards in "Done" with
completedstatus: draggable back to Inbox for re-run
5.5 Task Viewer (Slide-Over)
Replaces: activity-feed-item.tsx detail, report-viewer.tsx, execution-detail.tsx
Opens as a right slide-over panel when clicking a card's arrow button or double-clicking a card.
Content adapts based on the task's current column:
Inbox / Assigned View
Editable fields: assignee (agent dropdown), priority, due date, tags, review mode
"Start Task" moves to In Progress and triggers execution
In Progress View
Reuses internals from existing
execution-detail.tsxLive log streaming via SSE
Step pipeline with
stage-completed,stage-active,stage-pendingCSS classes"Stop" button cancels execution
"Move to Review" manually advances (or auto-advances on completion)
Review View
Renders report content as markdown (reuses
report-viewer.tsxinternals)Grade form with star rating + notes (reuses
report-grade-form.tsx)Review mode selector: Human / LLM / Auto
Human: requires manual approve/reject
LLM: another agent reviews and auto-approves/rejects based on quality threshold
Auto: moves to Done automatically on completion (no review step)
Reject sends back to Inbox with rejection notes
Approve moves to Done with grade saved
Done View
Full report content rendered
Execution metadata: duration, tokens, steps, trigger
Re-run creates a new execution of the same recipe
Download as markdown
Failed tasks show error message + stack trace in collapsible section
5.6 Creating Tasks
"New Task" button in Board header → opens existing create-recipe-modal.tsx:
1-step recipe = simple task
N-step recipe = multi-step workflow
No backend changes needed — recipe model already supports both
Task can also be created by:
Agents spawning sub-tasks via
platform_schedule_tasktool (PRD-77)QA agent adding bug-fix tasks to Inbox
Redis queue pushing new tasks (existing infrastructure)
5.7 Board Filters
Filter bar above the board:
Agent: multi-select dropdown of workspace agents
Priority: multi-select (Urgent/High/Medium/Low)
Type: Routine / Task (single-step) / Workflow (multi-step)
Date Range: Today / This Week / This Month / Custom
Search: instant filter by task name/description
Filters persist in URL query params for shareability.
5.8 Real-Time Updates (SSE)
Board uses Server-Sent Events instead of polling:
SSE Event Types:
task_created
Full task object
Card appears in Inbox with log-slide-in animation
task_updated
{ id, status, agent_id, ... }
Card moves to new column with animation
task_progress
{ id, step_current, step_total, log_line }
Progress bar updates, log line appends
task_completed
{ id, status, duration, report_id }
Card moves to Review or Done
task_failed
{ id, error_message }
Card shows error badge, moves to Done
Fallback: If SSE connection drops, fall back to 60s polling via useActivityFeed() (existing hook). Reconnect SSE with exponential backoff (1s, 2s, 4s, max 30s).
Backend implementation:
New SSE endpoint in
orchestrator/api/activity.pyPublishes events from: recipe executor, heartbeat service, manual status changes
Uses Redis pub/sub as event bus (existing Redis infrastructure)
6. Calendar Tab
Full-page scheduler view showing all of Automatos's scheduled and recurring tasks. Lets users verify what's running proactively, spot unwanted schedules, and click through to task details.
6.1 Layout
6.2 Three Sections
Always Running
Shows high-frequency routines (interval < 1 hour)
Pill badge:
{name} • Every {interval}Click → opens task viewer
Week Grid
7-column day grid (Sun-Sat)
Task pills colour-coded per agent (consistent colours from agent config)
Shows task name (truncated) + scheduled time
Parsed from cron expressions in
schedule_configCurrent day column highlighted (today indicator)
Click pill → opens task viewer slide-over
Next Up
Sorted list of upcoming tasks by soonest
Shows task name + relative time ("In 30 min", "In 1 hours")
Colour-coded text matching agent colour
Click row → opens task viewer
6.3 Data Source
Extend existing useActivitySchedule() hook:
Already returns
next_run_at,frequency,agent_name,agent_idAdd: cron expression parsing to plot recurring items on week grid
Add: "always running" filter for sub-hourly intervals
Endpoint:
GET /api/activity/schedule?range=7d(existing)
6.4 View Toggle
Week (default): 7-day grid view
Today: single-day view with hourly timeline
Refresh button: re-fetches schedule data
6.5 Library Decision
Build custom (no external calendar library needed). The design is a simple week grid with pills — @fullcalendar is overkill. A CSS grid with mapped cron data is sufficient. If we later need month view or drag-to-reschedule, we can add @fullcalendar then.
7. Memory Tab
Two-panel layout inspired by daily journal apps. Browse and search through all of Automatos's memories, organized chronologically with rich content rendering.
7.1 Layout
7.2 Left Sidebar
Search
Full-text search across all memories
Fix required: verify
Mem0Client.search()POST fix merged fromfix-memorybranchResults replace the journal list with search results, ranked by relevance score
Keyboard: Enter to search, Esc to clear
Long-Term Memory Card
Shows total word count, last updated timestamp
Click → displays consolidated long-term memory in right panel
Badge:
🧠emoji or Brain icon
Daily Journal
Grouped by time period:
Yesterday (collapsible)
This Week (collapsible)
{Month Year} (collapsible) — e.g., "February 2026 (25)"
Each entry row:
📅 {Day, Mon DD}+{size} • {word count}Click entry → loads full content in right panel
Active entry highlighted with
◀indicator andbg-primary/10background
7.3 Right Content Panel
Renders selected memory entry as rich markdown
Header:
{date} — {day name}+ metadata (date, size, word count, modified time)Content sections with timestamp headers:
⏰ 9:00 AM — {Topic}Structured entries with: "What we discussed", "Key findings", "Recommendations", "Decision"
Code blocks syntax-highlighted
Images rendered inline
7.4 Organize By (Toggle)
Above the journal list, a segmented control:
By Day (default): grouped by date as shown above
By Agent: grouped by agent name, each agent section shows their memories
By Type: grouped by category (conversation, task, document, insight, research)
7.5 Enhanced Filters
Agent dropdown (multi-select)
Date range picker
Type/Category filter (global / agent-specific)
Sort: Newest (default) / Oldest / Relevance (when searching)
7.6 API Changes
GET /api/memory/browse
Add group_by param: day / agent / type
GET /api/memory/browse
Add date_from, date_to params
POST /api/memory/search
Verify working (Mem0 POST fix)
GET /api/memory/health
Existing — no changes
GET /api/memory/journal/{date}
New — returns full day's memory content as structured markdown
8. Projects Tab
Evolved from the v1 "Missions" placeholder into a project management view. Projects are multi-task initiatives with progress tracking, assigned agents, and priority.
8.1 Layout
8.2 Project Card
Card fields:
Project name
Status badge:
Active(green) /Planning(blue) /Complete(muted) /On Hold(amber)Description (line-clamp-3)
Progress bar: completed tasks / total tasks, percentage
Lead agent avatar + name
Priority badge
Time since creation
8.3 Project Detail (Click-Through)
Clicking a project card opens a detail view:
Lists all tasks belonging to this project
Each task row links to the Board task viewer
"Add Task" creates a new task pre-linked to this project
"Open in Board" navigates to Board tab filtered by this project's tasks
8.4 Data Model
Projects are a new concept — a group of recipes/tasks with shared metadata:
Link table for project ↔ task (recipe execution) relationship:
8.5 API Endpoints
GET
/api/projects
List projects for workspace
POST
/api/projects
Create project
GET
/api/projects/{id}
Project detail with tasks
PATCH
/api/projects/{id}
Update project
POST
/api/projects/{id}/tasks
Link task to project
DELETE
/api/projects/{id}/tasks/{exec_id}
Unlink task
9. Global Search (Cmd+K)
Spotlight-style search overlay accessible from anywhere in the app.
9.1 Trigger
Keyboard:
Cmd+K(Mac) /Ctrl+K(Windows/Linux)Click: Search icon in top navigation bar
9.2 Layout
9.3 Search Categories
Results grouped by type:
Tasks
CheckSquare
Recipe executions (name, description)
Memories
Brain
Memory search (content)
Documents
FileText
Document metadata (name)
Agents
Bot
Agent names, roles
Projects
FolderKanban
Project names, descriptions
9.4 Result Item
Each result shows:
Category icon
Title (highlighted match)
Subtitle (agent name, category, or date)
Status dot (colour = current status for tasks)
Arrow → navigates to item
9.5 Keyboard Navigation
↑↓— move selectionEnter— open selected itemEsc— close searchType to filter in real-time (debounced 300ms)
9.6 API
Returns results grouped by type, ordered by relevance. Backend searches across:
recipe_executions(name, description via ILIKE)memories(Mem0 vector search)documents(name, metadata via ILIKE)agents(name, role via ILIKE)projects(name, description via ILIKE)
10. API Endpoints (Complete)
10.1 Existing Endpoints (No Changes)
GET
/api/recipes
Recipe list (used by Board internally)
GET
/api/recipes/{id}/executions
Recipe execution history
POST
/api/recipes/{id}/execute
Manual recipe run
GET
/api/activity/feed
Feed data (fallback for Board polling)
GET
/api/activity/stats
Stats for hero cards
GET
/api/activity/schedule
Calendar data source
GET
/api/agents
Agent list for sidebar
GET
/api/memory/health
Memory health stats
DELETE
/api/memory/{id}
Delete memory
POST
/api/memory/consolidate
Merge/summarize memories
10.2 Modified Endpoints
GET
/api/activity/feed
Add status filter for board columns (inbox, assigned, in_progress, review, done)
GET
/api/memory/browse
Add group_by, date_from, date_to params
10.3 New Endpoints
PATCH
/api/activity/tasks/{id}/status
Update task status (drag-and-drop)
PATCH
/api/activity/tasks/{id}
Update task fields (assignee, priority, tags, due_date, review_mode)
GET
/api/activity/board/stats
Board column counts + priority/type/agent breakdowns for Summary widgets
GET
/api/activity/board/stream
SSE — real-time task events stream
GET
/api/memory/journal/{date}
Full day's memory as structured markdown
GET
/api/projects
List projects
POST
/api/projects
Create project
GET
/api/projects/{id}
Project detail + linked tasks
PATCH
/api/projects/{id}
Update project
POST
/api/projects/{id}/tasks
Link task to project
DELETE
/api/projects/{id}/tasks/{exec_id}
Unlink task
GET
/api/search
Global search across all entity types
10.4 Database Migrations
Migration 1: Board statuses + task fields
Migration 2: Projects table
10.5 Key Type Definitions
11. File Structure
12. Implementation Phases
Phase 1: Tab Restructure + Summary Widgets (PR1 + PR2)
Rename tabs in
activity-page.tsx: Summary | Board | Calendar | Memory | ProjectsChange polling from 15s → 60s across all activity hooks
Update deep-link support for new tab names
Build 4 new Summary widgets: status donut, priority breakdown, types of work, team workload
Add
GET /api/activity/board/statsendpointWire "View All" click-throughs: Schedule widget → Calendar, Recent Activity → Board
Phase 2: Board — Backend (PR3)
Database migration: add
priority,tags,assignee_agent_id,review_mode,due_datetorecipe_executionsAdd
inbox,assigned,reviewas valid status valuesCreate
PATCH /api/activity/tasks/{id}/statusendpointCreate
PATCH /api/activity/tasks/{id}endpoint (update fields)Extend
GET /api/activity/feedwith board status filtersImplement SSE endpoint
GET /api/activity/board/streamusing Redis pub/sub
Phase 3: Board — Frontend (PR4)
Install
@hello-pangea/dndBuild
board-view.tsx— DragDropContext + 5 columnsBuild
board-column.tsx— Droppable column with header + countBuild
board-card.tsx— Draggable card with task detailsBuild
board-agent-sidebar.tsx— agent roster with filter-on-clickBuild
board-filters.tsx— filter barImplement optimistic drag-and-drop with revert on failure
Build
use-board-sse.tshook with reconnect + 60s polling fallback
Phase 4: Task Viewer (PR5)
Build
board-task-viewer.tsx— slide-over with 4 context-aware viewsInbox/Assigned view: editable fields (assignee, priority, due date, tags, review mode)
In Progress view: live logs + step pipeline (reuse
execution-detail.tsxinternals)Review view: report content + grade form + approve/reject (reuse
report-viewer.tsx+report-grade-form.tsx)Done view: results + execution summary + re-run/download actions
Wire task viewer to board card clicks
Phase 5: Calendar (PR6)
Build
activity-calendar.tsx— container with view toggleBuild
calendar-always-running.tsx— sub-hourly routinesBuild
calendar-week-grid.tsx— CSS grid with cron-parsed task pillsBuild
calendar-next-up.tsx— upcoming sorted listWire calendar events to task viewer slide-over
Wire Schedule widget "View All" → Calendar tab
Phase 6: Memory Enhancement (PR7)
Verify Mem0 search POST fix is merged
Rewrite
activity-memory.tsx→ two-panel layoutBuild
memory-sidebar.tsx— search + grouped journal listBuild
memory-viewer.tsx— right panel markdown rendererAdd
group_byparam toGET /api/memory/browseCreate
GET /api/memory/journal/{date}endpointAdd organize-by toggle (Day / Agent / Type)
Enhanced filters: agent, date range, type, sort
Phase 7: Projects (PR8)
Database migration:
projects+project_taskstablesCreate
projects.pyAPI with CRUD endpointsBuild
activity-projects.tsx— card grid with stats headerBuild
project-card.tsx— card with progress bar + agent + priorityBuild
project-detail.tsx— detail view with linked task listWire "Open in Board" → Board tab filtered by project
Phase 8: Global Search (PR9)
Create
GET /api/searchendpoint — cross-entity searchBuild
global-search.tsx— Cmd+K overlay with keyboard navigationBuild
search-result-item.tsx— categorized result rowsWire results to navigation (Board task viewer, Memory entry, Agent page, Project detail)
Add Cmd+K listener to app layout
Phase 9: Cleanup (PR10)
Delete deprecated components:
activity-feed.tsx,activity-feed-item.tsx,activity-reports.tsx,report-card.tsxUpdate all internal links referencing old Feed/Reports tabs
Mobile responsive pass for all new components
Loading skeletons for Board, Calendar, Memory, Projects
Empty states for each tab
prefers-reduced-motioncompliance
13. Dependencies
New npm Packages
@hello-pangea/dnd
Drag-and-drop for Kanban board
~45KB gzipped
Existing Packages (Already Installed)
react-grid-layout
Summary widget drag grid
recharts
Donut, bar charts on Summary
framer-motion
Animations
lucide-react
Icons
No @fullcalendar needed — Calendar is custom CSS grid.
14. Success Metrics
Time to answer "what's running?"
< 3 seconds (one click from sidebar)
User testing
Task status visibility
100% of active tasks visible on Board
Compare DB count vs UI count
Drag-and-drop latency
< 200ms perceived (optimistic update)
Performance testing
SSE delivery latency
< 2s from event to UI update
Instrumentation
Calendar shows all schedules
100% of cron jobs visible
Compare scheduler DB vs Calendar
Memory search returns results
> 0 results for any known topic
Regression test
Global search response time
< 500ms
API monitoring
Page load time
< 1.5s initial, < 500ms tab switch
Lighthouse + RUM
Mobile usability
All tabs functional on 375px width
Manual test
15. Open Questions
SSE vs WebSocket: SSE is simpler and sufficient for server→client push. If we later need client→server streaming (e.g., collaborative editing), upgrade to WebSocket. For now, SSE.
Board pagination: If a column has 100+ cards, do we paginate or virtual-scroll? Recommendation: show latest 50 per column with "Load More" button. Virtual scrolling is a future optimization.
Project ↔ Mission relationship: Projects in this PRD are the UI evolution of Missions. The backend
projectstable is new. Do we migrate existing mission data or start fresh? Recommendation: start fresh — Missions tab was a placeholder with no data.Review mode "LLM": Which agent performs LLM review? Options: (a) dedicated QA agent, (b) any agent with "reviewer" skill, (c) configurable per-task. Recommendation: configurable per-task with a workspace-level default.
Calendar — month view? v2 ships with Week and Today views only. Month view is a future enhancement if users request it. Keeps scope manageable.
Last updated

