Terminal persistence
nodeterm’s terminals don’t die when you close the app. Quit and relaunch, and every terminal is exactly where you left it — running processes included. This page explains how, and what does and doesn’t survive a reboot.
tmux under the hood
Section titled “tmux under the hood”Each terminal runs inside a persistent tmux session named nt-<node-id>. nodeterm runs
tmux on its own socket with its own generated config, so your ~/.tmux.conf is never
touched and never interferes. Because the tmux server outlives the app, sessions keep running
even when no terminal is attached to them.
Scrolling, selection, copy
Section titled “Scrolling, selection, copy”tmux owns the mouse — scrolling, selection, and the alternate screen are all its job, and this is deliberate:
- The wheel scrolls tmux’s own history, not the emulator’s buffer.
- A drag selects and copies via tmux copy-mode. tmux emits the selection as OSC 52,
which nodeterm writes to your system clipboard — the one copy path on every platform, and
it works over SSH too (no
pbcopyneeded). - To select with the emulator instead — for example inside an app that grabs the mouse, like vim or htop — hold Option (mac) or Shift (Linux/Windows) while dragging.
To copy an emulator selection, use Cmd+C (mac), or Ctrl+Shift+C / Ctrl+Insert (Linux/Windows). Plain Ctrl+C is never intercepted — it still sends an interrupt.
Across app restarts
Section titled “Across app restarts”Quitting nodeterm detaches the terminal clients but leaves the tmux sessions running. On relaunch each terminal reattaches to its live session — a warm reattach — and tmux redraws the current screen. Running processes are untouched; you pick up mid-command.
Across reboots
Section titled “Across reboots”A machine reboot kills the tmux server, so the nt-<node-id> sessions are gone — you can’t keep
a live OS process across a reboot. nodeterm cold-restores instead:
- Scrollback — nodeterm keeps a byte-capped snapshot (256 KB per terminal) of each session’s recent output. On a cold start it replays that snapshot into the terminal, with a “session restored” separator so you can see where the restore begins.
- Resumable agents — if the node was running an agent, nodeterm relaunches the CLI with its
saved session id:
claude --resume,codex resume,gemini --resume,opencode --session. The agent picks up its conversation instead of starting cold.