Skip to content

Latest commit

 

History

125 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

shell.online

CI CodeQL License: MIT

A browser link to any terminal process.

shell claude

The command keeps running on your machine. shell.online prints a URL, password, and QR code that open the same terminal in a desktop or mobile browser. Terminal traffic is end-to-end encrypted by default.

Install

macOS, Linux, BSD, and Solaris:

curl -fsSL https://shell.online/install | sh

Windows PowerShell:

irm https://shell.online/install.ps1 | iex

Homebrew (the tap lives in this repository):

brew tap teoslayer/shell-online https://github.com/TeoSlayer/shell.online
brew trust --tap teoslayer/shell-online
brew install shell-online

Homebrew 6 asks you to trust a third-party tap once. Older versions have no brew trust and can skip that line.

Installers verify checksums. Release binaries and SHA256SUMS are available on the releases page.

Platform compatibility

OS Architectures Verification
macOS amd64, arm64 Build
Windows 386, amd64, arm64 Native ConPTY on amd64; build on others
Linux 386, amd64, armv5/6/7, arm64, LoongArch64, MIPS/MIPSLE/MIPS64/MIPS64LE, PPC64/PPC64LE, RISC-V 64, s390x Runtime under QEMU
FreeBSD 386, amd64, armv7, arm64 Build
OpenBSD 386, amd64, armv7, arm64, ppc64, riscv64 Build
NetBSD 386, amd64, armv7, arm64 Build
DragonFly BSD amd64 Build
Solaris amd64 Build

See platform details for PTY, router, ROS, installer, and test caveats.

Usage

shell <command>                           # share a command
shell                                     # share a new shell
shell --read-only <command>               # disable browser input
shell --foreground <command>              # also show it locally
shell --auto-close 5m <command>           # set an earlier deadline
shell --persistent <file> <command>       # reuse a URL and password
shell --files <command>                   # opt in working-directory files
shell --files-root <dir> <command>        # opt in a different file root

shell list                                # list local sessions (adapts to terminal width)
shell password <id>                       # retrieve an active password locally
shell password rotate <id>                # revoke it without restarting the process
shell attach <id>                         # attach locally
shell kill <id>                           # stop a session

Press Ctrl-X, then D, to detach from an attached session. See shell help reference for every command and option.

Full-screen and nested terminals are supported. Release checks exercise tmux, Herdr, and mosh-style redraw, input, split-pane, and reconnect behavior; a restored browser snapshot cannot answer historical terminal queries into the live process.

File sharing is disabled unless --files or --files-root is present. Once enabled, browsers can browse that root and open referenced files on demand. Paths and contents use the session's E2EE WebSocket; the CLI rejects traversal, non-regular files, and symlink escapes. File flags cannot be combined with --no-e2ee. Refstream (unstable alpha) adds inline backed-file previews, while the Files panel works with either renderer.

Refstream (alpha) also provides a scoped Connect agent invitation. An agent connects once, then can read, wait, and follow up without pairing again; control permission also allows terminal input and Ctrl-C. Task IDs, progress, and answers survive panel changes and reconnection. Reload recovery is kept only in that browser tab for up to four hours and still requires the local process to be running. Revoking access is immediate and does not stop the terminal. Files stay unavailable unless the host separately used --files or --files-root. See the agent handoff protocol. The shell.online-specific behavior and fallback path are documented in the Refstream alpha guide.

Security

The CLI owns the PTY and encrypts terminal frames before sending them to the relay. The browser decrypts them locally. The relay still sees connection metadata, encrypted frame sizes, timing, labels, and session lifecycle events. Use --no-e2ee only when transport encryption without payload E2EE is required.

Anyone with both the URL and password can open a share. Interactive shares can type with the permissions of the wrapped process; use --read-only when viewers should only watch. See the security model and the security policy.

The CLI always prints the generated password and retains it while the local session is active. After shell login, it also saves an encrypted copy when that account has enabled its optional personal vault. A vault belongs to one person, not the team, and unlocks with its password or a supported passkey; the recovery key is the break-glass fallback. Without an owner-held copy there is intentionally no service-side recovery backdoor.

Accounts and containers

Accounts are optional. shell login groups sessions from linked machines in app.shell.online. The vault is separately optional, and the CLI reports whether each password was saved there.

The published container keeps one encrypted shell, URL, and password across restarts:

docker compose up -d
docker compose logs shell-online

Star History

Star History Chart

Documentation

Development

Requires Go 1.26.8, Node.js 22, and npm.

npm ci
npm run check
go test -race ./...
npm run test:app

See the contribution guide before opening a pull request.

Contributors

shell.online contributors

MIT licensed. See LICENSE.

Developed by Pilot Protocol.

About

A live browser link for any terminal process. Developed by Pilot Protocol.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

88 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages