Skip to main content
Every deployed agent has a chat on its page: builders open Agents in Studio and select the agent; everyone else opens it from its Space in the User view (/spaces/<space>/agents/<agent>) or picks it in the chat dock. Type into the composer. This chat runs the agent you built. To build or change agents, use Luno Builder instead. You need the project’s run permission to send messages; without it the composer is read-only.

Sessions

Each conversation is an agent session — the same session you see in Runs, the CLI and the API.
  • New chat: the agent page opens on a fresh composer with Recent chats and upcoming Triggers below it. Your first message starts a session.
  • Resume: open any session from Recent chats or the history rail on the right and keep typing — the agent continues with the full conversation. Sessions started elsewhere (Slack, a trigger, the API) open the same way.
  • Share: the URL carries the session (?sessionId=...), so a teammate with access to the project opens the same conversation. Only the session’s owner or a project admin (the project Admin role, or an org owner/admin) can keep typing in it or approve its tool calls (unless the tool names you as an approver); for anyone else the composer is disabled and approval cards show who may decide. A link to a session that no longer exists, or that you can’t access, says so instead of showing an empty chat.

Streaming

Replies stream token by token. While the agent works, its thinking and tool calls show as a live trace that collapses into Worked for N seconds (or Thought for…) once the answer lands; expand it to see each tool’s arguments and result. Stop cancels the run. Runs are queued and survive the page: reload, close the tab or open the session on another device mid-run and the chat reattaches to the live stream from the start of the turn. If the run already finished, you see its result.

Tool approvals

When the agent calls an action or tool marked needsApproval, the run pauses and an approval card appears in the transcript with the tool and its input. Approve runs it; Deny takes an optional reason that reaches the model. Once every pending call is decided, the agent resumes and the chat follows the continuation live. If someone already decided the call (in Slack, the CLI or another tab), the chat tells you. For tools marked editable, Edit opens the input as JSON; Approve with edits sends it (the server checks it against the tool’s input schema). When a reply paused on several calls you may decide, check the ones you want (or Select all) and use Approve selected / Reject selected: one all-or-nothing decision, and the agent resumes once.

Modes and models

The composer shows a model picker for every agent and a mode picker for agents that declare modes.
  • The mode applies to each prompt you send; the session remembers the last one, so a resumed chat starts in the mode it was left in.
  • The model is a per-prompt override — it defaults to the mode’s or the agent’s model, and the one you pick on a new chat carries into its follow-ups. Add models chooses which of your organization’s chat models (Governance → Models and Chat models) the menu lists.

Structured output

When a run used an outputSchema (from a workflow, a trigger or the API), its reply shows the validated result as a Structured output card — fields, lists and nested records — instead of a raw JSON blob. JSON switches the card to the raw value; copying the reply copies the JSON.

Signals and background results

Signals — trigger events delivered into a session, background task results, messages from other systems — show up in an open chat without a reload:
  • A signal that wakes an idle session starts a new turn; the open chat picks it up within about 15 seconds and streams the reply live.
  • Signals the agent received while it was already working (inject mode) are listed under Received while working in that reply.

Errors

A failed run shows its error under the last message — also after a reload — with Retry, which sends the last prompt again in the same session. Errors from the server (an unknown model or mode, a missing permission) appear as readable messages, in your language when the API gives a known error code.