Use the chat drawer
For: People using the web UI.
Open your conversations beside the current page or in the full Chats page.
The chat drawer
Every page has a chat button at the top right of its header (⌘J, Ctrl J). It opens a drawer beside the page with your chats; the page stays usable next to it, and on a phone the drawer fills the screen. Open as a full page shows the same chats at /chats, the list beside the open chat, with the chat's own controls: pin, archive, rename, share and remove from your list (chats).
- The list is yours: the chats you started and those shared with you, pinned first, then by last activity, with a title and a preview when you may see what was said, 50 at a time with Load more chats for the next. The drawer lists every chat; the chats page lists those active in its period (the last 30 days unless you pick another), so an older chat shows with a longer period.
Archived chats are behind Show archived. Nobody else's chats are ever listed, an admin's view included. - Badges say what a chat does: running, waiting for your approval, waiting for your answer, and unread. Once you have opened the chats in a browser tab, the button shows on every page how many chats wait for you (the chats and their live feed load the first time you open them, so a tab that never does keeps no feed open). Several chats can run at once; each streams while you work elsewhere, and switching chats or pages drops no stream.
- The thread has what you said, what the agent answered with the tenant's AI label, and a chip for each step: the tool, its status, how long it took and what it cost. Expanding a chip shows what the step read and wrote, which needs the content permission and is in the audit log.
An agent's answer is markdown, shown so that nothing in it can run: raw HTML is shown as text, links open in a new tab and only go tohttp,httpsandmailtoaddresses, and images are never loaded (each shows as a link to it). - Approvals and questions are decided right in the thread by those who may decide them (the tenant's operators; answering a question also needs the content permission): approve or deny with a comment, or answer from the choices or in words. Everyone else sees that it waits, with a link to the Approvals page.
- Stop cancels the running turn, after you confirm. Steps and cost opens the turn's job. Fork from here, on an earlier answer, starts a new chat that goes on from that turn (forks). Hand over sends your next message to another agent that may continue this one's chats (handing over).
- A new chat starts from a picker of what you may start: the agents of the tenant that take part in conversations, grouped by plugin, with a search that runs on the server (50 at a time, show more for the next), as
ListStartablelists them for you (the operator role, kill switches applied).
An agent whose input has fields shows them as a form, and the rest as a text box. A reader's picker is empty and says why. Ask comes first, under Built in, where the tenant has it on and its model alias exists: tell it what you need and it hands the chat to the agent that fits (Ask); Settings, Ask, shows whether it is offered and why not, and lets admins turn it off or name its alias. - Drafts stay in this browser, one per chat, until you send them; signing out removes them. Signing out, or a session that ends, also closes the drawer and forgets every chat the tab had shown, so the next person to sign in in that tab starts from their own list.
- A chat you can no longer see (its owner took the share back, deleted it, or your role lost the content permission) leaves your list, and the tab forgets what it showed of it. Opened again, it shows what the server allows now: the form that asks for a reason, or why you cannot read it.
- While the agent answers, you can write your next message; Enter and Send work again once it has answered (a fork from an earlier answer can go at once).
- Cards. A result that matches its output contract is drawn as a card, from data, by OZ itself: a list of objects as a table (20 rows, then Show all), an object as key-values, a before-and-after pair the contract marks as a diff (lines for text, keys for JSON), and anything else as text.
Show the data opens the raw JSON. Every value is plain text: no markup from a result, no images, no links in cells, invisible characters written out. A card holds no button but its own Show all and Show the data, so it never looks like an approval. The same card is drawn in the drawer's step chips and turns, on the job page's Answer tab, in the Steps trace and in a flow's steps; a result without a contract, or one that does not match it, shows as before.
Receipts summarizing what an agent did are not available. - Typed questions. An agent's question may ask typed fields (a date, a number, a choice, several choices, a toggle, text): the card shows them as a form, and the job checks your answer against them (Asking people).
Someone else's chat, opened by its address, asks for a reason first, as the audited content access does: the reason is in the audit log, and the chat's owner is shown who read it.
Earlier turns and result cards
Step chips and approval cards are available for turns the tab watched while they ran. An earlier turn shows its answer and a link to its steps. If a chip cannot locate a tool result by name and order in the trace, it opens the job's steps instead.
A structured tool result becomes a card only when its MCP listing declares an outputSchema. An invalid x-oz0-diff value falls back to key-value rendering; that extension is not checked by the linter. The chat drawer has no Undo receipts.
The job page, Run panel and Approvals page refresh by polling. Open chats in the tab to start their feed and the chat button's waiting count.