osewa — faster than ssh, survives like mosh, never garbles

osewa

3 min read Original article ↗

The terminal protocol for the age of agents. Your agent runs for hours on the host; check in from a laptop or a phone, on any network.

$ history

1995 ssh devbox

2012 mosh devbox

2026 osewa attach devbox

$ ▍

▼ PRESS ↓ OR SCROLL TO START

§1 Why nowselect your protocol

ssh and mosh were built for networks we no longer have.

ssh 1995

The session is its TCP connection: it dies when the network changes, and each key waits behind the download.

ROAMING

ECHO / LOAD

FIDELITY

mosh 2012

Survives roaming, but its own emulator can garble your screen. UDP only, no forwards, no scrollback.

ROAMING

ECHO / LOAD

FIDELITY

osewa 2026

The session lives on the host with Ghostty's engine. Forwards and exec share the connection, over QUIC or TCP.

ROAMING

ECHO / LOAD

FIDELITY

§2 Benchmarkskey echo while a download runs

On a bad network, keys echo 8–100× faster than ssh.

Cellular

60 ms · deep buffer

12×COMBO

§3 World 2 · public internetThailand → Tokyo

Thailand to Tokyo, over the public internet.

CONNECT + RUN A COMMAND · LOWER WINS

§4 Resourcesthe red bar is the winner, even when it's ssh

Light when idle. Honest about the cost.

Host memory, idle

lower is better

Client memory, idle

lower is better

Host CPU per MB, log tail

50 kB/s · ssh wins here

Host CPU per MB, flood

output as fast as it comes

§5 Quick startLinux and macOS hosts

ssh once. osewa after that.

$ osewa login --service me@devbox # install, enroll, run as a service

$ osewa attach devbox # attach to (or create) a session

$ osewa forward devbox 3000 # forward localhost:3000

$ osewa exec devbox -- make test # run a command, no terminal

$ osewa update devbox # upgrade the host over osewa

§6 Roadmapworld map

A transport any terminal can ride, then a mux on top.

M4

YOU ARE HEREIn the Moshi app

On your phone today: Moshi for iOS and Android has osewa as an experimental transport beside mosh. The host needs osewa and moshi-hook.

§7 How it works

Separate the session from the transport. Then make it hard to kill.

01 · HYBRID CARRIER

QUIC and TLS WebSocket, raced on every connect

QUIC gets a 300 ms head start; if UDP is blocked, the WebSocket wins. Nothing to configure.

02 · HOLDER

Connections come and go. The session stays.

One process per session on the host keeps the PTY, the screen and your unacked input.

03 · FLIGHT CONTROL

A download can't bury your echo

Keystrokes go ahead of bulk, and a slow link gets the latest screen, not a backlog.

§8 Agentsfinal level

The agent keeps working. You check in when it needs you.

OSC 7501 · devbox:mainclaude-code ● needs input · 2m ago"Run migrations on staging? [y/n]"