whiskydumb

Haptic Bridge — Development skill for Claude Code

Development community

Local daemon that turns Claude Code / Codex lifecycle events (permission prompt, waiting for input, turn done) into haptic feedback on physical devices: DualSense, OpenShock, Lovense.

How to install Haptic Bridge

This entry records only its repository, not the path inside it, so there is no exact command to give. Open whiskydumb/haptic-bridge and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Haptic Bridge does

Local daemon that turns Claude Code / Codex lifecycle events (permission prompt, waiting for input, turn done) into haptic feedback on physical devices: DualSense, OpenShock, Lovense. Hooks first, MCP optional.

Alternatives in Development

  • Continuous Claude — Run Claude Code in a continuous loop, autonomously creating PRs, waiting for checks, and merging 1.3k ★
  • Herdrm — Native macOS console for herdr — all your coding agents and their live terminals, across devices 635 ★
  • The Library — A Meta-Skill for Private-First Distribution of Agentics (Skills, Agents, and Prompts) across your Agents, Devi 340 ★

README

haptic-bridge

Local daemon that turns coding-agent lifecycle events (Claude Code, Codex CLI) into haptic feedback on physical devices: "needs permission", "asks a question", "finished the turn".

Claude Code - hooks (http) ────┐
Codex CLI   - notify / hooks ──┤
any MCP client - haptic_pulse ─┤
manual - POST /event ──────────┤
                                ▼
            haptic-bridge  http://127.0.0.1:8787
            event → pattern mapping, cooldown, intensity cap, kill switch
                                │
          ┌──────────┬──────────┼──────────┬──────────┐
        mock     dualsense   openshock   lovense   (buttplug: planned)

setup

uv sync --all-extras
cp haptic-bridge.example.toml haptic-bridge.toml
uv run haptic-bridge serve

`haptic-bridge.toml` is git-ignored because it may carry tokens. Without a config file the daemon runs with built-in defaults and the `mock` backend only. `just` lists the project tasks.

agents

claude code

Add `http` hooks to `~/.claude/settings.json` (every project) or to `.claude/settings.json` of a single project, then restart Claude Code:

{
  "hooks": {
    "Notification": [
      {
        "matcher": "permission_prompt|idle_prompt|agent_needs_input|elicitation_dialog",
        "hooks": [{ "type": "http", "url": "http://127.0.0.1:8787/hook/claude", "timeout": 2 }]
      }
    ],
    "Stop": [
      { "hooks": [{ "type": "http", "url": "http://127.0.0.1:8787/hook/claude", "timeout": 2 }] }
    ]
  }
}

HTTP hooks post the hook payload as JSON and block until the daemon answers, so the daemon replies immediately and plays the pattern in the background.

codex cli

`notify` fires once per completed turn and passes the payload as the last argv element. Install the CLI on PATH (`uv tool install .` from this directory), then:

# ~/.codex/config.toml
notify = ["haptic-bridge", "codex-notify"]

Codex lifecycle hooks (`[features] hooks = true`) can pipe their stdin payl