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) |
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.
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
Every hunk starts accepted, so Ctrl+Enter with no j/k/a/r presses keeps the whole file exactly as before - hunk toggling is opt-in. j/k/a/r only apply while the diff has more than one hunk to review.
| Keys | Action |
|---|---|
Ctrl+Enter |
Keep the change (only the accepted hunks, if any were toggled) |
Ctrl+Backspace |
Undo the change (always reverts the whole file, ignoring hunk toggles) |
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+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 the change (only accepted hunks, if toggled) | Apply Changes (write accepted hunks to disk) |
Ctrl+Backspace |
Undo - reverts the whole file, ignoring hunk toggles | 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 accepted in both, so Ctrl+Enter with no j/k/a/r presses keeps/applies the whole file exactly as before - hunk toggling is opt-in. j/k/a/r only apply while the diff has more than one hunk to review. 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.
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 → My Models → FIM.
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) |
/clear |
Clears the input field |
/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 → 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 → 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 → 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 → Workspace → Keybindings (visible when Show advanced settings is enabled) 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: the Fast toggle in the message composer, next to the reasoning control. 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 → Custom Agents (AI Behavior group - always visible, no advanced toggle needed).
- 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 → 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 → ACP 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 → Models and scroll to the Codebase Embeddings section (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 → llama.cpp) 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 → 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 → Models → Codebase Embeddings. 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 → Workspace → Keybindings.
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+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 the change (Diff Review panel focused) |
| Ctrl+Backspace | Undo the change (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.41. Found something unclear or out of date? Tell us on Discord. New here? Download the free beta and follow along.