Skip to content

Mobile: bring structured native chat up to desktop feature parity #22754

Description

@brennanb2025

Structured native chat (the Claude and Codex chat view) has picked up a lot of features on desktop since it was restructured in #16729. Mobile got the core of it: #18074 (Codex), #18741 (Claude), #18761 (turn status and live tool progress) and #22179 (older-history paging). Most of what desktop added after that hasn't reached mobile.

This issue lists those gaps. Each row links the PR that shipped the feature on desktop. The list comes from reading origin/main at 9678dfb side by side (src/renderer/src/components/native-chat/ and mobile/src/session/); nothing was checked by running either app. Every "missing" entry is backed by an empty search of mobile/src for the feature and similar names.

Not on mobile at all

Transcript

# Feature Desktop PR(s) What mobile does today
1 Subagent runs (name, state, tokens, elapsed time) #18773 Shows nothing. Mobile's message renderer only draws text and images and returns null for any other block (mobile/src/session/MobileNativeChatMessage.tsx:26-65).
2 Background tasks, both in the transcript and as a status strip with Stop #18757, #19705, #20519 Shows nothing, for the same reason as #1.
3 Todo / plan checklist (Claude's todo list, Codex's plan) with a progress panel above the composer #19230 Shown as a plain tool line.
4 Thread goal: banner above the composer, /goal goal mode, and goal set/changed/cleared rows #22377, #19923 Missing. Mobile never calls agentSession.threadGoal.
5 Message rail: jump between your prompts, including history that hasn't loaded yet #20719, #22558 Missing. Mobile never calls agentSession.conversationOutline.
6 Per-turn summary of changed files #19229 Missing.
7 Message timestamps #19218 Missing. Mobile sets timestamp: null on its own echoes.
8 Receipts for answered approvals and questions left in the transcript #19229 Missing.
9 Styled notice rows (compaction and other system notices) #19228 Rendered as ordinary markdown.
10 Tool details: exit code, duration, web-search results #19226 Missing.

Composer

# Feature Desktop PR(s) What mobile does today
11 Skills: skill picker in the / menu grouped by scope, and skills shown as pills in the prompt #9480, #19127, #19616, #19832 Missing. Mobile's own code says "Mobile has no skill picker" (mobile/src/session/mobile-native-chat-send-classification.ts:17).
12 Context-window usage ring #22301 Missing.
13 Attaching files that aren't images #6641 (composer attach), #20494 (files) Images only.
14 Pasting an image from the clipboard #6783, #17498, #18118 Missing. Every paste path on mobile is a terminal paste.
15 Prompt history recall with ↑/↓ #6641 Missing.
16 Queued messages: messages sent while the agent works are saved to a queue shown in the chat, with a Retry banner for undelivered ones #17383, #20659, #20502 Sending while the agent works is allowed, but nothing is queued or shown. Mobile's code calls itself "a client with no outbox" (mobile/src/session/mobile-structured-send-delivery.ts:1).
17 Launch Retry when a chat fails to start or its start is unconfirmed #20502, #22364 Only an error in the empty chat.

Session and lifecycle

# Feature Desktop PR(s) What mobile does today
18 Resume on restart: offer to reconnect chats that were working when Orca restarted, keep that offer in the status bar, and explain failed resumes #21096, #21397, #22448 Missing. Mobile never calls any agentSession.restart* method.
19 Continue in a new session / Fork agent session #9170, #3976 Missing.
20 Recovery status while a chat switches between terminal and chat (verifying, recovering, needs manual recovery) #18560 Missing. Mobile never calls agentSession.handoffStatus.
21 Chat context menu: Copy Session ID, Set Title, Fork, Continue in a new session #6641, #19153, #9170 No long-press menu inside the chat.
22 Notifications and unread indicators when a structured turn finishes #21924, #22105 Only generic push notifications and blocked/waiting states in the agent list. Mobile never calls agentSession.subscribeTurnCompletions.

Only partly on mobile

Feature Desktop PR(s) Gap on mobile
Diff cards for file edits #18765 Mobile has a plain +/- view inside an expanded tool line. It has no line numbers, change type or copy-patch button.
Copy buttons #6641 (message), #20357 (code block) No copy button on messages or code blocks. Long-press text selection works.
/ menu built from what the session reports #19127, #19928 Mobile offers /clear, /compact, /model and /effort, but not skills or the repo and plugin commands the session loaded.
Per-tool icons and labels #18760 Mobile only tells terminal tools apart from everything else.
Pending question row in the transcript #20724 The question card appears above the composer, but the transcript still shows a raw tool line.
Several prompts together on one card #6641 One prompt at a time.
Typing indicator #18266 Only on the older, non-structured chat path.
Link actions (ask before opening, choose where to open) #19130 Links open directly.
Retry for an unconfirmed send #20502 A toast instead of a Retry row.
Closing a chat ends its session #16729 Mobile closes the tab but never calls agentSession.close.

Left out on purpose

Suggested priority

  1. Linux support #1 and Fix Ctrl+Backspace not deleting word in terminal #2 (subagents, background tasks). Mobile loses this information entirely rather than showing it in a simpler form.
  2. P1: I selected “system” as my appearance, but my terminal side is still dark #18 (resume on restart). Mobile has no way to do this at all.
  3. Add Ctrl+Click to open links in terminal #4 and Fix PTY listener leak, use local restty with selection support #5 (thread goal, message rail). The host already provides the data; mobile only needs to call the existing methods.
  4. After we add a new repo, we should have a little notification that says “repo added” #16 (queued messages).

Protocol note

Several items need mobile to start calling host methods it has never called before. Most of these aren't on the host's mobile allowlist yet (src/main/runtime/runtime-rpc/runtime-rpc-mobile-method-allowlist.ts), so the host has to change as well as the app:

  • Not allowed for mobile yet: agentSession.threadGoal, conversationOutline, restartResumable, restartContinue, restartResumableDismiss, subscribeTurnCompletions, subscribeStatus.
  • Already allowed, just unused: agentSession.handoffStatus, close, commands.

Paired hosts and phones update independently, so each new call has to handle an older host that rejects it, following docs/reference/remote-wire-compatibility.md.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions