openclaw - 💡(How to fix) Fix [Telegram] nativeToolProgress/sendMessageDraft blocks user input on Android; document interactive-control tradeoff

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

channels.telegram.streaming.preview.nativeToolProgress is visually excellent for Telegram DM tool-progress previews, but it has a serious interactive-control tradeoff on Telegram Android: while a sendMessageDraft preview is active, the Telegram composer is effectively locked. The send button turns into a loading/ellipsis control, so the user cannot send a normal follow-up message or an interrupt/steering command such as /steer ... until the bot draft stops.

This appears to be Telegram client behavior rather than an OpenClaw transport failure. I reported it to Telegram Bugs and the response was that this behavior is intended/by design: https://t.me/bugs?startapp=c-62189

Given that, I think OpenClaw should treat native Telegram drafts as a passive-viewing transport, not as a safe default recommendation for interactive agent control.

Root Cause

channels.telegram.streaming.preview.nativeToolProgress is visually excellent for Telegram DM tool-progress previews, but it has a serious interactive-control tradeoff on Telegram Android: while a sendMessageDraft preview is active, the Telegram composer is effectively locked. The send button turns into a loading/ellipsis control, so the user cannot send a normal follow-up message or an interrupt/steering command such as /steer ... until the bot draft stops.

This appears to be Telegram client behavior rather than an OpenClaw transport failure. I reported it to Telegram Bugs and the response was that this behavior is intended/by design: https://t.me/bugs?startapp=c-62189

Given that, I think OpenClaw should treat native Telegram drafts as a passive-viewing transport, not as a safe default recommendation for interactive agent control.

Fix Action

Fix / Workaround

Current workaround

The non-freezing workaround is to keep edited preview streaming and disable only the native draft lane:

Code Example

{
  channels: {
    telegram: {
      replyToMode: "off",
      streaming: {
        mode: "partial",
        preview: {
          toolProgress: true,
          nativeToolProgress: true,
          nativeToolProgressAllowFrom: ["<my telegram user id>"],
          commandText: "status"
        }
      }
    }
  },
  agents: {
    defaults: {
      verboseDefault: "off",
      toolProgressDetail: "explain",
      reasoningDefault: "stream"
    }
  }
}

---

{
  channels: {
    telegram: {
      replyToMode: "off",
      streaming: {
        mode: "partial",
        preview: {
          toolProgress: true,
          nativeToolProgress: false,
          commandText: "status"
        }
      }
    }
  },
  agents: {
    defaults: {
      verboseDefault: "off",
      toolProgressDetail: "explain",
      reasoningDefault: "stream"
    }
  }
}
RAW_BUFFERClick to expand / collapse

Summary

channels.telegram.streaming.preview.nativeToolProgress is visually excellent for Telegram DM tool-progress previews, but it has a serious interactive-control tradeoff on Telegram Android: while a sendMessageDraft preview is active, the Telegram composer is effectively locked. The send button turns into a loading/ellipsis control, so the user cannot send a normal follow-up message or an interrupt/steering command such as /steer ... until the bot draft stops.

This appears to be Telegram client behavior rather than an OpenClaw transport failure. I reported it to Telegram Bugs and the response was that this behavior is intended/by design: https://t.me/bugs?startapp=c-62189

Given that, I think OpenClaw should treat native Telegram drafts as a passive-viewing transport, not as a safe default recommendation for interactive agent control.

Environment

  • OpenClaw: 2026.5.20
  • Install: npm/pnpm global, systemd user gateway on WSL/Linux
  • Channel: Telegram DM
  • Telegram Android: 12.7.3
  • Config when observed:
{
  channels: {
    telegram: {
      replyToMode: "off",
      streaming: {
        mode: "partial",
        preview: {
          toolProgress: true,
          nativeToolProgress: true,
          nativeToolProgressAllowFrom: ["<my telegram user id>"],
          commandText: "status"
        }
      }
    }
  },
  agents: {
    defaults: {
      verboseDefault: "off",
      toolProgressDetail: "explain",
      reasoningDefault: "stream"
    }
  }
}

Related PR: #83622

Steps to reproduce

  1. Enable Telegram DM nativeToolProgress for a user/chat allowlist.
  2. Start a long-running tool-heavy OpenClaw turn from Telegram Android.
  3. Wait until Telegram displays the native draft/tool-progress preview.
  4. While the draft is active, try to send a normal message or a command such as /steer please stop.

Actual behavior

Telegram Android replaces the normal send affordance with a loading/ellipsis control while the bot draft is active. The user cannot send an interrupt, correction, or steering message from that chat until the active draft finishes.

In practice, this makes native draft progress unsuitable for interactive agent work where the user must be able to intervene while a single branch is thinking.

Expected / desired OpenClaw behavior

OpenClaw should make this tradeoff much clearer and provide a recommended non-freezing configuration path for interactive usage.

Possible fixes:

  • Document prominently that nativeToolProgress uses Telegram sendMessageDraft, and Telegram clients may lock the composer while the draft is active.
  • Recommend nativeToolProgress: false for interactive control workflows that depend on /steer, /stop, corrections, or mid-run follow-ups.
  • Consider adding a config preset or clearer option name, e.g. nativeToolProgress: "passive" / interactiveSafePreview, so users do not discover the freeze only after enabling the shiny transport.
  • Consider logging or doctor warning when nativeToolProgress: true is enabled together with Telegram commands/interactive steering features.

Current workaround

The non-freezing workaround is to keep edited preview streaming and disable only the native draft lane:

{
  channels: {
    telegram: {
      replyToMode: "off",
      streaming: {
        mode: "partial",
        preview: {
          toolProgress: true,
          nativeToolProgress: false,
          commandText: "status"
        }
      }
    }
  },
  agents: {
    defaults: {
      verboseDefault: "off",
      toolProgressDetail: "explain",
      reasoningDefault: "stream"
    }
  }
}

This keeps progress visible through OpenClaw's ordinary editable preview path while avoiding Telegram's native generated-draft composer lock.

Screenshots / proof

I have screenshots from Telegram Android 12.7.3 showing the input field visible but the send area replaced by the loading/ellipsis control while the bot draft is active. They contain private chat content, so I am not attaching them here unredacted, but I can provide cropped/redacted screenshots if useful.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix [Telegram] nativeToolProgress/sendMessageDraft blocks user input on Android; document interactive-control tradeoff