Files
openclaw/docs/concepts/typing-indicators.md
Vincent Koc 7f71e84248 docs(concepts): typography hygiene + Related CardGroups across 3 pages
docs/concepts/presence.md: replaced 8 curly quote and non-breaking
hyphen characters (U+201C/U+201D/U+2019/U+2011) with ASCII equivalents
so grep, copy-paste, and Mintlify search hit the right tokens.
Converted the 2-bullet Related list into a CardGroup adding cross-links
to gateway architecture and gateway protocol since presence is produced
by both surfaces.

docs/concepts/markdown-formatting.md: replaced 5 typography characters
(en-dash and curly quotes) with ASCII equivalents and converted the
2-bullet Related list into a CardGroup pointing at streaming/chunking
and system prompt.

docs/concepts/typing-indicators.md: replaced 4 typography characters
with ASCII equivalents and converted the 2-bullet Related list into a
CardGroup with the same Presence and Streaming cross-links.

Verified /concepts/streaming, /concepts/system-prompt,
/concepts/architecture, and /gateway/protocol targets all exist.
2026-05-05 18:30:39 -07:00

2.8 KiB

summary, read_when, title
summary read_when title
When OpenClaw shows typing indicators and how to tune them
Changing typing indicator behavior or defaults
Typing indicators

Typing indicators are sent to the chat channel while a run is active. Use agents.defaults.typingMode to control when typing starts and typingIntervalSeconds to control how often it refreshes.

Defaults

When agents.defaults.typingMode is unset, OpenClaw keeps the legacy behavior:

  • Direct chats: typing starts immediately once the model loop begins.
  • Group chats with a mention: typing starts immediately.
  • Group chats without a mention: typing starts only when message text begins streaming.
  • Heartbeat runs: typing starts when the heartbeat run begins if the resolved heartbeat target is a typing-capable chat and typing is not disabled.

Modes

Set agents.defaults.typingMode to one of:

  • never - no typing indicator, ever.
  • instant - start typing as soon as the model loop begins, even if the run later returns only the silent reply token.
  • thinking - start typing on the first reasoning delta (requires reasoningLevel: "stream" for the run).
  • message - start typing on the first non-silent text delta (ignores the NO_REPLY silent token).

Order of "how early it fires": nevermessagethinkinginstant

Configuration

{
  agent: {
    typingMode: "thinking",
    typingIntervalSeconds: 6,
  },
}

You can override mode or cadence per session:

{
  session: {
    typingMode: "message",
    typingIntervalSeconds: 4,
  },
}

Notes

  • message mode won't show typing for silent-only replies when the whole payload is the exact silent token (for example NO_REPLY / no_reply, matched case-insensitively).
  • thinking only fires if the run streams reasoning (reasoningLevel: "stream"). If the model doesn't emit reasoning deltas, typing won't start.
  • Heartbeat typing is a liveness signal for the resolved delivery target. It starts at heartbeat run start instead of following message or thinking stream timing. Set typingMode: "never" to disable it.
  • Heartbeats do not show typing when target: "none", when the target cannot be resolved, when chat delivery is disabled for the heartbeat, or when the channel does not support typing.
  • typingIntervalSeconds controls the refresh cadence, not the start time. The default is 6 seconds.
How the Gateway tracks connected clients and surfaces them in the macOS Instances tab. Outbound streaming behavior, chunk boundaries, and channel-specific delivery.