| # Terminal |
|
|
| The integrated terminal provides a full-featured terminal emulator within Automaker, powered by xterm.js. |
|
|
| ## Configuration |
|
|
| Configure the terminal via environment variables in `apps/server/.env`: |
|
|
| ### Disable Terminal Completely |
|
|
| ``` |
| TERMINAL_ENABLED=false |
| ``` |
|
|
| Set to `false` to completely disable the terminal feature. |
|
|
| ### Password Protection |
|
|
| ``` |
| TERMINAL_PASSWORD=yourpassword |
| ``` |
|
|
| By default, the terminal is **not password protected**. Add this variable to require a password. |
|
|
| When password protection is enabled: |
|
|
| - Enter the password in **Settings > Terminal** to unlock |
| - The terminal remains unlocked for the session |
| - You can toggle password requirement on/off in settings after unlocking |
|
|
| ## Keyboard Shortcuts |
|
|
| When the terminal is focused, the following shortcuts are available: |
|
|
| | Shortcut | Action | |
| | -------- | --------------------------------------- | |
| | `Alt+T` | Open new terminal tab | |
| | `Alt+D` | Split terminal right (horizontal split) | |
| | `Alt+S` | Split terminal down (vertical split) | |
| | `Alt+W` | Close current terminal | |
|
|
| These shortcuts are customizable via the keyboard shortcuts settings (Settings > Keyboard Shortcuts). |
|
|
| ### Split Pane Navigation |
|
|
| Navigate between terminal panes using directional shortcuts: |
|
|
| | Shortcut | Action | |
| | --------------------------------- | ------------------------------------ | |
| | `Ctrl+Alt+ArrowUp` (or `Cmd+Alt`) | Move focus to terminal pane above | |
| | `Ctrl+Alt+ArrowDown` | Move focus to terminal pane below | |
| | `Ctrl+Alt+ArrowLeft` | Move focus to terminal pane on left | |
| | `Ctrl+Alt+ArrowRight` | Move focus to terminal pane on right | |
|
|
| The navigation is spatially aware - pressing Down will move to the terminal below your current one, not just cycle through terminals in order. |
|
|
| Global shortcut (works anywhere in the app): |
| | Shortcut | Action | |
| |----------|--------| |
| | `Cmd+`` (Mac) / `Ctrl+`` (Windows/Linux) | Toggle terminal view | |
|
|
| ## Features |
|
|
| ### Multiple Terminals |
|
|
| - Create multiple terminal tabs using the `+` button |
| - Split terminals horizontally or vertically within a tab |
| - Drag terminals to rearrange them |
|
|
| ### Theming |
|
|
| The terminal automatically matches your app theme. Supported themes include: |
|
|
| - Light / Dark / System |
| - Retro, Dracula, Nord, Monokai |
| - Tokyo Night, Solarized, Gruvbox |
| - Catppuccin, One Dark, Synthwave, Red |
|
|
| ### Font Size |
|
|
| - Use the zoom controls (`+`/`-` buttons) in each terminal panel |
| - Or use `Cmd/Ctrl + Scroll` to zoom |
|
|
| ### Scrollback |
|
|
| - The terminal maintains a scrollback buffer of recent output |
| - Scroll up to view previous output |
| - Output is preserved when reconnecting |
|
|
| ## Architecture |
|
|
| The terminal uses a client-server architecture: |
|
|
| 1. **Frontend** (`apps/ui`): xterm.js terminal emulator with WebGL rendering |
| 2. **Backend** (`apps/server`): node-pty for PTY (pseudo-terminal) sessions |
|
|
| Communication happens over WebSocket for real-time bidirectional data flow. |
|
|
| ### Shell Detection |
|
|
| The server automatically detects the best shell: |
|
|
| - **WSL**: User's shell or `/bin/bash` |
| - **macOS**: User's shell, zsh, or bash |
| - **Linux**: User's shell, bash, or sh |
| - **Windows**: PowerShell 7, PowerShell, or cmd.exe |
|
|
| ## Troubleshooting |
|
|
| ### Terminal not connecting |
|
|
| 1. Ensure the server is running (`npm run dev:server`) |
| 2. Check that port 3008 is available |
| 3. Verify the terminal is unlocked |
|
|
| ### Slow performance with heavy output |
|
|
| The terminal throttles output at ~60fps to prevent UI lockup. Very fast output (like `cat` on large files) will be batched. |
|
|
| ### Shortcuts not working |
|
|
| - Ensure the terminal is focused (click inside it) |
| - Some system shortcuts may conflict (especially Alt+Shift combinations on Windows) |
|
|