Universal terminal handoff

Shelly

Run any CLI on your computer, leave the desk, and attach to that same live PTY session from Android. Shells, TUIs, REPLs, Claude Code, and Codex all keep their state in one daemon-owned session.

$ shelly new --dir ~/projects/api claude
created 018f1e...  claude · api

$ shelly ls
SESSION                         STATUS
claude · api                    Working
bash · shelly                   Idle
vim · docs                      Attached

phone attached over iroh
Claude is waiting for input.
Continue with the release notes?

$ y

Sessions

claude · apiAwaiting input
bash · shellyIdle
vim · docsAttached

What ships in v1

One daemon. Many views. Raw PTY bytes.

Arbitrary commands

bash, zsh, vim, htop, python, node, lazygit, claude, and codex run as normal PTYs.

Warm reconnect

Clients replay from a byte offset when possible and fall back to a synthetic ANSI snapshot when stale.

Agent-aware push

Claude Code and Codex get first-class waiting-for-input state; unknown CLIs still hand off cleanly.

Flow

Pair once, then attach anywhere.

  1. Install shelly, then start the user daemon.
  2. Run shelly pair, scan the QR code, and approve the device on your computer.
  3. Create sessions from the computer or phone. Mobile can list, create shell-only sessions, kill, attach, send input, resize, detach, and register push tokens.
  4. Push payloads contain only fixed text and opaque hashes; terminal content is fetched over the paired iroh channel after unlock.

Product surfaces

Desktop install, explicit pairing, live mobile terminal.

These source-controlled captures mirror the v1 flows used in local smoke tests and release documentation.

Shelly CLI install and session listShelly QR pairing with desktop approvalShelly mobile sessions and terminal attach