diff --git a/src/renderer/src/components/activity/ActivityPrototypePage.tsx b/src/renderer/src/components/activity/ActivityPrototypePage.tsx
index 7d86420806b..cdff7cd3b17 100644
--- a/src/renderer/src/components/activity/ActivityPrototypePage.tsx
+++ b/src/renderer/src/components/activity/ActivityPrototypePage.tsx
@@ -320,8 +320,16 @@ function AgentEventRow({
const compact = density === 'compact'
const dotState = asDotState(event.state)
- const jumpToAgent = (clickEvent: React.MouseEvent): void => {
- clickEvent.stopPropagation()
+ // Why (row click = navigate + ack): the inline "Jump to agent" button only
+ // rendered when agentAlive (so retained-done rows had no jump affordance at
+ // all) and in compact mode it was hover-only. Users naturally click anywhere
+ // on the row expecting it to navigate, so the row itself takes over the
+ // navigate role and subsumes the button. Per the design doc we drop the
+ // agentAlive gate entirely (option 1): activateAndRevealWorktree is safe
+ // unconditionally and activateTabAndFocusPane silently no-ops on a missing
+ // tab id, so a stale-tab click is just a soft no-op.
+ const openAgent = (clickEvent?: React.MouseEvent | React.KeyboardEvent): void => {
+ clickEvent?.stopPropagation()
onMarkRead(event)
activateAndRevealWorktree(event.worktree.id)
activateTabAndFocusPane(event.tab.id, paneIdFromPaneKey(event.entry.paneKey))
@@ -329,12 +337,20 @@ function AgentEventRow({
return (