Rate limits and budgets

Every messaging platform PwrAgent supports has a write budget. The budget caps how many messages plus edits the bot can send per minute, per scope (DM, supergroup, channel, workspace). Hit it and the platform returns a 429 with a retry window; PwrAgent’s local Slow Mode protects critical traffic until the budget recovers.

This page is the per-platform reference. It’s deep-linked from Streaming responses, the Webhooks security note, each provider setup page, and from inside the Using Codex via Messaging guide. Update one place, the rest pick it up.

The numbers below come from PwrAgent team probes in May 2026 and from each platform’s public documentation. They are practical budgets — what actually held in probes, rounded down for safety, not the upper-bound limits the platforms advertise.

PwrAgent budget protection

PwrAgent uses two related-but-distinct protection states:

State Imposed by What it does
Slow Mode PwrAgent (local) Kicks in when a scope nears its write budget. Preserves critical traffic — approval prompts, final assistant messages, the turn-completion summary, queued-turn notices — and drops or coalesces non-critical traffic — streaming edits, routine status-card refreshes, intermediate tool-update messages.
Cool Off The platform (server-imposed) Kicks in when a platform returns a rate-limit response (429 or equivalent) with a retry window. PwrAgent stops sending to that scope until the retry clears, then resumes conservatively.

The Settings → Messaging status dot turns orange while either state is active. The desktop’s messaging activity log records each entry.

Priority order PwrAgent uses when shedding traffic in Slow Mode:

  1. Drop first: streaming edits (least critical; the final assistant message will land regardless).
  2. Coalesce: routine status-card refreshes (the latest card replaces queued earlier edits).
  3. Batch: intermediate tool-update messages (per the binding’s Tools: <mode> setting).
  4. Always send: approval prompts, final assistant text, turn completion, queued-turn notices, detach confirmations.

This is also why streaming is a net negative in most configurations — its edits are the first thing Slow Mode sheds, so on busy turns you’ll watch streaming auto-disable mid-response anyway.

Telegram

Sends and edits draw from the same budget on Telegram. Edit calls return 429 with a retry_after value when the budget runs out. The 20 msg/min supergroup ceiling is the tightest practical budget of any supported platform.

Binding guidance for Telegram:

Label cap: 64 characters. Long model names truncate at this length on action buttons.

Discord

Discord’s actual rate-limit story is its REST bucket system. Sends and edits count as REST requests; the per-route bucket plus the per-app global bucket determine when you hit a 429. PwrAgent’s budget protection treats Discord as more permissive than Telegram but does not assume infinite headroom.

Label cap: 80 characters. Most permissive of the supported platforms.

Slack

Sends and edits are tracked under different Slack rate-limit categories, so the “edit until you drop” pattern that breaks Telegram in seconds takes longer to bite on Slack — but it still bites.

Label cap: 75 characters.

Mattermost

If you operate the Mattermost server, the relevant settings are EnableRateLimiter, PerSec, MaxBurst, MemoryStoreSize, and VaryByRemoteAddr. Bot traffic shares the rate-limit pool with regular user traffic.

Label cap: 40 characters. Worst label cap of any supported platform — long model names truncate hardest here.

Feishu / Lark

Outbound rate limits on Feishu’s im.message:send_as_bot scope are documented per-tenant and depend on tenant tier; consult the Open Platform console for current values.

Label cap: 20 characters. Same as LINE — labels truncate to near-icon length on dense status cards.

LINE

Because LINE has no edits, streaming is a no-op on LINE. The Streaming Responses toggle has no effect — only the final assistant message is posted as a regular LINE message regardless of setting.

Label cap: 20 characters. Long model names truncate hard.

Summary table

Platform Practical send budget Edit support Label cap
Telegram DM ~60 msg+edits/min Yes (shares budget) 64
Telegram supergroup ~20 msg+edits/min, shared across topics Yes (shares budget) 64
Discord Edits permissive; route bucket 5 req / 1 s Yes (separate REST bucket) 80
Slack DM Edits permissive; chat.postMessage has its own limit Yes (separate Web API method) 75
Mattermost Server-configured Yes (counts as REST request) 40
Feishu / Lark Tenant-scoped; not yet probed Yes (documented per-tenant) 20
LINE Per-channel Bot API quota Not supported 20

See also