Conversation

A conversation is a persistent sequence of messages between the user and the agent. The conversation system is the runtime that turns each user message into a reply, whether the user is typing, dictating, or on a live call.

flowchart LR
    User["<b>User message</b><br/>type, talk, attach"]
    History["<b>Chat history</b><br/>compacted over time"]

    subgraph Turn["Each turn"]
        direction TB
        Gatekeeper["<b>Gatekeeper</b><br/>hydrates context<br/>as a system hint"]
        Loop["<b>Agentic loop</b><br/>stream + tool calls"]
        Gatekeeper --> Loop
    end

    Provider["<b>Inference<br/>provider</b>"]
    Tools["<b>Tools</b><br/>permission-gated"]

    User --> Gatekeeper
    History --> Gatekeeper
    Loop <-->|stream| Provider
    Loop <-->|call| Tools
    Loop -->|reply| User
    Loop -.->|append| History

Each turn, the gatekeeper hydrates the user's message with dynamic context (active skills, intents, interaction mode, space) as a system hint. The agentic loop then streams a response from the provider, running any tool calls until the reply is complete. The exchange is stored in the chat history, which feeds the next turn and is kept lean by compaction as it grows.

The pieces

PieceRole
The agentic loopDrives the request → stream → tool-call → response cycle each turn.
The gatekeeperHydrates each turn with dynamic context via the system hint.
CompactionKeeps context lean as the conversation grows.
SpacesOrganise chats and isolate knowledge by domain.
AttachmentsFiles a message can carry, images today.