Skip to content

Chat ​

The input bar ​

The chat bar is deliberately minimal — three elements, and one button that changes its job instead of cluttering the bar:

  • + — tap to attach a file or image. Long-press it to open the full command palette. (There's no separate slash button anymore.)
  • The pill field — type here. It grows up to five lines, then scrolls.
  • One trailing button — it morphs to match what you can do right now:
The button showsWhenWhat it does
Send (arrow)You've typed somethingSends your message
Voice (waveform)The field is emptyStarts a voice conversation
Stop (square)A reply is streaming and the field is emptyCancels the current reply
Steer (cyan arrow)You type while a reply is streamingNudges the live reply — see Steering
Queue (arrow + clock)You type mid-reply and it can't be steered yetHolds your message for the next turn

The bar never widens as it morphs — the trailing slot just cross-fades. A tiny character counter appears as an overline above the bar only as you approach the 4096-character limit (amber, then red at the limit). Haptic feedback fires on send and when a reply finishes.

Sending messages ​

Type and tap Send (or press Enter on a hardware keyboard). Replies stream in real time. When the assistant is thinking, animated dots pulse inside the reply bubble until the first words arrive.

Steering ​

You don't have to wait for a reply to finish to redirect it. Start typing while a reply is streaming and the Send button turns into a cyan Steer button:

  • If the agent is between tool calls, your text is injected into the running turn — it adjusts course without starting over. A small ↳ steered note marks where you stepped in.
  • If the agent is mid-reasoning and can't accept a steer yet, your message is queued for the next turn instead (the button shows a clock badge, and a caption above the bar tells you which happened).

Steering is available on the Gateway transport (the live path used when you're signed in to Manage).

Voice mode ​

When the field is empty, the trailing button is a waveform — tap it to start a hands-free voice conversation. The sphere expands to fill the screen, listens while you speak, and performs the reply as it streams back. Transcribed utterances appear in your chat history as normal messages.

If voice needs setup on your connection, the button shows a small amber dot (it still works — tapping explains what's needed) rather than looking disabled. Interaction modes (tap, hold, continuous) live in Settings → Voice. Full details and troubleshooting: Voice Mode.

Edit & resend ​

Made a typo, or want to take the conversation a different direction? Long-press one of your own messages and choose Edit — the conversation rewinds to that point and re-runs from your edited text. Available on the Gateway transport when no reply is currently streaming.

Slash commands ​

Two ways to discover and run commands:

  • Inline autocomplete — type / in the field for a filtered popup that narrows as you type, showing up to eight matches with descriptions.
  • Command palette — long-press the + for a full searchable palette. Browse by category, search by name or description, and tap to insert.

Commands are fetched dynamically from your server wherever possible:

  • Session commands — /new, /retry, /undo, /branch, /compress, /resume, etc. (Hermes gateway built-ins, pulled from the server's catalog)
  • Configuration — /model, /personality, /reasoning, /yolo, /verbose, /voice
  • Info — /help, /status, /usage, /insights, /commands
  • Personalities — generated from server config (config.agent.personalities)
  • Skills — fetched from native GET /v1/skills; legacy detail routes remain available only where the optional compatibility layer provides them

Tool execution ​

When the agent uses tools (terminal commands, web search, file operations), tool calls render based on Settings → Chat → Tool call display:

ModeBehavior
OffRoutine activity hidden; approvals, failures, media, file changes, risks, and delegations remain visible
CompactConsecutive routine calls share one summary with compact rows on demand
DetailedThe same clean summaries disclose full arguments, duration, and results

A live activity run keeps one summary plus one latest-activity line. Once it settles, the whole run becomes one collapsed summary. Tap the run to inspect its identity-preserving tool rows; in Detailed mode those rows expose arguments, results, timestamps, and duration. Calls requiring attention or delivering the requested result stay independent instead of being buried in a run.

Subagent lanes ​

While delegated agents or background commands run, Current chat activity appears above the composer. Tap it to view their progress. The strip disappears when no work is running; an open detail sheet stays open until you close it.

Completed work leaves a compact entry in the conversation. View activity opens recorded subagent details and available read-only child history; View output opens available process output. Historical views have no Stop or other process-control actions. A Dispatched tool card means the delegation was launched, not that its children finished. Ordinary tool groups and Realtime Agent task cards keep their own existing presentation.

The app retains bounded metadata and child references locally for up to 30 days (32 entries per session, 128 overall), without storing full child transcripts or process output. A persisted completion entry remains useful even when its details are unavailable; the sheet explains that limitation. Work recovered without fresh live evidence is marked unavailable rather than still running. Older events without stable child identity can still use inline subagent lanes.

Rich cards & interactive prompts ​

Alongside tool-progress cards, replies can render rich cards — structured Material cards for link previews, calendar entries, weather, and other skill output.

Some cards are interactive prompts the agent is waiting on: an approval, a clarifying question, a sudo password, or a secret. Answer right in the card — the button row collapses into a confirmation once you choose, and your response is synced into the agent's session memory so later turns can reference it. Sensitive prompts (sudo, secrets) are masked and hold-to-confirm. See Markdown Rendering → Rich Cards for the full visual vocabulary.

When Hermes asks several questions together, the card shows one question at a time and tracks your progress. Choose an option or type an Other answer; questions that allow several choices have a Submit button. Each confirmed answer stays recorded as you continue, including after a reconnect. If sending fails, your selections remain available to retry. When a request ends, the card keeps confirmed answers visible and stops accepting new ones.

Context meter ​

A thin strip under the chat header tracks how full the conversation's context window is. It stays invisible until you're about halfway, then turns amber around 75% and red near 90%, with a · NN% ctx readout in the header subtitle as you get close to the limit — a quiet heads-up to wrap up or /compress before the model starts dropping the earliest messages.

Chat alerts ​

If you leave the app during a Gateway turn, Hermes-Relay alerts you when Hermes needs an approval, clarification, elevated-permission response, or secret, and again when the turn finishes. An action-required alert opens the exact conversation and request. Replayed events replace the existing alert, and the alert clears after you respond, the request expires, or the turn resumes.

Notification text never includes the command, question, secret prompt, or environment-variable name. Those details stay inside the authenticated chat surface, including on the lock screen. Toggle this behavior under Settings → Quick Controls → Chat alerts; Android asks for notification permission the first time.

Smooth auto-scroll ​

While a reply streams, the list follows new tokens, reasoning, and tool cards like a live transcript:

  • At the bottom? New content scrolls into view automatically and stays pinned to the latest token, even as the bubble grows with reasoning and tool cards.
  • Scrolled up to read history? Auto-follow pauses — you won't be yanked back.
  • Want to resume? Scroll back to the bottom, or tap the floating arrow that appears when there's new content below.

Disable it under Settings → Chat → Smooth auto-scroll if you'd rather scroll manually. It's on by default.

Before the first answer text arrives, the conversation lane shows the working animation at full size with Still working… beneath it and no empty chat bubble around either. The status disappears as soon as reply text starts streaming; dropped-stream recovery uses Reconnecting to your answer… instead.

Markdown ​

Replies render with full markdown support:

  • Bold and italic text
  • inline code and fenced code blocks with syntax highlighting
  • Links, lists, blockquotes
  • Tables and horizontal rules

Reasoning display ​

When the agent uses extended thinking, a quiet Thinking… disclosure opens above the reply while reasoning streams, then settles to a collapsed Thought row unless you explicitly chose its state. Toggle reasoning visibility under Settings → Chat → Show reasoning.

Copying messages ​

Long-press any message bubble to copy its text. Haptic feedback confirms the copy. (For your own messages, long-press also offers Edit & resend.)

Empty state ​

With no messages, the chat shows a logo, "Start a conversation," and suggestion chips. Tapping a chip populates the input field.

Agent sheet — profile + personality ​

Tap the agent name in the middle of the top bar to open the agent sheet — a scrollable bottom sheet for Profile selection, Personality selection, and session info + analytics for the current conversation (message count, tokens in/out, avg TTFT).

  • Profile — upstream Hermes agent directories auto-discovered on the server. Selecting one overlays its model + SOUL for subsequent turns.
  • Personality — system-prompt presets from config.agent.personalities. The server default is shown first, then all configured alternatives.

Switching either shows a toast. The active personality name appears above assistant bubbles. You can also switch via /personality <name>.

Switching between running chats ​

When Chat is using the upstream Gateway connection, you can open another chat, profile, new draft, or Thread while Hermes is still working. The previous turn continues on the server instead of being stopped. Reopening that conversation reattaches its live reply, reasoning, tool state, and pending interaction card; if it finished while detached, the saved transcript is loaded instead. Multiple running chats keep separate recovery state across an app restart.

Tapping Stop still interrupts the visible turn. Direct API connections cannot multiplex live chats, so switching there stops the current stream before opening the next conversation.

Connection chip ​

If you've paired more than one Hermes server, a Connection chip appears on the left of the top bar. Tap it to open a switcher listing all your connections with a health indicator. With a single connection, the chip is hidden. See Connections.

Token tracking ​

Each assistant message shows token usage below the timestamp:

  • Input tokens sent
  • Output tokens received
  • Estimated cost

App context prompt ​

Settings → Chat → Share phone status with agent controls an extra system message in API-only chats. It identifies Hermes-Relay Android to the agent and can include optional phone status. Foreground app and battery sharing default off and are included only when you opt in. Turning the master switch off also removes the Android preamble.

Standard Gateway chats do not send this block: upstream has no general per-turn context slot. The Injected context sheet marks phone status and turn context as unsupported on Gateway, and Settings labels its sample as an API-only example. The sheet is a preview, not proof of delivery or a complete view of the agent prompt; persona and Relay configuration are server-owned.

The optional Relay android_phone_status tool can provide phone state when enabled for the selected profile. Its presence does not identify who sent the current message. Automatic Android identification on Gateway still needs an upstream client-surface contract; pairing alone does not provide it.

Persistent connection ​

By default the connection to Hermes is held open while Hermes-Relay is on screen and for a couple of minutes after you switch away, so a quick return is instant. A running Gateway chat keeps its event connection attached; if that connection drops, the app reconnects while the server continues working. Idle chats pre-warm when reopened so the next message is fast.

While any chat is running, Hermes-Relay automatically uses an ongoing Android notification to keep the app and its connection active until every concurrent turn finishes or is interrupted. If a turn needs approval, clarification, or sensitive input, its separate alert reopens the exact profile and conversation. Expanding that alert shows safe session context, but never the requested command, question, password, secret, or environment-variable name.

If you want the connection to stay fully open even when no chat is running, turn on Settings → Quick Controls → Persistent connection (off by default). It extends the same foreground protection to idle time via an ongoing notification, so messages and live features stay responsive; for relay-paired setups it also keeps device control and notification mirroring reachable. Tap Turn off always-on on the notification, or flip the toggle, to stop the idle retention without interrupting active work. This uses more battery; swiping the app away from recents also ends it. It's the same approach apps like Home Assistant use to stay connected.

Chat alerts and active-turn protection do not require Persistent connection. Enable it only when an idle connection or Relay-powered live features must remain reachable during long background or Doze periods.