#prevent spam
1 messages · Page 1 of 1 (latest)
That sounds like queue backlog, not truly “unsent” messages. When the model/fallback hangs, OpenClaw can keep queued messages for that session, then drain them once it recovers.
I’d do this first:
- Check version:
openclaw --version - In that chat/session, set:
- Recommended:
/queue collect debounce:2s cap:5 drop:old - If you want newest message to win and kill backlog:
/queue interrupt
- Recommended:
- When it starts the weird
ok...loop, run/stop, then send one fresh message. - Avoid
steer-backlog, it can look like duplicate replies later.
For a permanent config, set something like:
{
messages: {
queue: {
mode: "collect",
debounceMs: 2000,
cap: 5,
drop: "old",
byChannel: {
discord: "collect"
}
}
},
agents: {
defaults: {
model: {
primary: "your-main-model",
fallbacks: ["your-reliable-fallback-model"]
}
}
}
}
Then restart the gateway.
Docs:
- https://docs.openclaw.ai/concepts/queue
- https://docs.openclaw.ai/help/faq#why-does-it-feel-like-the-bot-ignores-rapid-fire-messages
- https://docs.openclaw.ai/gateway/configuration
If you want, paste these and I can tell you the exact fix:
openclaw --versionopenclaw status --all
openclaw models status- the relevant lines from
openclaw logs --follow
whats bychannel mean and usage,
byChannel means per chat platform/surface override, not per Discord room/thread ID.
So this:
messages: {
queue: {
mode: "collect",
byChannel: {
discord: "interrupt",
telegram: "collect",
whatsapp: "collect"
}
}
}
means:
- default for everything =
collect - but Discord uses
interrupt - Telegram/WhatsApp use
collect
So byChannel.discord = “for all Discord chats”.
If you want to change just one current thread/session, use /queue ... in that chat instead of config.
Also, same idea exists in other places, for example:
messages: {
inbound: {
debounceMs: 2000,
byChannel: {
discord: 1000,
telegram: 3000
}
}
}
That sets different debounce times per platform.
Docs:
If you want, I can suggest a good Discord-specific queue setup for your “don’t replay old stuck messages” case.
i use tui, how to message and queue? and i see it always become connected | idle , but not finish the chat, stop at middle, how to i know its running or not, show i send a msg
Yep, in TUI you can do both.
Send a message
- Just type and press Enter
- If you want replies posted out to a real chat channel too, turn on:
/deliver on
Change queue mode in TUI
Type these directly in the TUI input:
/queue collect debounce:2s cap:5 drop:old- good default, batches spammy followups
/queue interrupt- newest message wins, kills backlog
/queue default- reset to normal/default behavior
What connected | idle means
That usually means:
- connected = TUI is still connected to the Gateway
- idle = there is no active run right now
So if the reply stopped in the middle and it already says idle, it is not still generating. It probably ended, aborted, or errored.
How to tell if it’s running
In TUI status line:
runningorstreaming= activeidle= not runningerror= failed
Also run:
/status
And outside TUI, check:
openclaw --version
openclaw status
openclaw models status
openclaw logs --follow
What to do when it cuts off mid-reply
Don’t keep sending many messages. I’d do:
/statusEscor/abort- send one fresh message
- if it keeps happening, check logs
If you want, I can give you a good TUI queue preset for “don’t replay old stuck messages later”. Docs: https://docs.openclaw.ai/web/tui and https://docs.openclaw.ai/concepts/queue
/status
🦞 OpenClaw 2026.4.14 (323493f)
🧠 Model: nvidia/moonshotai/kimi-k2-thinking · 🔑 api-key (models.json)
🔄 Fallbacks: google/gemini-3.1-flash-lite-preview, google/gemini-3-flash-preview, ollama/glm-5:cloud,
nvidia/z-ai/glm4.7, google/gemini-2.5-flash, google/gemini-2.5-flash-lite, google/gemma-4-31b-it,
openrouter/google/gemma-4-31b-it:free, llamacpp/gemma-4-26B-A4B-it-UD-Q5_K_S
🧮 Tokens: 37k in / 177 out · 💵 Cost: $0.0000
🗄️ Cache: 99% hit · 3.8m cached, 0 new
📚 Context: 37k/252k (15%) · 🧹 Compactions: 1
🧵 Session: agent:main:main • updated just now
⚙️ Runtime: direct · Think: adaptive
🪢 Queue: collect (depth 0)
connected | idle
agent main (Yumika) | session main (openclaw-tui) | nvidia/moonshotai/kimi-k2-thinking | think
adaptive | tokens 37k/252k (15%)
?
For your case, I’d use this in TUI:
/queue collect debounce:2s cap:5 drop:old
Why:
collect= batches extra messages instead of replying to each onedebounce:2s= waits a bit before starting the followupcap:5= only keep a small backlogdrop:old= throw away older queued stuff, keep newer messages
If you want the newest message only and don’t care about backlog, use:
/queue interrupt