Files
openclaw/docs/concepts/typing-indicators.md

69 lines
1.9 KiB
Markdown
Raw Normal View History

2026-01-07 21:58:54 +00:00
---
2026-01-30 03:15:10 +01:00
summary: "When OpenClaw shows typing indicators and how to tune them"
2026-01-07 21:58:54 +00:00
read_when:
- Changing typing indicator behavior or defaults
title: "Typing Indicators"
2026-01-07 21:58:54 +00:00
---
2026-01-31 21:13:13 +09:00
2026-01-07 21:58:54 +00:00
# Typing indicators
2026-01-13 07:15:57 +00:00
Typing indicators are sent to the chat channel while a run is active. Use
`agents.defaults.typingMode` to control **when** typing starts and `typingIntervalSeconds`
2026-01-07 21:58:54 +00:00
to control **how often** it refreshes.
## Defaults
2026-01-31 21:13:13 +09:00
2026-01-30 03:15:10 +01:00
When `agents.defaults.typingMode` is **unset**, OpenClaw keeps the legacy behavior:
2026-01-31 21:13:13 +09:00
2026-01-07 21:58:54 +00:00
- **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 is disabled.
## Modes
2026-01-31 21:13:13 +09:00
Set `agents.defaults.typingMode` to one of:
2026-01-31 21:13:13 +09:00
2026-01-07 21:58:54 +00:00
- `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`
## Configuration
2026-01-31 21:13:13 +09:00
2026-01-07 21:58:54 +00:00
```json5
{
agent: {
typingMode: "thinking",
2026-01-31 21:13:13 +09:00
typingIntervalSeconds: 6,
},
2026-01-07 21:58:54 +00:00
}
```
You can override mode or cadence per session:
2026-01-31 21:13:13 +09:00
2026-01-07 21:58:54 +00:00
```json5
{
session: {
typingMode: "message",
2026-01-31 21:13:13 +09:00
typingIntervalSeconds: 4,
},
2026-01-07 21:58:54 +00:00
}
```
## Notes
2026-01-31 21:13:13 +09:00
2026-01-07 21:58:54 +00:00
- `message` mode wont show typing for silent-only replies (e.g. the `NO_REPLY`
token used to suppress output).
- `thinking` only fires if the run streams reasoning (`reasoningLevel: "stream"`).
If the model doesnt emit reasoning deltas, typing wont start.
2026-01-07 21:58:54 +00:00
- Heartbeats never show typing, regardless of mode.
- `typingIntervalSeconds` controls the **refresh cadence**, not the start time.
The default is 6 seconds.