Skip to content

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.

  • Access to your OpenClaw agent configuration.
  • A chat channel where you can test active runs.

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,
},
}

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.

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_REPLY silent 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.

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,
},
}

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 thinking mode isn’t firing: This mode only works if the run is actually streaming reasoning. Make sure you have reasoningLevel: "stream" enabled. If the model doesn’t emit reasoning deltas, the typing indicator won’t start.
  • No indicator for silent replies: If you use message mode, the indicator won’t show up for replies that only contain the NO_REPLY token.
  • Interval vs. Start Time: Remember that typingIntervalSeconds only 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.

OpenClaw

OpenClaw Expert

Still stuck?

If this page didn't answer your case, ask OpenClaw Expert for step-by-step guidance.