smithery.ai

vibereps

Exercise tracker for Claude Code. Setup, test, add exercises, tune detection. Launches pose-detection UI when Claude edits files.

First seen Apr 2, 2026

Installation

$ npx skills add https://smithery.ai

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery.ai · top by installs.

npx skills add https://smithery.ai

Browse all from smithery.ai

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Skill metadata

Parsed from SKILL.md frontmatter.

Allowed toolsRead, Write, Edit, AskUserQuestion, Bash, Glob, Grep
Declared agents claude-code

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 7,414 B
  • docs SUMMARY.md 145 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 1 installs

SKILL.md

Vibereps

Exercise tracker for Claude Code. Determine what the user needs based on context:

User Intent Action
First time / "setup" / "install" → Setup Flow
"test" / "launch" / "run" → Test Tracker
"add exercise" / "custom" / "new exercise" → Add Exercise
"not counting" / "sensitivity" / "threshold" / "tune" → Tune Detection
"pause" / "disable" / "stop" / "break" → Pause/Resume
General question → Overview

Overview

Movement breaks while you code. When Claude edits files, vibereps launches a pose-detection exercise UI. Do a few squats or stretches while Claude works, then get notified when it's ready.

Supported exercises:

  • Standing: squats, jumpingjacks, calfraises, pushups, highknees, standingcrunches, sidestretches, torsotwists, armcircles
  • Seated: shouldershrugs, necktilts, neck_rotations

All pose detection happens locally via MediaPipe. No video data transmitted.


Setup Flow

Step 1: Choose Installation Method

Use AskUserQuestion:

Question: "How would you like to set up vibereps?"
Header: "Install"
Options:
- "Run installer (Recommended)": "Downloads files, installs menubar app, configures hooks automatically"
- "Manual configuration": "I already have vibereps files, just configure my hooks"

If "Run installer":

curl -fsSL https://raw.githubusercontent.com/Flow-Club/vibereps/main/install.sh | bash

Then show summary and done.

If "Manual configuration": Continue below.

Step 2: Ask Exercise Mode

Question: "What type of exercises would you like?"
Header: "Mode"
Options:
- "Standing & Seated (Recommended)": "Full variety - squats, jumping jacks, plus desk-friendly neck stretches"
- "Standing only": "Active exercises - squats, jumping jacks, push-ups, calf raises"
- "Seated only": "Desk-friendly - shoulder shrugs, neck stretches"

Step 3: Select Exercises

Use AskUserQuestion with MultiSelect: true. Show exercises based on mode:

Standing: squats, jumpingjacks, calfraises, standingcrunches, sidestretches, pushups, highknees, torsotwists, arm_circles

Seated: shouldershrugs, necktilts, neck_rotations

Step 4: Find Install Location

if [[ -f "$HOME/.vibereps/vibereps.py" ]]; then
    echo "$HOME/.vibereps"
else
    echo "$(pwd)"
fi

Step 5: Configure Hooks

Update ~/.claude/settings.json:

{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Write|Edit|MultiEdit",
      "hooks": [{
        "type": "command",
        "command": "VIBEREPS_EXERCISES={exercises} {vibereps_dir}/vibereps.py",
        "async": true
      }]
    }],
    "Notification": [{
      "matcher": "idle_prompt|permission_prompt",
      "hooks": [{
        "type": "command",
        "command": "{vibereps_dir}/vibereps.py",
        "async": true
      }]
    }]
  }
}

Replace {vibereps_dir} with full path (not ~) and {exercises} with comma-separated list.

Step 6: Summary

Setup complete!

How it works:
1. Claude edits a file → Exercise tracker launches
2. Do a quick exercise while Claude works
3. Get notified when Claude is ready!

Test Tracker

Launch in quick mode (exercises while Claude works):

pkill -f "vibereps.py" 2>/dev/null
~/.vibereps/vibereps.py user_prompt_submit '{}'

Launch in normal mode (after task complete):

pkill -f "vibereps.py" 2>/dev/null
~/.vibereps/vibereps.py task_complete '{}'

With specific exercises:

VIBEREPS_EXERCISES=squats,jumping_jacks ~/.vibereps/vibereps.py user_prompt_submit '{}'

Kill tracker:

pkill -f "vibereps.py"

Check if running:

lsof -i :8765

Add Exercise

1. Choose detection type

Type Use For Example
angle Joint angle changes squats, pushups
height_baseline Vertical movement from baseline calf raises
height_relative Position relative to reference jumping jacks
tilt Torso lean side stretches
distance Body parts approaching standing crunches
width_ratio Shoulder/hip width ratio torso twists
quadrant_tracking Circular motion arm circles

2. MediaPipe Landmark IDs

  • Shoulders: 11 (left), 12 (right)
  • Elbows: 13 (left), 14 (right)
  • Wrists: 15 (left), 16 (right)
  • Hips: 23 (left), 24 (right)
  • Knees: 25 (left), 26 (right)
  • Ankles: 27 (left), 28 (right)

3. Create JSON config

Create exercises/{exercise_name}.json:

{
  "id": "squats",
  "name": "Squats",
  "description": "Strengthens legs",
  "category": "strength",
  "reps": { "normal": 10, "quick": 5 },
  "detection": {
    "type": "angle",
    "landmarks": {
      "joint": [23, 25, 27],
      "joint_alt": [24, 26, 28]
    },
    "thresholds": { "down": 120, "up": 150 }
  },
  "instructions": {
    "ready": "Squat down below {down}°",
    "down": "Good! Now stand up"
  }
}

4. Test

~/.vibereps/vibereps.py user_prompt_submit '{}'

Tune Detection

Common Issues

Problem Likely Cause Fix
Not counting reps Thresholds too strict Lower down threshold or raise up threshold
Double counting Thresholds too loose Tighten thresholds, add hysteresis
Counts on wrong motion Wrong landmarks Check landmark IDs match exercise
Works for some people Fixed thresholds Use body-relative thresholds

Threshold Locations

JSON configs (preferred): exercises/*.json → detection.thresholds

Legacy functions in exercise_ui.html:

  • detectLegacySquat, detectLegacyPushup, etc.

Testing Changes

  1. Edit threshold in JSON
  2. Restart tracker: ~/.vibereps/vibereps.py userpromptsubmit '{}'
  3. Watch status text for live angle/distance values
  4. Adjust based on state transitions

Both-sides Averaging

For angle-based exercises, use joint_alt to average both sides:

"landmarks": {
  "joint": [23, 25, 27],
  "joint_alt": [24, 26, 28]
}

Pause/Resume

Temporarily disable vibereps until a specified time.

Pause Until End of Day (default)

~/.vibereps/vibereps.py --pause

Pause Until Specific Time

# ISO format timestamp
~/.vibereps/vibereps.py --pause "2026-01-30T18:00:00"

Resume

~/.vibereps/vibereps.py --resume

Check Status

~/.vibereps/vibereps.py --status

Via Menubar

If using the VibeReps menubar app, click the tray icon and select:

  • "Pause Until End of Day" to pause
  • "Resume VibeReps" to resume (shown when paused)

Via HTTP API (Electron app)

# Check pause status
curl http://localhost:8800/api/pause

# Pause until end of day
curl -X POST http://localhost:8800/api/pause

# Pause until specific time
curl -X POST http://localhost:8800/api/pause \
  -H "Content-Type: application/json" \
  -d '{"until": "2026-01-30T18:00:00"}'

# Resume
curl -X POST http://localhost:8800/api/resume

Links