Connecting & privacy

Two ways to reach a box over SSH and over HTTP — gateway-terminated, or end-to-end.

Every box is reachable two ways, and both the SSH and the HTTP front doors offer the same choice: let the gateway terminate your session (it sees the plaintext, can render the menu, audit, and proxy you in with its own key), or run a pass-through tunnel where the gateway only shuttles ciphertext and your client talks to the box directly. Pick by how much you trust the gateway.

SSH

Gateway mode (default)End-to-end jump
Commandssh box@krillbox.gra.ke2.cloud.ovh.netssh -J krillbox.gra.ke2.cloud.ovh.net root@box
Who terminates SSHGateway, then proxies to the box's sshdYour client ↔ the box (raw relay)
What the gateway seesPlaintext (menu / CLI / keystroke audit)Ciphertext only — it never authenticates to the box
Auth to the boxGateway's per-workspace proxy keyYour own key, injected at launch
Default box classStandardConfidential by default (privacy is the point)

Gateway mode is the friendly default: you get the interactive box picker, on-demand spawn/wake, and the in-band CLI (ssh cli@krillbox.gra.ke2.cloud.ovh.net …). The gateway holds an inner SSH session to the box on your behalf.

# default — gateway terminates and proxies you in
ssh box@krillbox.gra.ke2.cloud.ovh.net

# end-to-end — gateway is a dumb jump host, your client meets the box's sshd
ssh -J krillbox.gra.ke2.cloud.ovh.net root@mybox

# pin an image / lifetime on the jump target
ssh -J krillbox.gra.ke2.cloud.ovh.net root@mybox+1h:debian-default
On the -J path the gateway performs a raw TCP relay (direct-tcpip) and never holds a key to your box, so it cannot read or replay your session. A box left unpinned on this path is provisioned confidential; pin an image (root@box:debian-default) or use the gateway endpoint for a standard box.

HTTP

Gateway modeCONNECT proxy
Endpoint/ws/<box> (WebSocket PTY), /execHTTP CONNECT tunnel (proxy port)
Who terminates TLSGateway, renders a browser terminalYour client ↔ the box (box-direct TLS)
What the gateway seesPlaintext PTY streamCiphertext only — it just tunnels bytes
Use it forThe in-browser terminal on the landing pageDriving a box programmatically / privately over HTTP

The WebSocket and /exec endpoints are the HTTP twins of SSH gateway mode — the gateway terminates, runs the inner SSH, and streams you a PTY. The CONNECT proxy is the HTTP twin of the -J jump: a tunnel the gateway opens to the box and then stays out of, so the TLS is end-to-end.

# browser terminal (gateway-terminated PTY over WebSocket)
wss://krillbox.gra.ke2.cloud.ovh.net/ws/mybox

# HTTP CONNECT tunnel to a box, box-direct TLS (gateway only shuttles bytes)
curl -x https://krillbox.gra.ke2.cloud.ovh.net:8081 https://mybox.internal/

Running a command: POST /exec/{box}

For one-shot commands there's POST /exec/<box> (Bearer api-key). The request body is a JSON header line {cmd, args, env, image, flavor, stay_alive} followed by a newline and optional raw stdin. Streaming SSE is the default (event: stdout/stderr base64 frames + a final event: exit); ?stream=false returns a buffered JSON envelope {exit_code, signal, stdout, stderr, duration_ms}.

printf '{"cmd":"echo hi; exit 7"}\n' | curl -sN \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/x-runtime-exec" \
  --data-binary @- https://krillbox.gra.ke2.cloud.ovh.net/exec/mybox?stream=false
Full field-by-field reference (with stdin and SSE examples) is in the agent skill and the API explorer.
Confidential boxes are never terminated by the gateway: the gateway-mode SSH/WS/exec paths refuse them, so a confidential box is only reachable over an end-to-end tunnel — the gateway physically cannot see inside it.