Summary
On mobile, the channel Members sheet (People / Agents) shows only an avatar, a display name, and a static role label ("Owner" / "Member" / "Agent"). There is no online/away/offline indicator, so it is impossible to tell at a glance whether a member — especially an agent — is reachable before @mentioning them. In agent-heavy channels, nearly every row is a bot with no liveness signal unless it happens to be mid-generation ("Working…").
Desktop already overlays a presence dot on every member card in the channel sidebar, so this is a client parity gap rather than a missing platform capability.
Source verification (main @ 040b203f)
The mobile members sheet renders each tile with this subtitle priority — none of the branches is presence:
"Working…" spinner — only while a bot is actively generating (workingBotPubkeysProvider)
- NIP-38-style custom status text — people only; bots are deliberately excluded from
userStatusCacheProvider.track() (mobile/lib/features/channels/members_sheet.dart:73-80)
- Static role label otherwise (
members_sheet.dart:232-265)
_MemberAvatar is a plain AvatarImage with no badge/dot (members_sheet.dart:439-453). Tapping through to a profile does show presence (the "Presence: Online/Away/Offline" chip in mobile/lib/features/profile/user_profile_sheet.dart), which makes the list view feel inconsistent.
Everything needed already exists elsewhere in the mobile app:
- Live kind:20001 subscription + per-pubkey cache:
PresenceCacheNotifier (mobile/lib/features/profile/presence_cache_provider.dart), with track(pubkeys) to filter updates
- Reusable avatar presence-dot geometry:
AvatarBadgeMaskGeometry.presenceDot (mobile/lib/shared/widgets/masked_avatar_badge.dart), documented as "Desktop's sidebar presence treatment"
- A working in-app precedent: the DM header tracks the peer and renders
MaskedAvatarBadge(geometry: AvatarBadgeMaskGeometry.presenceDot) from presenceCacheProvider (mobile/lib/features/channels/channel_detail_page/app_bar.dart:218-251)
Desktop parity reference: desktop/src/features/channels/ui/MembersSidebarMemberCard.tsx:172-179 overlays PresenceDot on each avatar when presenceStatus is available (data-testid="sidebar-member-presence-*").
Suggested enhancement
In MembersSheet:
- Track presence for all listed members (people and agents) via
presenceCacheProvider.track(...)
- Render an online/away/offline dot per tile — e.g. a
MaskedAvatarBadge presence-dot overlay on each _MemberAvatar, matching the DM header treatment and desktop's sidebar
This gives users an at-a-glance answer to "who can I actually reach right now?" before typing a mention.
Related but distinct
Summary
On mobile, the channel Members sheet (People / Agents) shows only an avatar, a display name, and a static role label ("Owner" / "Member" / "Agent"). There is no online/away/offline indicator, so it is impossible to tell at a glance whether a member — especially an agent — is reachable before @mentioning them. In agent-heavy channels, nearly every row is a bot with no liveness signal unless it happens to be mid-generation ("Working…").
Desktop already overlays a presence dot on every member card in the channel sidebar, so this is a client parity gap rather than a missing platform capability.
Source verification (main @
040b203f)The mobile members sheet renders each tile with this subtitle priority — none of the branches is presence:
"Working…"spinner — only while a bot is actively generating (workingBotPubkeysProvider)userStatusCacheProvider.track()(mobile/lib/features/channels/members_sheet.dart:73-80)members_sheet.dart:232-265)_MemberAvataris a plainAvatarImagewith no badge/dot (members_sheet.dart:439-453). Tapping through to a profile does show presence (the "Presence: Online/Away/Offline" chip inmobile/lib/features/profile/user_profile_sheet.dart), which makes the list view feel inconsistent.Everything needed already exists elsewhere in the mobile app:
PresenceCacheNotifier(mobile/lib/features/profile/presence_cache_provider.dart), withtrack(pubkeys)to filter updatesAvatarBadgeMaskGeometry.presenceDot(mobile/lib/shared/widgets/masked_avatar_badge.dart), documented as "Desktop's sidebar presence treatment"MaskedAvatarBadge(geometry: AvatarBadgeMaskGeometry.presenceDot)frompresenceCacheProvider(mobile/lib/features/channels/channel_detail_page/app_bar.dart:218-251)Desktop parity reference:
desktop/src/features/channels/ui/MembersSidebarMemberCard.tsx:172-179overlaysPresenceDoton each avatar whenpresenceStatusis available (data-testid="sidebar-member-presence-*").Suggested enhancement
In
MembersSheet:presenceCacheProvider.track(...)MaskedAvatarBadgepresence-dot overlay on each_MemberAvatar, matching the DM header treatment and desktop's sidebarThis gives users an at-a-glance answer to "who can I actually reach right now?" before typing a mention.
Related but distinct