Skip to content

Chat

Chat in Desktop is one surface with three kinds of conversation: human, AI, and agent. You can message another person, prompt a general AI assistant, or talk to a specific Nimi agent. Same window, three conversation shapes.

Three Host Modes

ModeWho you're talking toAuthority
HumanAnother userRealm chat thread
AIA generic AI assistantRuntime via SDK
AgentA specific Nimi agentRuntime + ConversationAnchor

The mode decides what the chat window shows: the target rail (who you're talking to), the conversation shell, the transcript, and the composer.

Realtime Delivery

Live chat events sync over Socket.IO. New messages, typing indicators, presence, and read state all arrive as realtime events instead of polling. Chat uses Nimi's standard realtime channel; it doesn't invent its own protocol.

Streaming Chat

When you're talking to an AI or an agent, the reply streams in from Runtime as it's generated.

PropertyValue
ModeMode A (text/voice with explicit completed or failed stream event)
Bubble renderingIncremental as chunks arrive
Mid-stream stopAvailable during streaming
Partial contentPreserved on interrupt
BackpressureEnd-to-end via SDK

If you click "stop" mid-stream, whatever has arrived so far is kept, and the next turn starts cleanly.

Turn Lifecycle Ownership

Desktop chat draws the conversation and forwards your intent through the SDK. Runtime handles the model call, the streaming lifecycle, ConversationAnchor continuity, and agent track execution. Desktop has no local surface for intercepting a turn.

Reader Scenario: Talking To An Agent

You open chat, target your agent, and start typing.

  1. Target rail. You select a Character/LocalAgent as the chat target. The conversation shell resolves the ConversationAnchor for (local_agent_id, conversation_id).
  2. Compose. You type. The composer shows typed input shape.
  3. Send. The turn is submitted. Runtime's RuntimeAgentService accepts it for the selected LocalAgent and Conversation.
  4. Stream begins. The assistant bubble shows incremental content as Mode A chunks arrive.
  5. Mid-stream stop. You decide to stop early. The streaming contract preserves the partial reply.

The Character's durable identity is Realm truth; LocalAgent execution, Conversation continuity, and transcript are Runtime-owned. An agent conversation does not create a Realm human-chat thread.

What Desktop Chat Does Not Do

ConcernOwned by
Embodiment / avatar visualsAvatar app — Desktop chat is no longer a Live2D / VRM carrier
Memory authorityRuntime LocalAgent Memory
Direct human thread truthRealm chat
Turn execution authorityRuntime agent service
Streaming semanticsRuntime streaming contract

If you want embodiment, the Avatar app is the place. Desktop chat can show small non-carrier cues (like an expression indicator), but the chat window itself is no longer the Live2D/VRM carrier.

Source Basis

Documentation for Nimi — the installable, open-source, local-first personal AI product.