Skip to content

Terminal & shell

A session opens on a POSIX-like shell. Run pipelines, redirect output, and mark a file executable. The exec bit persists with the file.

Terminal window
$ printf 'cherry\napple\nbanana\n' > fruits.txt
$ sort fruits.txt | head -2
apple
banana
$ chmod +x greet.sh && ./greet.sh # a real, persisted exec bit

The shell is a real lexer, parser, and interpreter for POSIX-like syntax. Pipes, redirects, heredocs, command substitution, set -e, trap, source, $?, and 60+ coreutils work. Shebangs and WASM magic dispatch ./script.sh and ./hello.wasm. Full IFS splitting and complete job control are not done. tests/behavioral/shell/ holds the probes for this syntax.

The terminal below runs a redirect, a pipe through real coreutils, and id, which prints the credential every command runs under. Type your own commands when it finishes.

nimbus — shell

Live sandbox — connecting…

Run python, ruby, node, or bun with no arguments to open a REPL. Python and Ruby are real interpreters and keep their state, so variables and imports persist across submits. Node and Bun cannot keep declarations, because workerd’s CSP blocks runtime eval. Their banners say so, and scripts are unaffected. Leave with Ctrl+D or exit.

Foreground npm bins open in attached tabs. Keystrokes reach the process, resizes propagate, and ANSI redraws render. Pipe the same bin and it sees isTTY: false. The Pi coding agent runs end to end through both install paths.

opencode’s serve half boots, passes its health gate, and streams SSE. Its TUI half renders frames, but runs on a thin memory margin that is still being hardened, so full-TUI support is not yet claimed. Full PTY parity (raw and cooked modes, signals, and scrollback replay) is roadmap.

After a dropped WebSocket, the terminal reconnects with cwd, environment, and files intact. One person owns the active terminal. If a deployment enforces auth, anyone joining also needs a valid attach token.