Discord servers Gateway proxy (Rust) Your machine ┌────────────────┐ ┌──────────────────────────┐ ┌──────────────────┐ │ │ │ │ │ │ │ Bot shard 0 │─────────> Dispatch + broadcast │ │ kimaki CLI │ │ Bot shard 1 │─────────> Per-client guild filter ├───>│ (discord.js) │ │ Bot shard N │─────────> Offline event buffering │ │ │ │ │ │ │ │ OpenCode server │ └────────────────┘ └──────────────────────────┘ └──────────────────┘ ^ ^ │ │ Real Discord Shared Postgres Gateway WebSocket (gateway_clients table)
gateway_clients table in Postgres, polled every second.Discord Gateway │ v Shard receives event ──> broadcast_tx.send(payload, sequence, guild_id) │ ┌─────────────────────┼─────────────────────┐ v v v Client A Client B Client C guild: 111 guild: 222 guild: 111 ✓ receives ✓ receives ✓ receives guild 111 events guild 222 events guild 111 events
guild_id (DMs, user updates) are not forwarded to multi-tenant clients. Only guild-scoped events pass through.| Event | Buffered |
MESSAGE_CREATE | Yes |
MESSAGE_UPDATE | Yes |
MESSAGE_DELETE | Yes |
THREAD_CREATE | Yes |
THREAD_UPDATE | Yes |
THREAD_DELETE | Yes |
| Everything else (presence, typing, voice state, guild member updates) | No |
Step 1 Step 2 Step 3 ┌────────────────────┐ ┌──────────────────────┐ ┌────────────────────────┐ │ Synthetic READY │ │ Buffered events │ │ Live event stream │ │ │ │ │ │ │ │ Filtered to only │──>│ Up to 200 queued │───>│ Real-time broadcast │ │ authorized guilds │ │ MESSAGE/THREAD events│ │ with guild filtering │ │ + GUILD_CREATE │ │ in FIFO order │ │ │ └────────────────────┘ └──────────────────────┘ └────────────────────────┘
GUILD_CREATE events for each guild. This is necessary because Discord's native READY includes all bot guilds, but each client should only see its own.RESUME {session_id, seq} to the gateway. If the session is still alive on Discord's servers (typically a few minutes), Discord replays all missed events since that sequence number.INVALID_SESSION), discord.js falls back to a new IDENTIFY. The proxy then runs the full three-step reconnection flow described above.gateway_clients table, and receives the synthetic READY plus any buffered events.GUILD_CREATE).| Layer | What it buffers | Capacity | Survives restart |
| Discord servers | Full message persistence | Unlimited | Yes |
| Gateway proxy | MESSAGE/THREAD events per client | 200 events FIFO, in-memory | No (lost on redeploy) |
| Kimaki CLI | Nothing (delegates to above layers) | N/A | N/A |