Reference
Keyboard & Command Reference
Every keyboard shortcut and slash command in Bodega One. Open the in-app cheat sheet at any time with Ctrl+/.
Global shortcuts
These work from any screen, including when focus is inside an input.
| Keys | Action |
|---|---|
Ctrl+1 |
Switch to Chat mode |
Ctrl+2 |
Switch to Code mode |
Ctrl+, |
Toggle Settings panel |
Ctrl+Shift+P |
Command Palette |
Ctrl+/ |
Keyboard Shortcuts overlay |
Ctrl+B |
Toggle primary sidebar (chat session list in Chat mode; file tree in Code mode) |
Ctrl+J |
Focus the chat/agent composer input |
Esc |
Dismiss the topmost open overlay - Command Palette → Quick File Open → Go to Line → Shortcuts overlay → Context Inspector → secondary panel |
Ctrl+B does different things depending on mode. In Chat mode it toggles the session list; in Code mode it toggles the file tree. These are the same physical shortcut bound to different actions.
Arrow-key list navigation. The chat session list and the model picker's rows support ArrowUp/ArrowDown/Home/End once focus is inside the list - you don't have to Tab through every row to reach the one you want.
Code mode: AI panel shortcuts
Open specific AI panels in Code mode. All five shortcuts open the Bodega Panel if it's closed, then activate the right tab. They have no effect in Chat mode.
| Keys | Panel |
|---|---|
Ctrl+L |
Agent panel (full coding agent, the complete tool set) |
Ctrl+Shift+R |
Research panel (read-only; web search + codebase analysis) |
Ctrl+Shift+E |
Debug panel (read-only; stack trace, blame, call path analysis) |
Ctrl+Shift+A |
Advisor panel (read-only; architecture advice) |
Ctrl+Shift+I |
Context tab inside the Bodega Panel |
Ctrl+Shift+B |
Toggle the entire Bodega Panel (right-hand AI column) open/closed |
Ctrl+Shift+D |
Toggle Changes panel (Code mode) / Toggle Context Inspector (Chat mode) |
Ctrl+Shift+E opens the Debug panel - not the file explorer. The file explorer has no dedicated shortcut; use Ctrl+B to toggle it.
Code mode: editor shortcuts
Files and tabs
In the editor's Review Changes tab every hunk starts undecided; a/r mark the focused hunk and pressing the same key again clears it. Deciding the last hunk applies your choices automatically. Ctrl+Enter and Ctrl+Backspace act on the whole file at once.
| Keys | Action |
|---|---|
Ctrl+Enter |
Keep all changes |
Ctrl+Backspace |
Undo all changes (reverts the whole file) |
Ctrl+S |
Save current file |
Ctrl+W |
Close active editor tab (prompts on unsaved changes) |
Ctrl+Tab |
Next editor tab |
Ctrl+Shift+Tab |
Previous editor tab |
Ctrl+\ |
Toggle split editor (single ↔ split-right) |
Alt+← / Alt+→ (tab focused) |
Move the focused editor tab left/right |
Menu / Shift+F10 (tab focused) |
Open the tab's right-click context menu |
Search and navigation
| Keys | Action |
|---|---|
Ctrl+P |
Quick File Open (fuzzy file finder) |
Ctrl+G |
Go to Line |
Ctrl+Shift+O |
Go to Symbol in the open file |
Ctrl+F |
Find in current file |
Ctrl+Alt+F |
Find and Replace |
Ctrl+Shift+F |
Toggle Fleet panel / open search across project files |
Ctrl+D |
Select next occurrence |
Alt+← |
Navigate back in file history |
Alt+→ |
Navigate forward in file history |
AI editing
| Keys | Action |
|---|---|
Ctrl+K |
Toggle Inline Command Bar (AI prompt to edit selected code) |
Ctrl+Shift+K |
Fix Selected Code (inline fix on current selection) |
Git and source control
| Keys | Action |
|---|---|
Ctrl+Shift+G |
Toggle Git panel |
Alt+B |
Toggle git blame annotations |
Formatting and diagnostics
| Keys | Action |
|---|---|
Shift+Alt+F |
Format Document |
F8 |
Go to Next Error |
Shift+F8 |
Go to Previous Error |
View
| Keys | Action |
|---|---|
Ctrl+= |
Zoom editor font in |
Ctrl+- |
Zoom editor font out |
Ctrl+0 |
Reset editor font size |
Hunk review - one keyboard vocabulary, both surfaces. j/k/a/r/Ctrl+Enter/Ctrl+Backspace/Esc are identical in the batch Hunk Review panel (Ctrl+Shift+D, one file's hunks as cards) and the in-tab Diff Review panel (editor tab bar's diff icon) - only what Ctrl+Enter/Ctrl+Backspace map to changes per surface, because each has different actions available:
| Keys | Diff Review panel (in-tab) | Hunk Review panel (batch) |
|---|---|---|
Ctrl+Enter |
Keep all changes (writes nothing, marks the file kept) | Apply choices (needs every hunk decided) |
Ctrl+Backspace |
Undo all changes (reverts the whole file) | Reject All (no whole-file undo exists in this panel) |
Esc |
Close the review panel | Close the panel |
j / k |
Move focus to the next / previous hunk | same |
a / r |
Accept / reject the focused hunk | same |
Every hunk starts undecided in both. a/r mark the focused hunk, and pressing the same key again clears it. In the Diff Review tab, deciding the last hunk applies your choices automatically (accepted hunks stay, rejected hunks are reverted); in the batch panel, Apply choices becomes available once every hunk is decided. j/k move focus (and screen-reader focus) between hunks. Close (Esc) never changes the file: it stays as the agent wrote it. If the file was edited after the agent wrote it, nothing is overwritten: you are asked whether to reload the review, overwrite anyway, or cancel. The batch panel's Open in Diff Review button carries its current per-hunk decisions into the in-tab panel, so switching surfaces mid-review doesn't reset any toggling.
Ctrl+P only works in Code mode. Shift+Alt+F/F8/Shift+F8 require a focused editor. Ctrl+Shift+R reverts the file to disk when the editor is focused (undoable - a toast confirms) and opens the Research panel otherwise. Ctrl+F and Ctrl+Alt+F are Monaco native overlays - not intercepted by the app shell. Ctrl+H (Find and Replace) is the default Monaco binding on Windows but collides with "Hide Application" on macOS; use Ctrl+Alt+F instead for consistency across platforms.
Fleet: background session shortcuts
Fleet shortcuts only fire in Code mode unless noted.
| Keys | Action |
|---|---|
Ctrl+Shift+F |
Toggle Fleet panel |
Ctrl+Shift+N |
New background session (Code mode) / New chat session (Chat mode) |
Ctrl+Alt+N |
New background session (Code mode) / New chat session (Chat mode) |
Ctrl+Alt+1 – Ctrl+Alt+9 |
Switch to fleet session N |
Ctrl+Shift+W |
Close active fleet session (with confirmation) |
Ctrl+W closes an editor tab. Ctrl+Shift+W closes the active fleet session - the extra Shift is intentional to prevent accidental session termination.
Runs: shortcuts
Ctrl+Shift+U shows or hides Runs: the panel in the left group in Code mode, the Runs tab of the sidebar in Chat mode. (Ctrl+Shift+R is still the Research panel.) Inside the Runs list the keys work like any tree, and you only tab into it once.
| Keys | Action |
|---|---|
Ctrl+Shift+U |
Show or hide Runs |
↓ / ↑ |
Next / previous run, across sections |
Alt+↓ / Alt+↑ |
Next / previous section (Needs you, Working, Done, Recent) |
Home / End |
First / last run |
→ / ← |
Expand / collapse a run with sub-runs; on a child, ← goes to its parent |
Enter |
Open the run in the Agent panel (Code mode) or the chat (Chat mode) |
Space |
Expand or collapse the run, or the section when its header is focused |
A |
Go to the approval of a run that is waiting on one |
S |
Stop a working run |
M |
Mark a finished run as seen, without opening it |
/ |
Search runs (Esc clears it and returns to the list) |
Shift+F10 / Menu |
Open the run's context menu |
Esc |
Return to the editor (Code mode) or the composer (Chat mode) |
Letters typed quickly jump to a run whose title starts with them. A, S and M are commands when they start a word, and ordinary letters from the second character on, so a run called "Search docs" is still reachable.
Settings that belong to the view: ui.runs.collapsed (which sections you collapsed) and ui.runs.pinned (runs you pinned; pinned runs sort first in their section). Both are yours, not the project's.
FIM autocomplete (ghost text)
Fill-in-the-Middle completions appear as inline ghost text in the Monaco editor while you type.
| Keys | Action |
|---|---|
Tab |
Accept the full suggestion |
Ctrl+Right |
Accept one word at a time |
Esc |
Dismiss without accepting |
Completions trigger automatically after a short debounce. The FIM model is auto-detected from installed models; assign a specific model at Settings → Models & Providers → Models → My models → Where suggestions come from.
Models with native FIM tokens: qwen2.5-coder, codellama, deepseek-coder, codestral, starcoder, starcoder2, codegemma, stable-code. qwen3-coder uses prompt-injection fallback.
Tab and Ctrl+Right only accept ghost text when a suggestion is visible. When no suggestion is shown, Tab inserts a literal tab.
Terminal shortcuts
Panel control (work from any focus point)
| Keys | Action |
|---|---|
| `Ctrl+`` | Toggle terminal panel open/closed |
| `Ctrl+Shift+`` | Maximize / restore terminal panel |
Ctrl+Shift+T |
Open a new terminal tab (opens the terminal if closed) |
When the terminal has focus
| Keys | Action |
|---|---|
Ctrl+F |
Open terminal output search bar |
Ctrl+I |
Toggle AI Assist overlay (command generator) |
Ctrl+↑ |
Jump to previous command block (OSC 133 semantic marker) |
Ctrl+↓ |
Jump to next command block |
Inside the AI Assist overlay (Ctrl+I)
| Keys | Action |
|---|---|
Enter |
Run the generated command |
Tab |
Enter edit mode to modify the command before running |
Esc |
Close overlay without running |
↑ / ↓ |
Browse last 10 generated commands |
Ctrl+F in the terminal opens terminal output search - distinct from Ctrl+Shift+F (project file search). Ctrl+I and block-navigation only fire when the terminal has focus. The AI Assist generator scopes commands to the current working directory.
Slash commands - built-in
Type / in any chat or AI panel input. A autocomplete menu appears with all available commands.
| Command | What it does |
|---|---|
/export |
Export the current conversation as a Markdown file (Chat mode only; opens a native save dialog; asks first if the chat contains something that looks like a credential) |
/clear |
Clears the messages on screen. The session and the agent's context are kept |
/new |
Starts a fresh session with no context (Chat composer or Code-mode Agent panel) |
/help |
List the available slash commands (shown in a toast). |
/mode ask|plan|act |
Set the Agent panel's permission mode. Only affects the Agent panel - Research, Debug, and Advisor are always read-only. |
/compact |
Summarize older conversation history to free context space. Works in both Chat and Code mode. Shows a toast with the count of messages summarized. |
/preview [url] |
Open the Preview tab. No argument opens the port picker (3000 / 5173 / 8080 / 4200). /preview localhost:5173 jumps straight to that URL. |
/map |
Open the Bodega Map (file-dependency graph for the open project). Respects the ui.code_map_enabled setting. |
/reset and /model are not registered commands. Typing them shows a toast listing the actual available commands (the same list /help prints).
/export shows an info toast instead of exporting when used in Code mode.
Slash commands - skill triggers
Twelve built-in skills ship as SKILL.md files under the app's skills/ directory. Their triggers pass through to the backend LLM as structured workflow invocations - they're not handled client-side.
| Trigger | What it does |
|---|---|
/commit |
Stage changes and create a conventional git commit (requires shell tool; runs git status → diff → add → commit) |
/debug |
Trace an error, find root cause, suggest fix |
/decompose |
Turn an objective into a persistent goal with verifiable tasks |
/docs |
Write or update documentation for selected code |
/explain |
Explain what selected code does |
/generate |
Generate code from a description |
/onboard |
Tour an unfamiliar repo and save the findings as project knowledge |
/perf |
Profile and identify performance bottlenecks |
/refactor |
Clean up and restructure code |
/review |
Code review with Critical / Warnings / Suggestions breakdown (one file at a time, most recently changed) |
/security |
Scan for security issues |
/test |
Generate tests for selected code |
Built-in and user skills load from the backend at startup. Disabling a skill in Settings → Connections → Skills (Integrations group) removes its trigger from the autocomplete list. You can define custom skills there too; user-created skills live in ~/.bodega/skills/<name>/SKILL.md and are not trust-gated - they're yours.
Project skills require approval. A skill shipped inside a project's own .bodega/skills/ folder - one that arrived via git clone, say - does not load. It is skipped before its frontmatter is even parsed, so it is never registered and never shown to the model. Approval is keyed to the SHA-256 of the entire SKILL.md file, frontmatter and body, paired with that project's resolved path. So editing an approved skill re-prompts, and approving it in one checkout does not approve it in another. Approve at Settings → Connections → Skills → Project Skills (the block only appears when the open project has skills to show), or via the corner chip that appears on project open. From a shell: bodega skills trust to list, bodega skills approve <name> to approve. There is no "deny" - declining is just not approving.
Project skills are re-read on every turn, so the Reload button in Settings → Connections → Skills does not affect them; it rescans the built-in and ~/.bodega/skills directories only.
/review (the skill) is distinct from the Git panel "Review" button. The skill reads a recent project file; the button reviews the current git diff using your LLM.
Command Palette
- Press
Ctrl+Shift+Pto open. - Type any part of the action name - fuzzy matching works. For example,
ter maxmatches "Toggle Terminal Maximize". - Press
Enteror click an action to execute.Esccloses without acting.
Actions grouped by category:
- Navigation: Switch to Chat Mode (
Ctrl+1), Switch to Code Mode (Ctrl+2), Toggle Settings Panel (Ctrl+,), Show Usage Panel, Show Agents Panel - Terminal: Toggle Terminal (
Ctrl+\``), Toggle Terminal Maximize (Ctrl+Shift+`), New Terminal Tab (Ctrl+Shift+T`) - View: Toggle Sidebar (
Ctrl+B), Reload Window (Ctrl+R), Show Keyboard Shortcuts (Ctrl+/) - Panels: Debug Panel (
Ctrl+Shift+E), Toggle Bodega Panel (Ctrl+Shift+B), Toggle Fleet Panel (Ctrl+Shift+F) - Editor: Toggle File Explorer (no dedicated shortcut -
Ctrl+Btoggles the sidebar contextually), Close Active Editor Tab (Ctrl+W, confirms unsaved changes), Go to Line (Ctrl+G), Toggle Split Editor (Ctrl+\\) - Search: Search in Files (palette action -
Ctrl+Shift+Fbelongs to the Fleet panel), Go to File... (Ctrl+P) - Source Control: Open Source Control (
Ctrl+Shift+G)
Ctrl+Shift+B toggles the Bodega Panel and Ctrl+Shift+F toggles the Fleet panel - the palette's older "File Explorer"/"Search in Files" shortcut labels were corrected in the beta.27 audit. Ctrl+Shift+E is Debug Panel, not File Explorer.
Customizing shortcuts
Custom rebinding isn't supported yet - the bindings in these tables are fixed.
Settings → Appearance & Editor → Keyboard shortcuts is a searchable read-only reference of the same bindings. An earlier version of that panel offered a rebind flow, but the combinations it saved were never actually applied by the app - as of beta.27 the panel is honest about being view-only until a real keybinding engine ships.
Shortcuts handled at the OS level (Ctrl+C, Ctrl+V) are fixed by the platform either way.
Git panel: AI code review (beta.26)
The Git panel has a Review button that sends the current diff to your LLM and returns a structured review grouped under Critical / High / Suggestions headings.
- Open the Git panel with
Ctrl+Shift+Gor click the branch name in the status bar. - Click Review (in the panel header actions row, next to Generate and Stage All).
- Review output appears inline above the file list. Dismiss it with the X button.
The review uses the model assigned to the explain role (the same model used for code explanations in the editor). Large diffs are capped at 14,000 characters; a truncation note appears in the output if the diff is cut.
When the working tree is dirty, the review covers staged + unstaged changes (the pre-commit case). When the working tree is clean, it falls back to the branch-vs-base diff (the PR scope).
Requires an open project folder. Returns an error if the folder isn't a git repository or has no changes.
Fast Mode - skipping extended thinking
Fast Mode turns off extended thinking globally for models that support it (currently the Anthropic preset's models). It does not change the model - it removes the extended-thinking pre-pass so replies start sooner.
Enable: Fast in the composer's ⋯ More options menu. It only appears when the active model supports extended thinking.
The per-message reasoning control in the composer still wins. If you set reasoning to Low / Medium / High for a specific message, that overrides Fast Mode for that message only.
The setting key is llm.claude_fast_mode (boolean, default false). It has no effect on models that do not do extended thinking.
Custom agents (beta.26)
You can define named agents with a custom system prompt, pinned model, tool allowlist, read-only filesystem flag, and iteration cap.
Create an agent:
- Go to Settings → Agent → Custom agents.
- Click New Agent.
- Fill in: name, optional description, system prompt, model override (blank = active model), tool allowlist, read-only filesystem toggle, max iterations.
Activate an agent:
- In Code mode, the Agent panel header shows a profile picker (robot icon with the current agent name).
- Click it to see a dropdown with Default and your custom agents.
- Select one - it applies to the next message and persists until you switch back to Default.
- The picker is hidden when you have no custom agents.
The tool allowlist narrows available tools - it cannot grant access to tools not available to the default agent. Custom agents are distinct from the built-in skills (/commit, /debug, etc.), which are managed via Settings → Connections → Skills (Integrations group).
ACP server: Bodega as an agent (beta.26)
Bodega One can run as an ACP (Agent Client Protocol) server so external editors - like Zed - can drive it as an AI agent over stdio.
Start the server:
bodega --acp
Bodega starts in headless JSON-RPC mode on stdio. No Electron window appears.
Protocol methods: initialize (advertises capabilities + tool list), session/new (creates a session, confines the working directory), session/prompt (runs one agentic turn), session/cancel.
Connecting external ACP agents to Fleet: Settings → Connections → External coding agents (Integrations group). Each agent needs its binary installed and an API key (or subscription login for Cursor). The section shows install hints and key fields for each supported agent.
CWD confinement is enforced - session/new validates that the requested working directory is within your allowed projects directory.
Managed embedding server + GGUF picker (beta.26)
Bodega can manage the llama-server --embedding process automatically (port 8081), and the Embeddings settings show a dropdown of your installed GGUFs so you don't have to type a path.
Set up managed embeddings:
- Go to Settings → Prompts & Memory → Knowledge base → Advanced → Embeddings → Codebase index (or search "embeddings").
- Select llama.cpp as the provider.
- Enable Let Bodega manage the embedding server.
- Pick a GGUF from the dropdown - it lists everything installed via Models → llama.cpp → Discover. Or type a manual path in the text field below.
- Set the port (default 8081).
Bodega starts the server lazily on the first index build. If the model path is empty with managed mode on, Bodega points at any server you're already running.
Recommended embedding models: nomic-embed-text, BGE series.
The llama.cpp binary must be installed (Settings → Models & Providers → Models → My models tab → llama.cpp models) for managed mode to work. The embedding server (port 8081) and the chat llama-server (port 8080) are separate processes.
Bodega Map
Bodega Map is an interactive dependency graph of your codebase. Nodes are files; edges are imports. It runs in Code mode only.
Open the Map:
- Activity Bar (left sidebar) → Map icon
- Command Palette → "Open Codebase Map"
- Type
/mapin any AI panel input
Requires the Dockview layout engine (Settings → Appearance & Editor → Layout → Dockview). In Legacy layout, the Map falls back to an editor tab.
Interactions:
- Click a node to open the detail drawer (imports, exports, relationships).
- Explain this module in the drawer - your LLM writes a plain-English summary, cached by file content hash.
- Toolbar model picker - choose which model writes explanations (blank = active model).
- Generate Map button - bulk-explains all visible files (4 concurrently, with live progress and a cancel button).
- Ask the Map bar at the bottom - free-form questions answered via RAG over your codebase embeddings.
Staleness: amber dots on nodes mean the cached explanation is out of date (file content changed since last generation). The drawer badge shows the stale count.
"Ask the Map" uses two models: a chat model for the answer and an embeddings model for retrieval. Configure the embeddings model at Settings → Prompts & Memory → Knowledge base → Advanced → Embeddings → Codebase index. The first question triggers the index build, which may take a few seconds.
What the in-app cheat sheet covers
Press Ctrl+/ to open the Keyboard Shortcuts overlay. It shows four groups: General, Terminal, Editor (Code Mode), and Fleet - Background Sessions.
The overlay does not list AI panel shortcuts (Ctrl+L, Ctrl+Shift+R/E/A/I), slash commands, or the complete shortcut reference - those are covered here and in Settings → Appearance & Editor → Keyboard shortcuts.
In the CLI
The CLI has its own, separate reference: 30 slash commands in the REPL (/help or /? for the cheat-sheet) and a distinct set of bodega run/REPL flags (--mode, --model, --effort, --tier, --dual, --fallback, and more). None of the app's keyboard shortcuts here apply to the CLI, and none of its slash commands apply to the app - they're two different interfaces to the same backend, each with its own reference.
Keyboard shortcuts
| Keys | Action |
|---|---|
| Ctrl+1 | Switch to Chat mode |
| Ctrl+2 | Switch to Code mode |
| Ctrl+, | Toggle Settings panel |
| Ctrl+Shift+P | Command Palette |
| Ctrl+/ | Keyboard Shortcuts overlay |
| Ctrl+B | Toggle primary sidebar (chat list in Chat; file tree in Code) |
| Ctrl+Shift+B | Toggle Bodega Panel (right-hand AI column, Code mode) |
| Esc | Dismiss topmost overlay or panel |
| Ctrl+Enter | Start the draft in the background (composer focused; Code Mode and Chat Mode) |
| Alt+R | Open Send as… from the composer: send, start in background, start in parallel, make a loop |
| Ctrl+L | Open Agent panel (Code mode) |
| Ctrl+Shift+R | Open Research panel (Code mode) |
| Ctrl+Shift+E | Open Debug panel (Code mode) |
| Ctrl+Shift+A | Open Advisor panel (Code mode) |
| Ctrl+Shift+I | Switch to Context tab in Bodega Panel (Code mode) |
| Ctrl+Shift+D | Toggle Changes panel (Code) / Context Inspector (Chat) |
| Ctrl+S | Save current file |
| Ctrl+W | Close active editor tab |
| Ctrl+Tab | Next editor tab |
| Ctrl+Shift+Tab | Previous editor tab |
| Ctrl+\ | Toggle split editor |
| Ctrl+P | Quick File Open (Code mode) |
| Ctrl+G | Go to Line (Code mode) |
| Ctrl+F | Find in current file / terminal output search (when terminal focused) |
| Ctrl+Alt+F | Find and Replace |
| Ctrl+Shift+F | Toggle Fleet panel |
| Ctrl+D | Select next occurrence |
| Alt+← | Navigate back in file history |
| Alt+→ | Navigate forward in file history |
| Ctrl+K | Toggle Inline Command Bar |
| Ctrl+Shift+K | Fix Selected Code |
| Ctrl+Shift+G | Toggle Git panel |
| Alt+B | Toggle git blame annotations |
| Shift+Alt+F | Format Document |
| F8 | Go to Next Error (Code mode, editor focused) |
| Shift+F8 | Go to Previous Error (Code mode, editor focused) |
| Ctrl+= | Zoom editor font in (editor focused) |
| Ctrl+- | Zoom editor font out (editor focused) |
| Ctrl+0 | Reset editor font size (editor focused) |
| Ctrl+Enter | Keep all changes (Diff Review panel focused) |
| Ctrl+Backspace | Undo all changes (Diff Review panel focused) |
| Ctrl+` | Toggle terminal panel |
| Ctrl+Shift+` | Maximize / restore terminal panel |
| Ctrl+Shift+T | New terminal tab |
| Ctrl+I | Toggle terminal AI Assist overlay (terminal focus required) |
| Ctrl+↑ | Jump to previous command block (terminal focus required) |
| Ctrl+↓ | Jump to next command block (terminal focus required) |
| Tab | Accept full FIM ghost text suggestion |
| Ctrl+Right | Accept FIM suggestion one word at a time |
| Ctrl+Shift+N | New background session (Code) / New chat session (Chat) |
| Ctrl+Alt+N | New background session (Code) / New chat session (Chat) |
| Ctrl+Alt+1..9 | Switch to fleet session N |
| Ctrl+Shift+W | Close active fleet session |
This page mirrors the in-app docs hub for app version 1.0.0-beta.46. Found something unclear or out of date? Tell us on Discord. New here? Download the free beta and follow along.