tapwithus/tap-web-sdk/tap-knob
Claude Code and agent skill by tapwithus/tap-web-sdk
- community
Checking that the SKILL.md file is still in the repository.
Build a virtual knob with TapSDKWeb2 - hold a pinch and twist the wrist to turn a value up or down (volume, brightness, zoom, scroll, color). Use for knob, dial, twist, rotate-to-adjust, slider, volume control, or continuous value control.
Install
npx vskill@latest install tapwithus/tap-web-sdk/tap-knobSKILL.md
Knob (pinch-hold + twist)
`TapSDKWeb2` only (framed firmware: TapXR developer firmware and TapBand). It needs raw air-gesture holds and IMU roll. This is an app recipe on those raw events, not an SDK click/drag/drop layer. iOS and Android add that processed layer; this Web SDK does not.
This is the same interaction as the Knob in the TAP_EV sandbox (https://tapwithus.github.io/TAP_EV/).
How it works
- The user holds a pinch:
AB_HOLD..AE_HOLD(codes 110-113). That grabs a knob. Each pinch is a separate knob, so one hand controls 4 values. - While the pinch is held, the wrist roll from IMU motion turns the knob. The roll at grab time is the reference. Every
stepDegof roll away from it is one step (+ or -). - The user relaxes the hand. After
releaseAfterconsecutiveNONE(100) packets, the knob is released. Waiting for several packets stops one noisy packet from dropping the grab.
Use the template
Copy scripts/knob.ts. KnobTracker is pure logic, with no Bluetooth. It is easy to test and reuse.
onGesture(code)returns"start","release", ornull.onRoll(roll)returns signed int steps (0 when idle).activeis the knob index 0-3 (AB, AC, AD, AE) ornull.
Required device setup after connect() and after you register callbacks. connect() already started notifications. There is no start().
If connect() returns TapSDKWeb (classic firmware), tell the user this recipe needs framed firmware (TapSDKWeb2): TapXR developer firmware, or TapBand when it ships. Do not say the device is unsupported.
Wiring:
Tuning
| Setting | Default | Effect | |
|---|---|---|---|
stepDeg | 1 (template uses 2) | Degrees of roll per step. Larger = slower, more precise. 1-2 for fine values, 5-10 for menu items. | |
releaseAfter | 4 | NONE packets before release. Raise it if the knob drops while still pinching. |
- If the direction feels inverted, use
-steps. - Give a short haptic on grab (
sendVibrationSequence([40])) and optionally a tick every N steps. Do not buzz on every step. - Clamp values (
Math.max(0, Math.min(100, v))). - Roll wraps at +/-180.
wrapDegreeshandles crossing it.
Ideas
- Four properties of one object on the page: AB = size, AC = brightness, AD = opacity, AE = roundness (what the TAP_EV cube sandbox does).
- Scroll a list: one step = one item, with
stepDeg = 8. - The page cannot change the OS volume. Change a value on the page, or play louder Web Audio.
See also tap-dpad (pinch-hold that chooses between rotate and drag) and tap-vision-models (gesture codes).
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingplugins/tap-web-sdk/skills/tap-knob/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/tapwithus/tap-web-sdk/tap-knob)