You're screensharing. They need to run a command. Stop dictating characters — give them a session code and let them type directly.
"Capital D, dash, dash, no-cache, space, dot, no the other dot..."
Request control, wait for approval, fumble with resolution differences, give it back.
VS Code Live Share, tmate, tmux — all overkill for "let me just type this one command."
Share a code. They type. You see it live on your screenshare. Done.
Developer screensharing.
Runs keytun host
Stateless broker.
Bridges connections.
Helper colleague.
Runs keytun join <code>
Run keytun host. A PTY spawns your shell. You get a session code like keen-fox-42.
Session codes use words — easy to read aloud. "keen fox forty-two."
Raw key bytes flow through the relay to the host's PTY. Arrow keys, tab completion, Ctrl+C — everything works.
Both local and remote input appear in the same terminal. Your screenshare shows everything in real time.
Go binary. No runtime, no dependencies. Download and run.
Wordlist-based codes like keen-fox-42. Easy to say over a call.
Raw bytes, not characters. Arrow keys, Ctrl sequences, tab completion all preserved.
Sessions are explicit. Host sees a banner on connect. Ctrl+C kills the session instantly.
Stateless WebSocket broker. Deploy on Fly.io, Railway, or any container host.
No database, no auth tokens, no persistence. Sessions live in memory.
JSON over WebSocket. Seven message types. That's it.
host_register Register a session code
client_join Join an existing session
session_joined Confirm session join
input Base64-encoded key bytes
output PTY output for remote echo
peer_event joined / left notifications
error Error responses