Code Haptics
Feel your code. Get real-time haptic feedback on your Logitech device (MX Master, MX Creative Console, etc.) as you code in VS Code.
Features
Code Haptics connects VS Code to your Logitech device via a Loupedeck plugin, delivering tactile feedback for coding events — builds, errors, tests, git operations, Copilot activity, and more.
Haptic Events
Every event can be individually toggled on/off in Settings.
| Event |
Waveform |
Trigger |
| Crash |
angry_alert |
Terminal, task, or debug session exits with an error |
| Build Success |
happy_alert |
A build task completes successfully |
| Errors Appear |
subtle_collision |
New diagnostic errors appear in the active editor |
| Errors Cleared |
completed |
All diagnostic errors are resolved |
| Tests Pass |
happy_alert |
A test task succeeds |
| Tests Fail |
angry_alert |
A test task fails |
| Breakpoint Hit |
sharp_state_change |
Debugger stops at a breakpoint |
| Git Complete |
completed |
git push/pull/fetch/merge/rebase/clone finishes |
| Merge Conflict |
ringing |
A file with merge conflict markers is opened |
| File Saved |
subtle_collision |
Any file is saved (off by default) |
| Copilot Completed |
completed |
Copilot finishes a task (via LM tool) |
| Copilot Needs Input |
knock |
Copilot is waiting for user interaction (via LM tool) |
| Break Reminder |
wave |
Periodic Pomodoro-style reminder (off by default) |
Status Bar
A status bar item shows the connection state to the Loupedeck plugin:
- $(plug) Connected — click to open the menu
- $(debug-disconnect) Disconnected — click to reconnect
- $(sync~spin) Connecting... — attempting to connect
Copilot Integration
A Language Model Tool (#haptics) is registered so Copilot Agent mode can send haptic notifications when it completes a task or needs your attention. Add this to your instructions for best results:
Always call the codehaptics-notify tool when you finish a task or need user input.
Requirements
- Logitech device with haptic support (MX Master 4, MX Creative Console, etc.)
- Logi Options+ installed and running
- CodeHaptics Loupedeck Plugin installed (included in the
CodeHapticsPlugin folder of this repo)
Setup
Build and install the Loupedeck plugin:
cd CodeHapticsPlugin
dotnet build -c Debug
The build automatically creates a plugin link for Logi Options+.
Install the VS Code extension (during development, press F5 to launch the Extension Development Host).
The extension auto-connects on startup. Check the status bar for connection state.
Extension Settings
| Setting |
Default |
Description |
codeHaptics.port |
19876 |
WebSocket port for connecting to the plugin |
codeHaptics.events.crash |
true |
Vibrate on terminal/task/debug errors |
codeHaptics.events.buildSuccess |
true |
Vibrate on successful build |
codeHaptics.events.errorsAppear |
true |
Vibrate when errors appear in active editor |
codeHaptics.events.errorsCleared |
true |
Vibrate when all errors are resolved |
codeHaptics.events.testsPass |
true |
Vibrate when tests pass |
codeHaptics.events.testsFail |
true |
Vibrate when tests fail |
codeHaptics.events.breakpointHit |
true |
Vibrate when a breakpoint is hit |
codeHaptics.events.gitComplete |
true |
Vibrate when git operations complete |
codeHaptics.events.mergeConflict |
true |
Vibrate when merge conflicts are detected |
codeHaptics.events.fileSaved |
false |
Vibrate on file save (subtle, opt-in) |
codeHaptics.events.copilotCompleted |
true |
Vibrate when Copilot finishes |
codeHaptics.events.copilotNeedsInput |
true |
Vibrate when Copilot needs input |
codeHaptics.events.breakReminder |
false |
Periodic break reminder (Pomodoro) |
codeHaptics.breakReminderMinutes |
25 |
Minutes between break reminders |
Commands
- Code Haptics: Show Menu — Quick pick menu with reconnect and test options
- Code Haptics: Test Vibration — Send a test vibration to verify the connection
- Code Haptics: Reconnect — Manually reconnect to the plugin
Architecture
VS Code Extension ──WebSocket──▶ Loupedeck Plugin ──▶ Logitech Device
(TypeScript) (C# / .NET 8) (Haptic Motor)
The extension monitors VS Code events and sends JSON messages over a local WebSocket. The Loupedeck plugin receives them and raises haptic events through the Logi Actions SDK, which triggers the physical waveform on the connected device.
Known Issues
- The Copilot integration relies on Copilot Agent mode choosing to call the
#haptics tool. Adding an instruction to your profile helps ensure it's called consistently.
onDidEndTerminalShellExecution (for git detection) requires terminal shell integration to be enabled.
License
MIT