Run a local process as if it were inside your cluster: prefix any command with plug and it resolves the cluster DNS and reaches the cluster services like any workload of the stack - no code change, no proxy configuration in your app. One tiny agent container on the cluster side, one static CLI on yours. Docker, Swarm, Kubernetes and OpenShift.

Roadmap

What is coming, and what is left out on purpose. What plug does today is in the rest of this documentation.

Coming

UDP by name

A cluster service reached over UDP, by its name, the way TCP is today: a DNS server of the cluster, StatsD, syslog, any request and response protocol. Until then, UDP to the cluster is not carried, and plug says so in its log rather than letting it look like a hang. Most clients of QUIC and HTTP/3 already fall back to TCP. Real-time media is not the aim: the datagrams will ride the tunnel in order, which suits requests and answers, not a video call.

IPv6 addresses written in the code

A service reached by its name already works, whatever its address. An IPv6 address written as is in a program or a config will be carried too.

Opening a session from an AI agent

plug mcp tells an AI coding agent what plug knows. Opening and closing a session from it is still being designed: a session is a process that lives while the agent works, and it deserves its own shape.

Left out on purpose

A Kubernetes-only way in

plug behaves the same on Docker, Compose, Swarm, Kubernetes and OpenShift, and stays that way: a feature that exists on one of them only is a second way of working to learn. On Kubernetes, kubectl port-forward already reaches the agent with no exposed port, each developer's kubeconfig gating it (security model).

Homebrew, apt and other package channels

plug installs from the cluster, and runs the version each cluster serves. A package channel would be a second source, with versions that drift from the clusters'.

Keystrokes in a running session

The command plug runs owns the keyboard: Vite reads r, u and q, nodemon reads rs, a REPL reads everything. Any key plug kept for itself would be taken from that program. Another terminal is where to ask instead: plug mounts lists what the live sessions have mounted, plug doctor lists them and checks each name they serve answers.