docs/concepts/typing-indicators.md
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.
When agents.defaults.typingMode is unset, OpenClaw keeps the legacy behavior:
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”:
never → message → thinking → instant
{
agent: {
typingMode: "thinking",
typingIntervalSeconds: 6,
},
}
You can override mode or cadence per session:
{
session: {
typingMode: "message",
typingIntervalSeconds: 4,
},
}
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.message or thinking
stream timing. Set typingMode: "never" to disable it.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.