Typing Indicators in OpenClaw: Control When and How They Appear
Learn how OpenClaw transmits typing indicators to chat channels during runs. This guide explains how to tune the typing start mode and refresh interval for direct chats, group chats, and heartbeat runs.
Read this when
- Changing typing indicator behavior or defaults
Typing indicators are transmitted to the chat channel while a run is active. Control when typing begins with agents.defaults.typingMode and set the refresh interval (keepalive cadence, default 6 seconds) with typingIntervalSeconds.
Defaults
When agents.defaults.typingMode is unset:
- Direct chats: typing starts immediately when the model loop begins.
- Group chats with a mention: typing starts immediately.
- Group chats without a mention: typing starts when the admitted run shows user-visible activity, for example harness execution activity or message text.
- Heartbeat runs: typing starts when the heartbeat run begins, provided 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 at any time.instant- begin typing as soon as the model loop starts, even if the run later produces only the silent reply token.thinking- begin typing on the first reasoning delta, or on active harness execution after the turn is accepted.message- begin typing on the first user-visible reply activity, such as active harness execution or a non-silent text delta. Silent reply tokens likeNO_REPLYare not considered text activity.
Order from earliest to latest: never -> message/thinking -> instant.
Configuration
Set the agent-level default:
{
agents: {
defaults: {
typingMode: "thinking",
typingIntervalSeconds: 6,
},
},
}
Override the policy for one agent:
{
agents: {
entries: {
support: {
typingMode: "message",
},
},
},
}
Notes
messagemode does not trigger from silent reply tokens, though active execution can still display typing before any assistant text appears.thinkingstill responds to streamed reasoning (reasoningLevel: "stream"), and can also trigger from active execution before reasoning deltas arrive.- Heartbeat typing acts as a liveness signal for the resolved delivery target. It begins at heartbeat run start rather than following
messageorthinkingstream timing. SettypingMode: "never"to disable it. - Heartbeats do not show typing when the heartbeat target is
"none", when the target cannot be resolved, when chat delivery is disabled for the heartbeat, or when the channel does not support typing. agents.defaults.typingIntervalSecondscontrols the refresh cadence for every agent, not the start time. Default: 6 seconds.
Related
-
Presence, How the Gateway tracks connected clients for the Control UI Devices page and macOS Instances tab.
-
Streaming and chunking, Outbound streaming behavior, chunk boundaries, and channel-specific delivery.