ToyBridge

v1.0.0

Control any BLE toy that has been reverse-engineered and connected via the ToyBridge server. Calls a local HTTP API to send vibrate/stop commands. Requires t...

0· 279· 1 versions· 0 current· 0 all-time· Updated 11h ago· MIT-0

Install

openclaw skills install toybridge

ToyBridge — Universal BLE Toy Control

Control any BLE toy through OpenClaw, as long as you have the ToyBridge server running.

This skill is for devices that are not supported by Buttplug.io/Intiface — devices with proprietary or unknown protocols that you've reverse-engineered yourself using the ToyBridge toolkit.

If your device IS supported by Buttplug.io, use the intiface-control skill instead — it's easier.


Prerequisites

  1. You've reverse-engineered your device's BLE protocol using ToyBridge
  2. You've configured 4-bridge/ble_worker.py for your device
  3. The ToyBridge server is running: uv run 4-bridge/server.py

See the full setup guide for step-by-step instructions.


Commands the agent will use

Vibrate at intensity

curl -s -X POST http://host.docker.internal:8888/vibrate \
  -H "Content-Type: application/json" \
  -d '{"intensity": 60}'

intensity: 0–100 (0 = stop)

Stop immediately

curl -s -X POST http://host.docker.internal:8888/stop

Check status

curl -s http://host.docker.internal:8888/status

If OpenClaw runs natively (not in Docker), replace host.docker.internal with localhost.


Intensity guide

RangeFeel
1–20Gentle
30–50Medium
60–80Strong
90–100Maximum

Preset patterns

PatternWhat it does
pulseBursts of 80%, 5 times
waveRamp up 20→100%, then back down, x2
tease30% → 70% → 100%, escalating, then stop

To run a pattern:

curl -s -X POST http://host.docker.internal:8888/vibrate \
  -H "Content-Type: application/json" \
  -d '{"pattern": "wave"}'

Agent rules

  • Always stop (intensity 0) after a timed session unless user says to keep going
  • Do not use the notify tool — use bash with curl
  • Replace host.docker.internal with localhost if OpenClaw is not in Docker

Troubleshooting

ProblemFix
connection refusedMake sure uv run 4-bridge/server.py is running
Device doesn't respondCheck your device config in ble_worker.py
Wrong intensityValues are clamped to 0–100

Version tags

latestvk971btewzmq5f1b1tq2vjajnjs82g2kb

Runtime requirements

OSmacOS