1995. That’s the year netcat shipped, and it’s the year the mental model behind most of our ad-hoc networking tools got frozen in amber. Open a port, hope the right person connects to it, hope the wrong person doesn’t. Three decades later, a lot of us are still doing exactly that, on machines that now sit in five clouds and a closet.
Which is why Tailcat caught my eye. The pitch is one sentence long: netcat, but over Tailscale’s data plane. No marketing site, no launch video, no funding round. Just a name that tells you the whole design in eight characters.
What the name is actually promising
Netcat’s job is to be a pipe. You give it a host and a port, it reads from stdin and writes to a socket, or listens on a socket and writes to stdout. That’s it. That minimalism is why it’s still around and why it’s the first thing security folks reach for when they need to poke at something.
The cost of that minimalism is that netcat has no opinion about who you are. Authentication, encryption, reachability — all somebody else’s problem. In practice “somebody else” means SSH tunnels, firewall rules you’ll forget you wrote, or an SSH jump host held together by a config file nobody wants to touch.
Tailscale’s data plane solves a different set of problems. It’s a mesh built on WireGuard, with NAT traversal so nodes can usually talk directly, and relay fallback when they can’t. Every node has an identity. Access is expressed as policy rather than as port numbers. Point netcat at that and the value is obvious: a pipe between two machines that already know each other, without either machine exposing anything to the open internet.
Why this matters more now than it did in 2015
I review AI tooling for a living, and the shape of the problem has changed. A year ago your agent ran in one place. Now the fashionable setup is an orchestrator on your laptop, a sandbox on a VM, a GPU box somewhere rented by the hour, and an artifact store in a third place. All of them need to shove bytes at each other, often for ninety seconds, often once.
The tooling for that is genuinely bad. Your options tend to be:
- Stand up an HTTP endpoint, then bolt on auth you’ll never audit
- Open a port and tell yourself the security group is fine
- Wrap everything in SSH and inherit key distribution as a permanent chore
- Upload to object storage and download it again, for a file that existed for one minute
A pipe that inherits identity from a network you already run is a legitimately better answer than any of those. Not exciting. Just correct.
Where I’d push back
Now the honest part, because I haven’t run this in anger and I’m not going to pretend otherwise.
Netcat’s real superpower is that it’s already installed. It’s in your base image, it’s on the rescue disk, it’s on the box you SSH’d into at 2am. Tailcat is not, and never will be. Anything that requires a node to be enrolled in your tailnet before it’s useful is a tool for infrastructure you already control, not for the messy edges where netcat earns its keep. Those are different jobs wearing similar clothes.
Second concern is debuggability. Plain netcat fails in ways you can read. When a mesh VPN misbehaves, you’re now debugging NAT traversal, key state, and policy evaluation at the same time as your actual problem. That’s a worse day. The failure mode of a simple tool is usually a simple error message, and that’s worth something.
Third, and this is the one I’d actually weigh before adopting: you’re taking a dependency on one company’s control plane for something as primitive as moving bytes between two boxes. Tailscale has earned a lot of goodwill and the underlying protocol is open, but a coordination server is still a coordination server. Fine for internal tooling. I’d think harder about putting it in a critical path.
My read
Tailcat looks like the kind of tool that exists because one person got tired of the same twenty-minute detour and fixed it for themselves. That’s usually a good sign. The tools I end up keeping are rarely the ones with a launch strategy.
Treat it as a convenience layer, not a replacement. If you’re already running a tailnet and you’re moving data between agent workers, it’s worth an afternoon of your time. If you’re not on Tailscale, this is not a reason to adopt it — the pipe is the easy part, the network is the commitment.
And if you’re currently solving this with a public port and optimism, almost anything is an upgrade.
🕒 Published: