iOS UX: make active-agent indicators open channel-scoped tool activity
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
Description
## Summary
On iOS, active-agent indicators should be reliable navigation targets into that agent's existing channel-scoped tool activity. Today the activity transcript exists, but access is inconsistent and unnecessarily hidden.
## Current behavior
- The channel member row becomes directly tappable only while `isWorking` is true.
- When the agent is not currently marked working, **View activity** is still available only through the trailing overflow menu.
- Other active/typing indicators do not provide a consistent, obvious path to the same tool transcript.
- A presence reconnect mismatch can remove or contradict the state users rely on to discover the entry point.
## Expected behavior
1. Tapping an agent's visible typing/working indicator should open that agent's activity for the current channel.
2. Agent rows and profiles should expose a consistent **View activity** action regardless of transient working state.
3. The destination should preserve channel context and show the existing live tool-call transcript and connection/error state.
4. If activity cannot be loaded after reconnect, show the actual observer connection state rather than silently disabling navigation.
## Source references
- [`members_sheet.dart`](https://github.com/block/buzz/blob/2ea9385015fb922de2adf0a53e86fc5a21d07b90/mobile/lib/features/channels/members_sheet.dart#L121-L142) only assigns the row tap callback when the bot is currently in the typing-derived working set.
- [`members_sheet.dart`](https://github.com/block/buzz/blob/2ea9385015fb922de2adf0a53e86fc5a21d07b90/mobile/lib/features/channels/members_sheet.dart#L280-L333) keeps **View activity** in the overflow action sheet.
- [`agent_activity_sheet.dart`](https://github.com/block/buzz/blob/2ea9385015fb922de2adf0a53e86fc5a21d07b90/mobile/lib/features/channels/agent_activity/agent_activity_sheet.dart#L14-L40) already accepts both `channelId` and `agentPubkey` and displays the live transcript.
- [`observer_subscription.dart`](https://github.com/block/buzz/blob/2ea9385015fb922de2adf0a53e86fc5a21d07b90/mobile/lib/features/channels/agent_activity/observer_subscription.dart#L327-L343) already filters observer frames by agent and channel.
## Scope
This is an iOS discoverability and navigation UX issue, not a request to invent a new tool-call transport or transcript. It is a focused companion to the broader mobile activity proposals in #3907 and #4169.
Related THREAD/client visibility issue: #5061.
Contributor guide
Research direction
Start with mobile/lib/features/channels/members_sheet.dart, especially the row callback and overflow action sections, then read agent_activity_sheet.dart and observer_subscription.dart to trace channel and agent context. Done means visible typing or working indicators and agent rows/profiles consistently open the existing channel-scoped transcript, while reconnect failures expose the observer connection state.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart, flutter, ios
- Domain
- mobile
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 68/100