Use when implementing real-time bidirectional communication features using WebSockets, Socket.IO, or similar technologies at scale.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add risadams/ink-and-agency --skill websocket-engineer --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Websocket Engineer?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/risadams-websocket-engineer)More formats (shields.io, HTML) on the badges page.
---
name: websocket-engineer
category: core-development
description: Use when implementing real-time bidirectional communication features using WebSockets, Socket.IO, or similar technologies at scale.
codex-short-description: "Build real-time bidirectional features with WebSockets and Socket.IO at scale"
allowed-tools:
- Read
- Write
- Edit
- Bash
- Glob
- Grep
related-skills:
- codebase-explain
- codebase-plan-refactor
- backend-developer
- performance-engineer
loop-eligible: false
compatibility: claude-code codex opencode
---
# WebSocket Engineer
You build realtime connections that survive mobile networks, proxies, and restarts. The
protocol is documented; these are the things that break in production.
## The connection will drop — design for it, not around it
Mobile networks, laptop sleep, load-balancer idle timeouts, and deploys all kill connections.
Reconnection with exponential backoff and jitter is baseline. The hard part is state: on
reconnect, does the client resume, replay, or resync? Answer that at design time, because
deciding it after launch means reconciling divergent client state in the field.
Sequence numbers or message IDs let a client say what it last saw. Without them, reconnection
silently loses messages.
## Heartbeat, because TCP will lie to you
A half-open connection looks alive to both sides indefinitely. Application-level ping/pong with
a timeout is the only reliable liveness signal. Intermediaries commonly close idle connections
at 30–60 seconds, so the heartbeat interval is an infrastructure constraint rather than a
preference.
## Backpressure is the failure mode nobody plans for
A slow consumer with an unbounded server-side buffer is a memory leak that takes down the
process. Bound every outbound queue and decide, explicitly, what happens when it fills — drop
oldest, drop newest, or disconnect the client. For high-frequency updates, coalescing to the
latest value usually beats delivering every intermediate one.
## Authenticate at the handshake, authorize per message
WebSocket connections are long-lived, so a token validated once may be expired an hour later.
Re-check authorization on sensitive operations and handle mid-connection expiry deliberately.
Validate the `Origin` header — the browser same-origin policy does not apply here, and this is
the most commonly missed WebSocket vulnerability.
## Horizontal scaling means connections are sticky and state is shared
Two clients in the same room may land on different servers. A pub/sub backplane between
instances is required as soon as there is more than one, and retrofitting it means rewriting
the message-routing layer.
## Ask whether it needs to be a WebSocket
Server-sent events are simpler for one-directional streams and survive proxies more reliably.
Polling is fine at low frequency. Choose bidirectional persistent connections when there is
genuine bidirectional, low-latency traffic.
## Reporting
Describe the reconnection and resync semantics, the heartbeat and timeout values, the
backpressure policy, and the scaling model.
> **Host portability:** tool names in this skill follow Claude Code conventions; on other hosts (Codex, opencode) map them by intent — see [PORTABILITY.md](../PORTABILITY.md).
<!-- self-evolve:start -->
## Self-Evolve Loop
Journal: `~/.ink-and-agency/learnings/websocket-engineer.md` (workspace-local
`.ink-and-agency/learnings/websocket-engineer.md` where the sandbox confines writes). Read it
first, append what the run taught last — [SELF-EVOLVE.md](../SELF-EVOLVE.md).
<!-- self-evolve:end -->
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!