Terminal & SSH
Creating SSH terminals, managing PTY sessions, and terminal features.
Creating a Terminal Session#
Click + NEW SESSION in the dashboard or press T to open the session creation modal.
Connection Types#
| Mode | When | How |
|------|------|-----|
| Local | Host is localhost | Spawns local shell via node-pty |
| Remote SSH | Any remote host | Runs ssh -t -i keyfile user@host |
| tmux attach | Existing session | Runs tmux attach -t 'session' |
| tmux new | Wrap in tmux | Runs tmux new-session -s 'name' 'command' |
Configuration Fields#
| Field | Default | Notes |
|-------|---------|-------|
| Host | localhost | From browser URL |
| Port | 22 | SSH port |
| Username | — | Required for remote |
| Auth method | key | key or password |
| Private key | — | Listed from ~/.ssh/ |
| Working directory | ~ | Supports history dropdown |
| Command | claude | claude, codex, gemini, or custom |
| API key | — | Optional per-session override |
| Terminal theme | auto | Matches dashboard theme |
| Title | — | Custom display name |
| Label | — | Organization label |
Terminal Features#
xterm.js Integration#
Each terminal runs a full xterm.js instance with:
- @xterm/addon-fit — auto-resize to container
- @xterm/addon-web-links — clickable URL detection
- @xterm/addon-search — text search within terminal
Terminal Themes#
8 named themes plus auto:
| Theme | Description | |-------|-------------| | auto | Matches dashboard theme (default) | | dark | Standard dark terminal | | light | White background | | cyberpunk | Magenta/cyan on deep purple | | dracula | Dracula color scheme | | solarized | Solarized dark | | nord | Nord color scheme | | monokai | Monokai colors | | warm | Amber on cream |
Output Buffer#
Each terminal maintains a 128KB ring buffer. When a new browser tab connects, the full buffer is replayed so you see previous output without re-running commands.
Fullscreen Mode#
Click the fullscreen button or press F11 while the terminal tab is active. Press again to exit.
Shell-Ready Detection#
Before sending the launch command, the server waits for the shell prompt to appear:
- Buffers PTY output (max 4096 bytes)
- Strips ANSI escape sequences
- After 100ms of silence, checks if the last line ends with
$,#,%, or> - Local timeout: 5 seconds, Remote SSH timeout: 15 seconds
If the timeout expires, the command is sent anyway with a warning log.
Session Linkage#
When you create a terminal and launch Claude inside it, the dashboard links the Claude session to the terminal:
- Terminal created with
AGENT_MANAGER_TERMINAL_IDenv var injected - Claude's hook script reads this env var
- Hook events include
agent_terminal_idfield - Server matches the hook to the correct terminal via Priority 1 matching
This allows the detail panel to show both the terminal output and the Claude session data side by side.
Prompt Queue#
The Queue tab in the detail panel lets you stage prompts:
- Add: Type in the textarea, click Add
- Send: Click Send or press Ctrl+Enter to send the first queued item
- Reorder: Drag and drop items in the queue
- Move: Transfer prompts to a different session
- Auto-send: Optional setting to send automatically on terminal focus
Terminal Limits#
Maximum 10 terminals can be open simultaneously. Close unused terminals to free slots.
Resume & Reconnect#
When a session ends, you can resume it:
- Click Resume in the detail panel (or the resume button on the card)
- The server creates a new PTY and runs
claude --resume {session_id} || claude --continue - The new Claude session links back to the original session data
- Previous conversation history appears as collapsible sections