OpenClawSkills
GitHub
Core Concepts β€’ TutorialHeader.readTime

Typing Indicators

When and how OpenClaw displays typing indicators

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.

Use `agents.defaults.typingMode` to control **when** typing starts and `typingIntervalSeconds` to control **how often** it refreshes.

to control **how often** it refreshes.

Tutorial.step

Defaults

When ''agents.defaults.typingMode'' is **unset**, OpenClaw keeps the legacy behavior:

- **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.

Tutorial.step

Modes

Set `agents.defaults.typingMode` to control when typing indicators start:

- `run` β€” start typing when the **run starts** (default).

- `firstToken` β€” start typing on the **first streaming token**.

- `message` β€” start typing on the **first non-silent text delta** (ignores the `NO_REPLY` silent token).

- `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''

Ignores the `NO_REPLY` silent token).

Order of "how early it fires":

''never'' β†’ ''message'' β†’ ''thinking'' β†’ ''instant''

Tutorial.step

Configuration

Json5
{
  agent: {
    typingMode: "thinking",
    typingIntervalSeconds: 6,
  },
}

You can override mode or cadence per session:

Json5
{
  session: {
    typingMode: "message",
    typingIntervalSeconds: 4,
  },
}
Tutorial.step

Notes

Set `typingIntervalSeconds` to control how often typing indicators refresh:

- Default is 6 seconds.

- Minimum is 3 seconds.

- Maximum is 30 seconds.

- `typingIntervalSeconds` controls the **refresh cadence**, not the start time. The default is 6 seconds.

- `typingIntervalSeconds` controls the **refresh cadence**, not the start time. The default is 6 seconds.

Default is 6 seconds.