All NewsOpinion

OpenClaw Finally Tells Users When It's Thinking — About Time

For months, OpenClaw's context compaction left users staring at 15 seconds of dead silence. Webchat images vanished after compaction. Two PRs fix both problems. The question is why it took this long.

March 21, 20265 min read

Let me describe a user experience that thousands of OpenClaw operators have endured in silence: You're mid-conversation with your AI agent. You ask a complex question. The agent starts to respond, then — nothing. Five seconds. Ten seconds. Fifteen seconds of absolute silence. No typing indicator. No status message. No acknowledgment that the system is still alive. You start wondering if the bot crashed, if your server ran out of memory, if you need to restart Docker.

It didn't crash. It was compacting context. And it couldn't be bothered to tell you.

The 15-Second Void

Context compaction is what happens when an AI agent's conversation history gets too long for its context window. The system summarizes older messages to make room for new ones. It's a routine background operation — and in OpenClaw, it happened in total silence.

No “please wait.” No spinner. No emoji. Just a gap in the conversation that felt indistinguishable from a crash. The completion notice existed, technically, but it was gated behind a verbose logging flag that almost nobody enables in production.

Before vs. After

Before:Compaction starts → 15 seconds of silence → response resumes
After: Compaction starts → “Compacting context...” → “Context compacted.” → response resumes

Contributor zidongdesign's fix does exactly what you'd expect: it sends a start notice when compaction begins and a completion notice when it finishes. The messages appear across Discord, Telegram, Feishu, and webchat. They respect threading settings. They're excluded from TTS transcripts so your agent doesn't literally say “compacting context” out loud. The PR went through 16 review iterations to handle edge cases around pipeline ordering and error recovery.

Sixteen iterations. For a status message.

The Vanishing Images Problem

While we're talking about things that should have worked from the start: webchat images. When a user sent an image through OpenClaw's webchat interface, the system parsed it into a content block, held it in memory as ephemeral base64, and then — discarded it during the next context compaction. The image existed only as long as the current conversation window. Once the context was summarized, the image data was gone. Permanently.

What was broken

  • Images lost after context compaction
  • Image editing workflows failed for webchat-origin images
  • The ~/.openclaw/media/inbound/ directory was incomplete
  • WhatsApp and Telegram had persistent images; webchat didn't

This is particularly galling because WhatsApp and Telegram already had persistent image storage. The saveMediaBuffer() utility function existed. The directory structure existed. Webchat just... wasn't wired into it. Contributor fuller-stack-dev's fix adds exactly one call to the existing utility after image parsing, using a fire-and-forget pattern so disk I/O never blocks message delivery.

“The best infrastructure is the kind where you can't tell it was missing until you see the diff. The worst infrastructure is the kind where thousands of users noticed it was missing and assumed it was their fault.”

The UX Debt Reckoning

I want to be clear: both of these are good fixes. The compaction notification handles threading, TTS exclusion, error recovery, and pipeline ordering correctly. The image persistence reuses established patterns and doesn't introduce new failure modes. The engineering is solid.

But the fact that an open-source project with 150k+ GitHub stars shipped a context management system that went silent for 15 seconds — and a webchat image handler that threw away user data — tells you something about where the project's priorities have been. The glamorous features (computer control, TikTok automation, Baidu integration) got headlines. The basic “don't confuse the user” and “don't delete their photos” work got deferred.

That's a common pattern in open-source projects experiencing hypergrowth, and it's not a moral failure. But it is a maturity signal. Enterprise evaluators look at exactly these kinds of polish issues when deciding whether to bet on a platform. A 15-second silence in a customer-facing chat agent isn't a minor annoyance — it's a support ticket generator.

What Actually Changed

For the technically curious, here's the rundown:

  • Context compaction now emits a start notice via onBlockReply and a completion notice through the block-reply pipeline. Both notices are marked with isCompactionNotice: true to exclude them from speech synthesis.
  • Webchat images are now persisted to ~/.openclaw/media/inbound/ using the existing saveMediaBuffer() utility, with fire-and-forget disk I/O that never blocks the chat response path.

Both changes land automatically for DeployClaw users. For self-hosters, pull the latest from the OpenClaw repository.

Deploy OpenClaw without the rough edges

DeployClaw keeps your instance updated automatically — every fix, every polish pass, no manual pulls.