Control Your Chat Flow with Typing Indicators
Waiting for an AI to respond can be a weird experience. If the screen stays static for too long, users often assume the connection dropped or the app crashed. I find that getting the timing of that little “typing” animation right makes the whole interaction feel much more natural.
If the indicator pops up too early, it feels dishonest. If it shows up too late, the silence is awkward. I want to show you how to tune these indicators in OpenClaw so they match your specific needs.
What You’ll Need
Section titled “What You’ll Need”- Access to your OpenClaw agent configuration.
- A chat channel where you can test active runs.
Quick Start
Section titled “Quick Start”You can set the default behavior for all your agents in the main config. I recommend starting with thinking if you use models that output reasoning, as it strikes a good balance between speed and accuracy.
{ agent: { typingMode: "thinking", typingIntervalSeconds: 6, },}How It Works
Section titled “How It Works”OpenClaw uses agents.defaults.typingMode to decide when the indicator starts and typingIntervalSeconds to decide how often it refreshes. If you don’t set a mode, the system follows these legacy rules:
- 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 only when message text begins streaming.
- Heartbeat runs: Typing is disabled.
Choosing a Mode
Section titled “Choosing a Mode”There are four modes you can use to control the timing. They fire in this order from “latest” to “earliest”: never → message → thinking → instant.
- never: This turns the indicator off entirely.
- message: Typing starts on the first non-silent text delta. It ignores the
NO_REPLYsilent token. - thinking: Typing starts on the first reasoning delta. This requires you to set
reasoningLevel: "stream"for the run. - instant: Typing starts as soon as the model loop begins, even if the run ends up returning a silent reply.
Overriding for Specific Sessions
Section titled “Overriding for Specific Sessions”Sometimes you need a different cadence for a specific interaction. You can override the agent defaults within a session config:
{ session: { typingMode: "message", typingIntervalSeconds: 4, },}Troubleshooting
Section titled “Troubleshooting”If things aren’t appearing as expected, check these common scenarios:
- Typing never shows up for heartbeats: This is intentional. Heartbeats never show typing indicators regardless of your settings.
- The
thinkingmode isn’t firing: This mode only works if the run is actually streaming reasoning. Make sure you havereasoningLevel: "stream"enabled. If the model doesn’t emit reasoning deltas, the typing indicator won’t start. - No indicator for silent replies: If you use
messagemode, the indicator won’t show up for replies that only contain theNO_REPLYtoken. - Interval vs. Start Time: Remember that
typingIntervalSecondsonly controls the refresh cadence (default is 6 seconds). It does not change when the indicator first appears.
If you have more questions about specific configurations, check out the AI Setup Assistant.
What’s Next
Section titled “What’s Next”OpenClaw Expert
Still stuck?
If this page didn't answer your case, ask OpenClaw Expert for step-by-step guidance.