Realtime agent↔user channel
Stream agent tokens, tool progress, and presence to clients over WebSocket/SSE with pub/sub semantics — not email/SMS and not a backend work queue.
At a glance — Oct 2026
Updated 2026-10-27 · forward this page: /jtbds/realtime-agent-channel#briefScores as of 2026-09-14 (43 days old; Depot marks scores stale after 30 days). The pick is still Depot's current editorial pick; it has not been re-reviewed since. Prices below carry their own dates.
- Depot Pick
- Ably · 8.29/10 for this job (curated estimate, high confidence)
Reliability + dx for realtime fanout. Distinct from notification-orchestration and serverless-agent-queue.
- Runner-up
- Stream (GetStream) · 7.94/10
Scores higher than the pick on: Developer & agent DX.
- When not to use the pick
- Need full chat UX (channels, moderation, reactions) — Stream; only server-side job fanout — QStash/SQS/EventBridge; Cloudflare Durable Objects already hold your edge state.
- Lock-in / migration
- The pick has lower stored lock-in risk than runner-up Stream (GetStream) (5.2 vs 5.5). Self-host fallback listed for this job: Centrifugo.
- Sourced price (no comparable unit)
Pick: no sourced price in this job's unit (no_matching_sourced_price).
No cheapest SKU (no_comparable_unit_for_job). No price was invented.
- Free option
- Centrifugo (oss) — source, as of 2026-10-25
- Failure modes to watch
- Confirmation skip: Gate those tool names on an approval id recorded before the call. A missing approval is a failure even if the downstream tool returns success.
- Context overflow: If the input exceeds the window, say so and retrieve a narrower slice. Do not answer from a truncated head as if it were the whole source.
- Identity confusion: Bind every tool call to a user or tenant id. Refuse the call if that id changed mid-task. For a public bot, the operator owns the words the bot shows.
- Instruction drift: Restate the stop condition in the trace. End the run when it is met. Review long traces for steps that do not serve the original task.
- Prompt injection: Compare each tool call to the original user task. If the call only makes sense given text that arrived from a fetched page, file, or message, stop and ask. Record which source the instruction came from. This catalog does not store payloads or attack steps.
- Stale retrieval: Store the source URL and the time it was fetched. If a newer canonical page exists, or two stored sources disagree, do not answer from the older one.
Cite: Agent Provider Depot, Depot Pick for realtime-agent-channel: ably, scores as of 2026-09-14. Agents: GET /api/decide?jtbd=realtime-agent-channel
Free Realtime agent↔user channel options · for personal-assistant agents
Ably
Reliability + dx for realtime fanout. Distinct from notification-orchestration and serverless-agent-queue.
Pricing (directional): As of 2026-10-24 (ably.com/pricing, fetched 2026-10-24): Messages '$2.50 / million' ('As low as $0.50/M with volume discount'); channels and connections '$1.00 / million mins' each ('As low as $0.20/M with volume discount'); additional data…
Lock-in risk: higher = more lock-in (worse). Overall already inverts this dimension.
Depot pick for realtime agent↔user channels (token streaming, presence, multiplayer agent UIs). Not a substitute for email/SMS orchestration or durable workflow engines.
Quote for Realtime agent↔user channel
Depot Pick stays Ably. Prices below are sourced SKU rows only (as of 2026-10-27). Input and output are not blended. GET /api/quote?jtbd=realtime-agent-channel
Nothing was compared. no comparable sourced unit for this job; chat input $/1M and other units were not borrowed pickIsPriceWinner is null.
- Channel minutes usd_per_million_channel_minutes $1 source as of 2026-10-03
- Connection minutes usd_per_million_connection_minutes $1 source as of 2026-10-03
- Data transfer usd_per_gib $0.25 source as of 2026-10-03
- Messages usd_per_million_messages $2.5 source as of 2026-10-03
- Pro usd_per_month $399 source as of 2026-10-03
- Standard usd_per_month $29 source as of 2026-10-03
2 of 4 candidates have no sourced price row. 4 are excluded from the Matching price comparison (none). no comparable sourced unit for this job; chat input $/1M and other units were not borrowed
Runners-up
Stream (GetStream)
Use when the agent product is a chat/feed UX. Ably remains Depot realtime channel pick for raw pub/sub token…
Cloudflare Workers
Best edge runtime for lightweight agent gateways and tools. Heavy LLM loops still belong on Modal/Fly/GPU…
Supabase (pgvector)
Depot default for most agent apps under ~25–50M vectors. Don't add Pinecone until Postgres actually hurts.
When NOT to use the top pick
Need full chat UX (channels, moderation, reactions) — Stream; only server-side job fanout — QStash/SQS/EventBridge; Cloudflare Durable Objects already hold your edge state.
Full ranking (score table)
Ranked with this JTBD's weights. Scores are curated estimates unless marked otherwise. Agents: prefer /api/decide then this table for tie-breaks.
| # | Provider | Overall | Fit | $/perf | Latency | DX | As of |
|---|---|---|---|---|---|---|---|
| 1 | Supabase (pgvector) | 8.6 | 8.5 | 9.0 | 8.6 | 9.4 | 2026-09-14 |
| 2 | Cloudflare Workers | 8.5 | 8.6 | 9.2 | 9.2 | 8.5 | 2026-09-14 |
| 3 | AblyDepot Pick | 8.3 | 8.8 | 7.4 | 9.2 | 8.4 | 2026-09-14 |
| 4 | Stream (GetStream) | 7.9 | 8.8 | 5.8 | 9.0 | 8.6 | 2026-09-14 |
Score methodology for this job
Reliability + dx for realtime fanout. Distinct from notification-orchestration and serverless-agent-queue.
capabilityFit: 25%pricePerformance: 18%latencyReliability: 15%developerDx: 15%privacyPosture: 10%lockInRisk: 7%maturity: 10%