Skip to content

Mobile — Threads & Chat

Threads are the heart of the mobile app. The Threads tab shows the user’s open and recent work, each thread opens into a chat view with a streaming message timeline, and the message input can start work in a selected Space. When the agent pauses for human confirmation, that request appears in the same Threads surface.

For a practical walkthrough of choosing the right Space, reading progress, and reviewing Goal work, see Work in a Space. This page focuses on the mobile Threads surface.

Tab: (tabs)/index

The Threads tab is the user’s list of visible threads. Each row shows the thread title, Space/channel context when available, a snippet of the latest message, and a status indicator. Threads that are currently running show activity treatment so the user can tell the tenant platform agent is working in real time.

The Threads tab supports:

  • Filtering — by status, Space, and channel such as chat, task, email, Slack, or GitHub.
  • Search — by title or recent message content.
  • Real-time updates — AppSync subscriptions keep the list in sync.
  • Pull-to-refresh — a backup path for when the subscription is warming up.

Rows are rendered as one unified work list. The user does not need to know whether the thread began as chat, email, automation, or integration work.

Workspace orchestration can pause a run when the agent needs a human decision before continuing. The mobile app treats that as thread state, not as a separate task system.

When a thread has a pending review request:

  • The thread sorts above ordinary non-HITL threads.
  • The row shows a Needs answer badge.
  • The preview explains that the agent is waiting for confirmation.
  • The Threads tab badge prioritizes visible HITL counts before ordinary unread counts.

This makes the user’s next required decision visible without splitting the conversation across different tabs.

Folder-specialist work can still pause for review. In the Space architecture, those reviews route through the platform’s responsible-user and Inbox routing rules rather than through a visible top-level per-agent roster.

If the current user is responsible for a pending review, it appears in their mobile Threads tab. If the platform cannot route the review to a user, it appears in the admin Inbox for operator triage.

See Workspace Orchestration → Human review flow for the deeper routing model.

Route: /thread/[threadId]

Tapping a thread opens the chat view. The layout top-to-bottom:

  1. Message timeline. User and agent messages scroll with user messages right-aligned and agent messages left-aligned.
  2. Message input footer. A multi-line input with Space, voice, and quick-action controls.

The timeline renders markdown through a custom message renderer for code blocks, inline code, tables, and streaming text. In-flight agent messages render progressively as tokens arrive.

Three visual states communicate activity:

StateMeaning
IdleNo current agent activity
ThinkingAgentCore accepted the turn and the agent is working
StreamingResponse tokens are arriving

Subscriptions drive these states. Thread-level updates, managed turn progress, and new-message events arrive through AppSync; the mobile app does not infer agent progress from an on-device runtime.

When the tenant platform agent calls a tool during a turn, the tool call can render inline in the timeline as a collapsible row: tool name, input preview, and output preview. Rich tool output can render through the GenUI registry instead of plain text.

When the user opens a thread waiting for review, the thread detail screen shows a confirmation card near the top of the timeline. The card is the handoff point between the agent and the user.

The card shows:

  • The workspace target path the agent is waiting on.
  • The review text written by the orchestration layer.
  • A compact summary of proposed changes when available.
  • An optional note field.
  • Actions for the decision.
ActionMeaning
ApproveAccept the review, include the optional note if present, and let the agent continue
ContinueResume a pending run without recording a fresh approval decision
RejectCancel the run and do not resume the agent from that review request

After a successful action, the app confirms the decision. Approval and continue decisions wake the same thread with the review response in context. Cancellation settles the run without waking the agent.

The message input footer has several controls.

A chip at the top of the input shows the current Space. Tapping it opens a picker listing the Spaces available to the user. Selecting a Space scopes the next message to that workroom.

Use the picker when the same user works across multiple contexts, such as Support, Finance, Customer Onboarding, or Engineering Triage. The selected Space determines the workspace files, tools, knowledge, memory, triggers, email/channel behavior, and local policy the tenant platform agent receives.

A microphone button opens the voice dictation bar. Speech is transcribed locally via iOS speech recognition and streamed into the input as text. Tapping the mic again commits the transcription and clears the bar.

A lightning-bolt button opens the quick-actions sheet: a customizable list of one-tap prompts the user has saved, such as “summarize”, “plan my day”, or “draft a reply”. Quick actions are per-user and run in the selected Space when sent from the composer.

The plus button opens the same picker flow as the Space chip, acting as a shortcut for users who want to change context before composing.

The Threads list and thread detail screens are driven by AppSync subscriptions. Pull-to-refresh is a backup path. When the app goes to background and comes back, subscriptions reattach and the GraphQL cache backfills missed updates.

The mobile app is online-first: there is no offline message composition queue. If the user is offline, the message input shows a banner and the send button is disabled. Messages already loaded remain visible.