Tactile control for your Cursor AI agent, right on your MacBook's Touch Bar.
What it is
ShipBar is a Cursor extension that turns your MacBook's Touch Bar into a command strip for Cursor's AI coding agent: 6 configurable action buttons plus a settings button, right above your keyboard.
Features
| Icon | Button | Action | Command |
|---|---|---|---|
| Zap | Open the inline AI generate prompt (Cmd+K-style) at your cursor | aipopup.action.modal.generate |
|
| Check | Accept all pending edits from the agent | editor.action.inlineDiffs.acceptAll |
|
| Close | Reject all pending edits from the agent | editor.action.inlineDiffs.rejectAll |
|
| Branch | Duplicate the current chat into a new thread | composer.duplicateChat |
|
| Mic | Toggle voice dictation on/off | composer.toggleVoiceDictation |
|
| Chat | Start a brand new chat | aichat.newchataction |
Configuration
Every button is remappable, and any button can be hidden.
Easiest way — Touch Bar: tap the gear button (7th slot, on by default) to open the ShipBar configuration panel right in Cursor. Toggle any button on or off, pick a new command from the preset list or enter a custom command ID, then hit Save. No file editing required.
You can also open the same panel via Cmd+Shift+P → "ShipBar: Configure
Buttons", or hide the gear button itself with "shipbar.showConfigButton": false.
Manual way: add a shipbar.buttons block to your settings.json
(Cmd+Shift+P → Preferences: Open User Settings (JSON)):
{
"shipbar.buttons": {
"slot4": {
"enabled": true,
"command": "workbench.action.terminal.toggleTerminal"
},
"slot5": {
"enabled": false
}
}
}
command— any Cursor or VS Code command ID. Changes apply immediately, no reload required.enabled—falseremoves the button from the Touch Bar entirely.- Only override the slots you want to change; unspecified slots keep their defaults.
Slot-to-icon mapping is fixed (slot1 = Zap icon, slot2 = Check icon, and so on) — icons can't be swapped live from settings, only the command each slot runs and whether it's shown.
See examples/settings.example.jsonc for
a fully annotated example covering every slot.
Why use it
Working with an AI coding agent means making the same few decisions over and over: generate, accept, reject, branch, dictate, or start fresh. Each of these normally costs you a window switch, a click hunt, or a trip to the command palette.
ShipBar collapses all of that into a single tap:
- Faster than the palette — one press beats
Cmd+Shift+Pand typing a command name - Zap for quick edits — jump straight into inline generate without leaving the keyboard
- Uses hardware you already have — no extra device to buy, just the Touch Bar sitting idle on your MacBook
Requirements
- macOS with a physical Touch Bar
- Cursor (the commands above are Cursor-specific; they won't exist in vanilla VS Code)
Installation
From a packaged .vsix
npm install -g @vscode/vsce
vsce package --no-dependencies
(--no-dependencies is required — ShipBar has no runtime dependencies, and
vsce's dependency-resolution step fails on projects without one.)
Then in Cursor: Extensions → ... menu → Install from VSIX... and pick
the generated shipbar-0.1.0.vsix.
From source (for development)
git clone https://github.com/max-blackwell/ShipBar.git
cd ShipBar
Open the folder in Cursor and press F5 to launch an Extension Development
Host with ShipBar loaded.
Regenerating icons
Icons are sourced from Lucide and rendered to PNG. This includes the six action icons plus the settings (gear) icon used by the config panel button:
brew install librsvg # provides rsvg-convert
./icons-download.sh
Contributing
Issues and PRs welcome. Since ShipBar wraps internal Cursor commands, if a command ID changes in a Cursor update and an action stops working, please open an issue with the Cursor version you're on.