vibe-haptic1.2.3
Haptic feedback from your coding agents
Untested on omp
This is a pi package. No one has reported whether it works on omp yet. If you try it, add your result below.
Reports 0
No reports yet.
Readme
Vibe Haptic ๐ซจ
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?
"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.
How It Works
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.
Installation
Claude Code
claude plugin marketplace add devxoul/vibe-haptic
claude plugin install vibe-haptic
Or within Claude Code:
/plugin marketplace add devxoul/vibe-haptic
/plugin install vibe-haptic
OpenCode
Add to your opencode.jsonc:
{
"plugins": [
"vibe-haptic@1.2.3"
]
}
pi
pi install npm:vibe-haptic
This also works with pi-based agents such as omo.
Configuration
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.
Configuration File
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 - pi:
~/.pi/agent/vibe-haptic.jsonor.pi/vibe-haptic.json(pi-based agents use their own config directory, e.g.~/.omo/agent/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
Events map agent actions to haptic patterns:
| Event | Trigger | Claude Code | OpenCode | pi |
|---|---|---|---|---|
stop |
Agent finishes and becomes idle | โ | โ | โ |
prompt |
Agent asks for input (select option, permission, etc.) | โ | โ |
Trigger Details
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 - pi: Triggered by the
agent_endevent (interactive sessions only)
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
Beat Patterns
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
Built-in Patterns
| 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 |
License
MIT