# Toasts and notices (/cloud/surfaces/toasts)



<HostMatrix
  primitive="{ label: &#x22;@nyte-ai/ui/sonner&#x22;, href: &#x22;/cloud/headless&#x22; }"
  desktop="{ label: &#x22;components/toaster.tsx&#x22;, href: &#x22;/cloud/desktop/toaster&#x22; }"
  terminal="{
  label: &#x22;shell.ts notice()&#x22;,
  note: &#x22;the Ephemeral slot under the composer (later pass)&#x22;,
}"
/>

## Decision table [#decision-table]

| The message is…                                     | Use                                          | Example                                         |
| --------------------------------------------------- | -------------------------------------------- | ----------------------------------------------- |
| An outcome of something the user just did, in place | Inline `role="status"` / `role="alert"` text | Saved / Unsaved changes in the file editor      |
| An outcome of something in the background           | `toast(...)`                                 | Couldn't open folder                            |
| A question the run is waiting on                    | Inline card                                  | [Consent](/cloud/surfaces/consent)              |
| A question nothing can proceed without              | Alert dialog                                 | Delete chat?, Do you trust this folder?         |
| A count or state the user watches                   | Live region, one stable node                 | Palette result count, customize inventory count |

## Live regions [#live-regions]

* One node, mounted for the life of the surface. Replacing the node re-announces from scratch.
* `role="status"` for progress and success; `role="alert"` for failure.
* `aria-busy` on the container while a request is in flight.
* `srOnly` text where the visual state is color or motion only ([tool calls](/cloud/surfaces/transcript#tool-calls-the-locked-law)).

## Toasts [#toasts]

Configuration and rules are on the [Toaster](/cloud/desktop/toaster) page. In short: give a
repeatable toast an `id`, keep titles short, and let a failure that blocks the user stay until
dismissed (`duration: Infinity`).

## Session state [#session-state]

Session rows and palette results show state through `StatusDot`, a labelled `role="img"`:
Idle, Running, Needs attention, Retrying, Failed. See
[Button and focus › StatusDot](/cloud/desktop/button#statusdot).
