DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS /// DOCS
AI AGENTS·CHAT UI

Chat UI

The chat UI is where you talk to every agent in Onnie. Onnie AI, Onniebots, and the Superagent all use the same surface — the same composer, the same message list, the same thread structure.

The chat surface

The chat pane lives in the right-hand column of the desktop layout. It has three main areas:

  • Header strip — shows the bot name and avatar (or the bot picker before you send your first message), plus the chat title and actions.
  • Message list — the scrollable history of turns. User messages appear right-aligned; bot messages appear left-aligned with inline artifact cards for Tasks, bots, images, and other entities.
  • Composer — the text editor at the bottom, with a toolbar row above it for settings, attachments, and the send/stop button.

When a chat has not started yet, the message area shows an empty state: a time-of-day greeting, starter prompt chips, and a tier upgrade CTA if applicable. Once the chat is open, the message list takes over.

The chat browser panel is a left-side aside that lists all your past chats, bucketed by recency. Open it from the app icon rail. It has a search input and filter chips (All / Starred / Archived).

Composing a message

Type in the editor at the bottom of the chat pane. The composer is a rich text editor — it supports plain text and inline references.

Inline references let you link workspace entities directly in your message. The format is [label](ref:type:id), where type is the entity type and id is the entity UUID or alias. For example, linking a project:

[My Project](ref:project:550e8400-e29b-41d4-a716-446655440000)

When Onnie AI sees a reference to a project, page, table, or record in your message, it scopes its context to that project automatically. See References for the full reference format and supported entity types.

The toolbar row above the editor holds:

  • Settings popover (left) — tier (fast / pro), variant (standard / high), web search toggle, code execution toggle.
  • Plus popover (left) — attach a file, insert a snippet, open the prompt template picker.
  • Context cell (right) — token usage for the current execution. Shows input / output / cache breakdown.
  • Send / Stop button (right) — sends the message or cancels an in-flight turn.

To cancel a running turn, click Stop or use the keyboard shortcut. The engine receives a cancel signal and stops the loop at the next iteration boundary.

Reading agent output

Agent output arrives in two phases:

Live text — while the agent is working, text chunks stream in over the WebSocket and accumulate in the bot message area. A trace tail appears below the message showing what the agent is doing ("Onnie is searching projects…", "Onnie is creating a task…"). A status pill in the composer area shows whether the agent is streaming or waiting for your input.

Committed messages — when the engine writes the completed turn to engine_messages, the live text is replaced by the authoritative message. Each bot message can contain:

  • Plain text rendered as markdown (headers, code blocks, tables, lists).
  • Artifact cards — inline cards for entities the agent created or referenced: Tasks, bots, images, pages. Task cards include approve/reject actions when the task is awaiting approval.
  • A question card when the agent calls request_input — a structured form for clarification, approval, or multi-part questions. Submit your answer directly from the card; the turn resumes.

If the agent generates an image, it appears inline in the bot message as an image card.

The WebSocket is a render hint. If the connection drops mid-turn, the live text clears and the message list reloads from the persisted state in Supabase — you won't lose committed output.

Each chat is a persistent thread tied to one bot. The thread's full history is stored in engine_messages and loads when you open the chat. Long threads are handled via a checkpoint stored on Cloudflare R2 — the engine rehydrates from the checkpoint on reconnect, so the full history is always available.

You can:

  • Star a chat to pin it to the Starred filter in the browser panel.
  • Rename a chat — double-click the title in the header, or use the row action in the browser panel.
  • Archive a chat to remove it from the default view without deleting it.
  • Delete a chat to remove it permanently.

Search in the browser panel filters by chat title and bot name. Full-text search across message content is not yet available.

Each bot is locked to the chat it was started with. To switch from Onnie AI to a Onniebot (or between Onniebots), open a new chat and select the bot in the picker before sending your first message.

Keyboard shortcuts

ActionShortcut
Send messageEnter
Insert newline in composerShift + Enter
Global workspace searchCmd + K / Ctrl + K

The Cmd + K shortcut opens the global search palette (not the prompt picker). From there you can navigate to a chat, create a new one, or search across the workspace.

The send button in the toolbar is always available as an alternative to Enter; the stop button appears in place of send while a turn is in flight.