The garage server has been humming along for months: a refurbished OptiPlex running Ubuntu, 32 GB RAM, a single 3060. It's perfect for
The stack is boring on purpose: Go 1.22, standard library websockets, SQLite for session metadata, systemd unit for the service. Frontend is Vite + React + Tailwind, compiled to a single static binary via
Missing pieces I'm tackling this month: macOS/iOS builds (code-signing is the blocker), a Tailscale/WireGuard toggle so you don't need to expose port 8080, and agent-specific keybindings — Codex loves Ctrl-C, Claude Code prefers Ctrl-D.
Claude Code, Codex, OpenCode, and Hermes sessions that run for hours. What wasn't perfect was the workflow — every time I wanted to check a long-running task or nudge an agent, I'd open Termius, authenticate, tmux attach, scroll back, type, detach. On a phone? Forget it.So I wrote Relay. It's a tiny Go backend that sits on the Linux box and a React frontend that runs anywhere — browser, Android, Windows (macOS and iOS builds are next). The backend speaks the native protocols of each agent: Anthropic's CLI for Claude Code, OpenAI's for Codex, OpenCode's own socket, Hermes via its HTTP API. No wrapper scripts, no polling hacks. You log in once, pick an agent, and you're looking at a live terminal that survives device swaps.
What changed day-to-day: Session persistence— start a refactor on the desktop, walk away, pick up the exact same scrollback on the phone at the coffee shop. The tmux session never dies unless you kill it.File round-trips— drag a log file down, edit a prompt template up. Works over the same WebSocket tunnel, no scp needed.** Quota glance**— one click shows Anthropic/OpenAI token burn for the current billing cycle. Saved me from two surprise $0.00 weeks already.Credentials stay home— API keys, SSH keys, git credentials never leave the backend. The frontend is just a viewport.
The stack is boring on purpose: Go 1.22, standard library websockets, SQLite for session metadata, systemd unit for the service. Frontend is Vite + React + Tailwind, compiled to a single static binary via
go:embed
. Total binary size ~12 MB. MIT licensed, repo at github.com/relay-sh/relay.Current platform matrix:
Backend: Linux only (amd64/arm64)** Frontend**: Web (any browser), Android APK, Windows .exe** Agents tested**: Claude Code, Codex, OpenCode, Hermes
Missing pieces I'm tackling this month: macOS/iOS builds (code-signing is the blocker), a Tailscale/WireGuard toggle so you don't need to expose port 8080, and agent-specific keybindings — Codex loves Ctrl-C, Claude Code prefers Ctrl-D.
If you've got a box collecting dust and a subscription to any of these agents, it's a 5-minute curl | bash
to try. Would love to hear what breaks on your hardware.
Story tracker · related coverage
[Does anyone actually care about llms. 13h ago](/en/news/6847/)
[Codex Dream Skin lets you customize your desktop UI 16h ago](/en/news/6824/)
AI is making every side project feel like meaningless slop 1d ago
HarnessRouter makes it way easier to switch between Claude Code 1d ago
Codex weekly limits are disappearing way too fast for me 1d ago
GitHub PRs are completely falling apart under the weight of 2d ago
Next AI Takes on the Prime Number Challenge → Free AI toolbox — all free to use
Detailed breakdowns of putting AI to work are in
a guide to making money with AI, with plenty of directly applicable cases.## All Replies (3)
A
Thanks for sharing! What does it do exactly? Always on the lookout for lightweight tools that don't phone home.
0
N
C