Haptic feedback from your coding agents.
Get tactile feedback when your AI agent completes tasks, encounters errors, or requests input β feel the rhythm of your coding session through your MacBook's trackpad.
"Why not just use system notifications?"
I tried that. Banners popping up, sounds dinging β it felt noisy and annoying. Every notification pulled my eyes away from what I was doing, broke my flow, and honestly just became another thing to dismiss.
I wanted something quieter. A subtle nudge that says "hey, I'm done" without screaming for attention. Something I could feel without having to look. (I'm the kind of person who always has Do Not Disturb on.)
That's what haptic feedback does β it's silent, ambient, and stays out of your way until you need it.
Modern MacBooks have a Force Touch trackpad that doesn't physically click. Instead, it uses a linear actuator (Taptic Engine) to simulate the sensation of a click through precise vibrations.
Vibe Haptic taps into macOS's private MultitouchSupport.framework to trigger these haptic actuations programmatically. When your AI agent finishes a task or needs attention, the trackpad vibrates with distinct patterns you can feel under your fingers.
claude plugin marketplace add devxoul/vibe-haptic
claude plugin install vibe-hapticOr within Claude Code:
/plugin marketplace add devxoul/vibe-haptic
/plugin install vibe-haptic
Add to your opencode.jsonc:
Everything works out of the box β just install and go. But if you want to tweak the patterns or map different events, here's how.
Create vibe-haptic.json in your config directory:
- Claude Code:
~/.claude/vibe-haptic.jsonor.claude/vibe-haptic.json - OpenCode:
~/.config/opencode/vibe-haptic.jsonor.opencode/vibe-haptic.json
{
"patterns": {
"success": { "beat": "6/1.5 6/0.8 4/0.5" },
"error": { "beat": "6/2.0 6/2.0 6/2.0" }
},
"events": {
"stop": "dopamine",
"prompt": "alert"
}
}Events map agent actions to haptic patterns:
| Event | Trigger | Claude Code | OpenCode |
|---|---|---|---|
stop |
Agent finishes and becomes idle | β | β |
prompt |
Agent asks for input (select option, permission, etc.) | β | β |
stop event β Fires when the agent completes its work:
- Claude Code: Triggered by the
Stophook event when the agent finishes responding - OpenCode: Triggered when session status changes to
idle
prompt event β Fires when the agent needs your attention:
- Claude Code: Triggered by
Notificationhook events (permission requests, tool approvals, etc.) - OpenCode: Triggered by
permission.updatedorquestion.askedevents
Haptic feedback is defined using a beat notation:
"6/0.8 4/1.0 6/0.5"
- Digits (3-6): Actuation strength β
3minimal,4medium,5weak,6strong /intensity: Optional intensity (0.0-2.0) β6/0.5= strong actuation at half intensity- Spaces: Pauses between taps (100ms per space)
Examples:
6 6 6β three strong taps with short pauses6/2.0 6/0.5β loud tap followed by soft tap66β rapid double tap (no pause)6 6β two taps with longer pause
| Pattern | Beat | Description |
|---|---|---|
vibe |
6/0.8 3/1.0 6/1.0 |
Signature rhythm (default for stop event) |
alert |
6/0.5 6/1.0 6/0.5 |
Attention pulse (default for prompt event) |
dopamine |
6666666 5/1.0 4/1.0 3/1.0 |
Reward cascade |
noise |
6543654365436543 |
Rapid texture |
MIT

{ "plugins": [ "vibe-haptic@1.1.0" ] }