Repository navigation
feat(mobile): show agent messages as compact cards - #147
Conversation
Child reports and thread-to-thread messages rendered as user bubbles on mobile. The header parser moves to client-runtime (`./agent-message`) so web and mobile share it, and the mobile feed now shows these messages as a card styled like the subagent card: sender, one-line preview, and the full body inline on tap. The sender's title opens its thread while it still exists. Refs #145 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Independent review (Prism reviewer, gpt-6-luna) at ea26699: one Medium finding, no others. The cache, keys, expanded state, missing-thread fallback, client-runtime export and web imports all checked out. Finding dismissed: it said the title's nested |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
|
What: I could not run the device check: the iOS dev client did not build because CocoaPods is not installed on rocky's Mac ( Result
No screenshots: the app never launched. What ran
TeardownI stopped the backend and Metro by their PIDs and shut down the simulator. The worktree is still in place, with the seeded Verified by Claude Opus 5.5 in T3 Code (Chromeria) through Claude Code. |
|
What: All five mobile checks pass on the iPhone 17 Pro Max simulator (iOS 27.0) at Checks
Collapsed again after the second tap: screenshot. Findings (not blocking)
Not verified
Setup notes
Verified by Claude Opus 5.5 in T3 Code (Chromeria) through Claude Code. |
- Previews drop the leading markdown marker (`## Summary` reads "Summary"). - The preview hides while the card is expanded, as on web. - The card offers "Open <sender>" as an accessibility action, and double tap always toggles it, since the nested title link is not reachable. - Allowlist the two upstream edits and add the feature to the fork map so the Fork Stack Model check passes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
What: Changes
Rechecked on the iPhone 17 Pro Max simulator
Not verified
Implemented and verified by Claude Opus 5.5 in T3 Code (Chromeria) through Claude Code. |






What: The mobile app shows reports and messages from other agents as compact, expandable cards, matching web #142, instead of as user bubbles.
Why: #142 only changes the web timeline. The mobile app ships its own UI, so it still showed these messages as user bubbles.
So what: Stacked on #142. Retarget to
mainonce #142 merges. Verified on the iOS simulator; the user approves the merge.Closes #145
Changes
parseAgentMessageand its test move fromapps/webtopackages/client-runtime(new./agent-messageexport). Web imports it from there; the web row is otherwise unchanged.apps/mobile/src/features/threads/AgentMessageCard.tsx, styled likeThreadAgentSpawnCard. It shows an icon, "Report from"/"Message from", the thread title and a one-line muted preview, and starts collapsed. Tapping it toggles the full body, rendered withAssistantMarkdownContent. Long-press copies the raw text.useAdaptiveWorkspaceLayout().selectThread, the same call the thread sidebar uses. The mobile subagent card's members aren't tappable, so it had no navigation to copy. If the thread is gone, the title shows as muted plain text.ThreadFeed.tsxandpackages/client-runtime/package.jsonare allowlisted inscripts/fork-upstream-edits.txt, owned by a newagent-message-cardsentry indocs/fork-features.md.ThreadFeed.tsx(upstream file): one import plus one early return before the user-bubble branch. Parse results are cached per message object in aWeakMap, because the render function can't use hooks.Proof
pnpm exec vp test run packages/client-runtime/src/agentMessage.test.ts: 6 passed.tsc --noEmitpasses inpackages/client-runtime,apps/webandapps/mobile.vp linton the changed files: no errors. Its warnings are all on existing lines inThreadFeed.tsxandMessagesTimeline.tsx; the new file has none.Elon record
Requirements and who asked: The user wants mobile to match web #142.
Deleted: Native changes and server changes.
Bottleneck: Mobile still renders agent messages as user bubbles.
Checked myself: The planner confirmed the mobile app bundles its own UI, so web #142 can't reach it.
Implemented by Claude Opus 5.5 (medium effort) in T3 Code (Chromeria) through Claude Code.
🤖 Generated with Claude Code