What this context does
Records and streams what’s happening inside a project right now: which agent is doing what, which tools they call, when tasks start and finish. The user’s workspace screen gives a live “shoulder view” of Mara’s team without showing raw code or tool output.
Scope boundary
- Owns:
Activityentity,ToolCategoryenum, server-side dedup logic, per-project SSE stream. - Does not own: the cross-tenant Studio aggregator (UC-06), the under-the-hood Project Explorer (UC-07), Anthropic spend (UC-08001).
Main entities
ACTIVITY — id, projectId, conversationId, agentRole, eventType
(TASK_STARTED/TOOL_USE/AGENT_MESSAGE/TASK_COMPLETED), parentActivityId
(self-ref to the owning TASK_STARTED), toolName, toolCategory (READING/EDITING/
EXECUTING/DELEGATING/BROWSING/OTHER), toolSummary, payloadJson, createdAt.
Use cases
| UC | What it does |
|---|---|
| UC-05001 | Activity Feed — REST snapshot + SSE stream, server-side dedup |
| UC-05002 | Team Status — “who is on the bench / who is working right now” |
Component diagram
{/* Image missing: UC-05 Workspace Activity — Component View (../../assets/diagrams/uc05Components.svg) */}
Dependencies on other contexts
- UC-04 Conversation — Activities are emitted as side effects of a Mara turn.
- UC-06 Studio — Studio’s per-tenant aggregator reads from the same
activitiestable and uses the same dedup machinery.
Cross-cutting
- Server-side dedup (ADR-009) —
consecutive same-
(toolCategory, agentRole, parentActivityId)rows are coalesced into one. FE is a pure renderer. - SSE convention (ADR-008) —
connected/activity/heartbeatevents; fetch-based parser on FE because nativeEventSourcedoesn’t support custom auth headers.
Was this page helpful?
Thanks for the feedback.