Core workflows
Terminal
The integrated terminal runs inside the bottom panel of Code mode - a full PTY-backed shell with xterm.js rendering, AI command generation, automatic error detection, and an AI chat mode. The same panel instance is shared with Chat mode, so switching modes never kills your processes or loses scrollback.
Opening and resizing the panel
Press Ctrl+** to toggle the terminal panel open or closed. Drag the separator between the editor and terminal to resize it. Press **Ctrl+Shift+ to maximize the terminal to fill the full code area, then again to restore it.
The panel can also dock to the right side of the editor instead of the bottom - click the dock-side toggle button at the far right of the terminal tab bar. This setting applies to all tabs at once.
Terminal tabs
Each tab is an independent shell process with its own scrollback buffer and working directory.
- New tab: click + in the terminal tab bar or press Ctrl+Shift+T
- Switch tabs: click the tab
- Reorder tabs: drag
- Close tab: click the X - this kills the PTY process
- Rename tab: double-click the tab title, type a name, press Enter to save or Escape to cancel
A green dot on the tab means the PTY is running; grey means it exited. When a process exits, the terminal shows the exit code and a "Press any key to restart" prompt. If it exits 3 times within 2 seconds, a diagnostic message appears suggesting you check your shell config.
Custom tab names persist in the current session but reset when you restart the app.
Shell selection
The shell is chosen automatically at launch - there is no shell selector in Settings.
| Platform | Shell precedence |
|---|---|
| Windows | PowerShell 7 (pwsh.exe) → Windows PowerShell → cmd.exe |
| macOS / Linux | $SHELL environment variable → /bin/bash |
To change the shell on macOS or Linux, set SHELL before starting Bodega One. On Windows the order is fixed.
Settings
Go to Settings → Terminal to configure the following.
| Setting | Options | Default |
|---|---|---|
| Font Size | 10–24 px | 13 |
| Cursor Style | Bar / Block / Underline | Bar |
| Cursor Blink | On / Off | On |
| Scrollback Lines | 1,000–50,000 | 5,000 |
Note: Settings apply to new tabs only. Tabs already open keep the settings they started with - open a new tab to pick up the change.
The font family is Geist Mono → Consolas → Courier New → monospace and cannot be changed. The color scheme updates automatically when you switch app themes - all 16 ANSI color slots update without restarting.
Scrollback is capped internally at 10,000 lines regardless of what you enter.
Command block navigation
At PTY spawn, Bodega injects shell hooks (bash PROMPT_COMMAND/PS1, zsh precmd/preexec, PowerShell prompt) that emit OSC 133 escape sequences. The renderer uses these to track exact command boundaries and exit codes - up to 200 blocks per terminal, stored in Zustand and persisted to the database.
This powers three visible features:
- Block overlay: hover near any completed command to reveal a thin separator line showing exit status (green checkmark or red exit code), elapsed time, and action buttons (copy command, rerun, fix).
- Error toasts in Assist mode: non-zero exits trigger an automatic toast.
- Block navigation: jump between commands with Ctrl+Up / Ctrl+Down.
Fish and other shells that don't emit OSC 133 sequences won't get any of these features. The hooks are injected 300 ms after PTY spawn to give PowerShell time to initialize.
Three modes: Shell, Assist, Agent
Mode pills appear at the left end of the terminal tab bar. Click one to switch.
Shell - standard terminal, no AI involvement.
Assist - the same shell process with AI error detection added. When any command exits non-zero, an error toast appears automatically at the bottom of the terminal.
Agent - replaces the terminal view with an AI chat panel. The PTY processes behind your tabs stay alive; switch back to Shell or Assist and they resume exactly where you left them. The tab bar and + button are hidden while Agent mode is active.
Shell ↔ Assist switching is instantaneous - no process restart, no state loss. The Agent pill label shows the configured agent name (default: Bodega).
AI command generator (Ctrl+I)
Press Ctrl+I with the terminal focused to open a floating overlay at the bottom of the terminal. Describe what you want in plain English and press Enter.
Once a command appears:
- Enter - runs it immediately
- Tab - enters edit mode so you can modify the command before running
- Type a follow-up (e.g. "also exclude node_modules") and press Enter - refines the result while keeping the conversation context
- Up arrow (when the input is empty) - cycles through the last 10 generated commands
- Escape - closes the overlay without running anything
The generator knows your current working directory and project path, so commands are context-aware. Multiple steps are joined with && on a single line. Closing and reopening the overlay starts a fresh conversation, but history items are still accessible with the Up arrow.
The generator uses whichever LLM provider is currently active - it won't work if no provider is configured.
Assist mode error flow
Switch to Assist mode using the mode pill. Run any command. If it exits non-zero, a toast appears automatically at the bottom of the terminal showing:
- An error category badge (see categories below)
- A one-line summary from pattern matching the output
- The command that failed
From the toast:
- Click Fix? - sends the failed command, exit code, and up to 2,000 characters of output to the LLM, which streams an explanation and a suggested fix.
- Click Run Fix - executes the suggested command directly in the terminal. This button only appears when the LLM response includes a
FIX:prefixed line. If the fix requires multiple steps, the response explains them and Run Fix is absent. - Click Copy - copies the fix command without running it.
- Click X - dismisses. The toast also auto-dismisses after 30 seconds if you don't interact with it.
You can also trigger the fix flow from a historical error block: hover the block overlay on any past failed command and click fix.
Error categories detected:
| Badge | Covers |
|---|---|
TS |
TypeScript compiler errors |
JS |
Node.js runtime errors (TypeError, ReferenceError, MODULE_NOT_FOUND) |
npm |
npm/pnpm/yarn errors and ERESOLVE conflicts |
PY |
Python tracebacks, ImportError, ModuleNotFoundError |
RS |
Rust/Cargo compiler errors |
git |
Merge conflicts, push rejection, not-a-repo |
🔒 |
Permission denied |
? |
Command not found |
🌐 |
Network errors (ECONNREFUSED, ETIMEDOUT, DNS failure) |
⚡ |
Port in use (EADDRINUSE) |
{ } |
Syntax errors |
! |
General / catch-all |
Agent mode
Click the Agent pill (e.g. "Bodega") to open an AI chat view in the terminal pane. The agent has access to recent terminal output (last 30 lines), current working directory, open files, and project path.
- Send message: Enter
- New line in input: Shift+Enter
- Abort a streaming response: Escape
- Clear conversation: click the trash icon
- Navigate input history: Up / Down (up to 50 previous messages)
Permission modes - three pills at the top of the chat view:
| Mode | Behavior |
|---|---|
| Ask | Confirm every tool call before it runs |
| Plan | Approve the plan once, then auto-run each step |
| Act | Execute freely without stops |
Type / to open the slash command autocomplete menu. Your PTY tabs remain alive while Agent mode is active.
Agent slash command workflows
In Agent mode, slash commands trigger multi-step shell workflows. Steps that modify state require explicit approval before they run.
| Command | What it does | Requires approval |
|---|---|---|
/commit <message> |
git status, stage all, commit |
Stage + commit |
/push <message> |
Stage all, commit, push | Stage + commit + push |
/test [command] |
Run npm test (or custom command) |
No |
/build [command] |
Run npm run build (or custom) |
No |
/install [command] |
Run npm install (or custom) |
Install step |
/lint [command] |
Run npm run lint -- --fix (or custom) |
No |
/stash [message] |
git stash or git stash push -m "..." |
Yes |
/pull |
git pull |
No |
Anything after the command name is passed as arguments - for example, /commit Fix login bug uses "Fix login bug" as the commit message.
A WorkflowCard appears in the chat showing each step. Click Approve to run a step, Skip to bypass it, or Abort to cancel the whole workflow. Workflows write commands to the currently active terminal tab - there must be an active tab open.
Terminal search
Press Ctrl+F while the terminal is focused to open a search bar in the top-right corner of the terminal. Type to search - matches highlight immediately.
- Next match: Enter or the down arrow button
- Previous match: Shift+Enter or the up arrow button
- Close: Escape or click X
Clickable file paths
File paths in terminal output are clickable. When a compiler, linter, test runner, or stack trace prints a path like src/foo.ts, src/foo.ts:42, src/foo.ts:42:10, or the TypeScript src/foo.ts(42,10) form, Ctrl+Click (Cmd+Click on macOS) opens that file in the editor - jumping to the exact line and column when the output includes them.
Relative paths resolve against the terminal tab's working directory, falling back to the open project root. Absolute paths open directly. A plain click is left alone so you can still select text; hold Ctrl/Cmd to follow the link (the path underlines on hover). Web URLs (http/https) remain clickable too and open in your browser.
Copy, paste, and clear
The terminal has full clipboard support via keyboard and a right-click menu.
- Copy: select text, then Ctrl+Shift+C (or right-click → Copy). Plain Ctrl+C is left alone so it still sends SIGINT to interrupt a running process.
- Paste: Ctrl+Shift+V (or right-click → Paste). The text is written straight to the shell.
- Select All and Clear are available from the right-click menu. Clear wipes the visible viewport; your scrollback and the running process are untouched.
Right-click anywhere in the terminal to open the menu. Copy is disabled when nothing is selected.
Settings apply to new tabs, not open ones
If you change the font size, cursor style, or cursor blink setting, open a new tab to see the effect. The terminal applies settings at spawn time and doesn't hot-reload them into existing tabs.
OSC 133 is required for error detection
The Assist mode error toast, block overlay, and Ctrl+Up/Down navigation all depend on OSC 133 shell hooks that Bodega injects into bash, zsh, and PowerShell. If you're using Fish or another shell that doesn't receive those hooks, commands will still run normally - you just won't get error toasts or block navigation.
Switching themes updates terminal colors live
All 16 ANSI color slots in the terminal update when you switch the app theme - no need to open a new tab or restart. The color scheme follows --color-accent, --color-base, and --color-text CSS tokens.
Keyboard shortcuts
| Keys | Action |
|---|---|
| Ctrl+` | Toggle terminal panel open / closed |
| Ctrl+Shift+` | Maximize or restore terminal panel |
| Ctrl+Shift+T | Open new terminal tab |
| Ctrl+F | Open terminal search |
| Ctrl+Shift+C | Copy selection (Ctrl+C stays SIGINT) |
| Ctrl+Shift+V | Paste into the terminal |
| Ctrl/Cmd+Click (path) | Open the file path under the cursor in the editor |
| Ctrl+I | Open AI command generator overlay |
| Ctrl+Up | Jump to previous command block |
| Ctrl+Down | Jump to next command block |
| Enter (in AI overlay) | Generate command or run generated command |
| Tab (in AI overlay) | Enter edit mode on generated command |
| Esc (in AI overlay) | Close overlay without running |
| Enter (Agent mode) | Send message |
| Shift+Enter (Agent mode) | Insert newline in input |
| Esc (Agent mode) | Abort streaming response |
| / (Agent mode) | Open slash command autocomplete menu |
This page mirrors the in-app docs hub for app version 1.0.0-beta.26.1. Found something unclear or out of date? Tell us on Discord. New here? Download the free beta and follow along.