Skip to content

Flow-Club/vibereps

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

42 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Vibe Reps

Tend to your quads while you tend to your Claudes.

Do exercises and think a little yourself while you wait for Claude.

"It's the era of tending to your Claudes." β€” Boris Cherny, creator of Claude Code, on Greg Isenberg's podcast

xkcd: Waiting for Claude
Based on xkcd #303 by Randall Munroe (CC BY-NC 2.5)


πŸš€ One-Line Install

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

Then restart Claude Code and run /setup-vibereps to choose your exercises.

Alternative: Install from local clone
git clone https://github.com/Flow-Club/vibereps.git
cd vibereps
./install.sh
Uninstall
~/.vibereps/install.sh --uninstall

πŸ–₯️ Menubar App (Electron)

For a more integrated experience, use the VibeReps menubar app:

  • Always-on menubar presence with exercise/usage stats
  • Random exercise auto-selection
  • Native desktop notifications
  • Multi-instance Claude session tracking
  • Works offline (bundled MediaPipe)

Install Menubar App

cd electron
./install.sh

This will:

  1. Build the native macOS app
  2. Install to /Applications
  3. Optionally configure Claude Code hooks

Or build a distributable DMG:

cd electron
npm install
npm run build:dmg
# Output: electron/dist/VibeReps-1.0.0.dmg
Menubar App Features
  • Stats in menu: Today's reps and Claude Code usage at a glance
  • Auto-refresh: Stats update after each exercise
  • Random exercise: Opens with a random exercise (quick mode)
  • Session tracking: Tracks multiple Claude instances
  • Start at login: Add to Login Items for always-on tracking

🎯 How It Works

The workflow: Claude edits a file β†’ Exercise until Claude is done β†’ Get notified when ready

You: "Hey Claude, refactor this code"
    ↓
πŸ‹οΈ Exercise tracker launches
    ↓
You exercise ← β†’ Claude processes your request
    ↓
Exercise complete β†’ "⏳ Claude is working..."
    ↓
Claude: "Here's your refactored code"
    ↓
πŸ”” Desktop notification: "Claude is ready!"
    ↓
You return to check the response
Manual setup (if not using installer)

Add to ~/.claude/settings.json:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit|MultiEdit",
        "hooks": [
          {
            "type": "command",
            "command": "VIBEREPS_EXERCISES=squats,jumping_jacks,standing_crunches,calf_raises,side_stretches /path/to/exercise_tracker.py post_tool_use '{}'",
            "async": true
          }
        ]
      }
    ],
    "Notification": [
      {
        "matcher": "idle_prompt|permission_prompt",
        "hooks": [
          {
            "type": "command",
            "command": "/path/to/notify_complete.py '{}'",
            "async": true
          }
        ]
      }
    ]
  }
}

πŸ‹οΈ Features

  • Real-time pose detection using MediaPipe AI
  • Stand-up verification - ensures you're fully visible before starting
  • 13 exercise types including:
    • Squats, push-ups, jumping jacks
    • Standing crunches, calf raises, side stretches
    • High knees, torso twists, arm circles
    • Shoulder shrugs, neck rotations, neck tilts (posture correction)
  • Two modes:
    • Quick mode: Keep exercising while Claude works ⚑
    • Normal mode: 10+ reps for breaks
  • Desktop notifications when Claude is ready
  • No installation required - uses Python standard library
  • Privacy-focused - all video processing happens locally in browser

πŸ“‹ Requirements

Browser Version:

  • Python 3 (standard library only!)
  • Modern web browser (Chrome, Firefox, Safari)
  • Webcam
  • Internet connection (for MediaPipe CDN)

Menubar App (Electron):

  • macOS 10.15+
  • Node.js 18+ (for building)
  • Webcam
  • No internet required (MediaPipe bundled)

πŸ”§ Configuration

Environment Variables (Optional)

# Choose which exercises to use (comma-separated, random selection each time)
export VIBEREPS_EXERCISES=squats,jumping_jacks   # Only squats and jumping jacks
export VIBEREPS_EXERCISES=squats,pushups,jumping_jacks,standing_crunches,calf_raises,side_stretches  # All exercises

# --dangerously-skip-leg-day (filters out squats, calf raises, high knees, jumping jacks)
export VIBEREPS_DANGEROUSLY_SKIP_LEG_DAY=1

# Remote VibeReps server (optional)
export VIBEREPS_API_URL=https://your-server.com
export VIBEREPS_API_KEY=your_api_key

# Disable tracking entirely
export VIBEREPS_DISABLED=1

# UI mode (for non-interactive install)
export VIBEREPS_UI_MODE=electron  # or webapp

# Trigger mode
export VIBEREPS_TRIGGER_MODE=edit-only  # or prompt

If VIBEREPS_EXERCISES is set, the tracker will randomly pick one exercise from the list and auto-start it (no manual selection needed).

Customize Exercise Reps

Edit exercise_ui.html to change target reps:

let targetReps = {squats: 10, pushups: 10, jumping_jacks: 20, standing_crunches: 10, calf_raises: 15, side_stretches: 10};      // Normal mode
let quickModeReps = {squats: 5, pushups: 5, jumping_jacks: 10, standing_crunches: 5, calf_raises: 8, side_stretches: 6};     // Quick mode

Change Detection Sensitivity

Adjust angle thresholds in exercise_ui.html (in the detection functions):

// Example: Make squats require deeper depth
if (angle < 80 && exerciseState !== 'down') {  // Default: 100

πŸ§ͺ Testing

# Test quick mode with specific exercises
VIBEREPS_EXERCISES=squats,standing_crunches ./exercise_tracker.py post_tool_use '{}'

# Test notification (run in another terminal while tracker is open)
./notify_complete.py '{}'

# Test normal mode
./exercise_tracker.py task_complete '{}'

🚨 Troubleshooting

Hooks not triggering?

# Check hooks are registered
/hooks list

# Make scripts executable
chmod +x exercise_tracker.py notify_complete.py

# Verify paths are correct (use absolute paths)
which python3  # Use this path if needed

Camera permission denied?

  • Grant permission when browser prompts
  • macOS: System Preferences > Security & Privacy > Camera
  • Browser settings: Check camera permissions for localhost

Exercises not detecting?

  • Ensure good lighting
  • Position camera to see full body (head to feet)
  • Stand 3-6 feet from camera
  • Check browser console (F12) for errors

Desktop notifications not showing?

  • Grant notification permission when prompted
  • Check browser notification settings
  • Check system notification preferences

Menubar app camera not working?

  • Check System Settings > Privacy & Security > Camera
  • Ensure VibeReps has camera permission
  • Try: tccutil reset Camera com.vibereps.app

Menubar app not showing stats?

  • Click "Refresh Stats" in the menu
  • Ensure exercises are being logged to ~/.vibereps/exercises.jsonl
  • For Claude usage, ensure ccusage is installed: npm install -g ccusage

πŸ€– Claude Code Skills

VibeReps includes built-in skills you can run in Claude Code:

Command Description
/setup-vibereps Interactive setup wizard - customize exercises and triggers
/test-tracker Launch, restart, or test the exercise tracker
/add-exercise Add a new exercise type with pose detection
/tune-detection Adjust detection thresholds if reps aren't counting correctly

Example: After installing, run /setup-vibereps in Claude Code to pick your preferred exercises.

πŸ“Š Usage Statistics

Track your Claude Code usage alongside exercise data with vibereps-usage.py:

./vibereps-usage.py

vibereps-usage demo

This combines ccusage output with your exercise log into a single table:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Date       β”‚ Models                                β”‚     Input β”‚    Output β”‚ Cache Create  β”‚   Cache Read β”‚ Total Tokens  β”‚        Cost β”‚ Exercises                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 2026-01-27 β”‚ - opus-4-5                            β”‚   890,234 β”‚    45,678 β”‚     1,234,567 β”‚    8,901,234 β”‚    11,071,713 β”‚     $12.34  β”‚ 45 Squats, 30 Jumping     β”‚
β”‚            β”‚ - sonnet-4-5                          β”‚           β”‚           β”‚               β”‚              β”‚               β”‚             β”‚ Jacks, 20 Calf Raises     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 2026-01-28 β”‚ - opus-4-5                            β”‚   456,789 β”‚    23,456 β”‚       567,890 β”‚    4,567,890 β”‚     5,616,025 β”‚      $6.78  β”‚ 25 Squats, 15 Standing    β”‚
β”‚            β”‚                                       β”‚           β”‚           β”‚               β”‚              β”‚               β”‚             β”‚ Crunches                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Total      β”‚                                       β”‚ 1,347,023 β”‚    69,134 β”‚     1,802,457 β”‚   13,469,124 β”‚    16,687,738 β”‚     $19.12  β”‚ 70 Squats, 30 Jumping     β”‚
β”‚            β”‚                                       β”‚           β”‚           β”‚               β”‚              β”‚               β”‚             β”‚ Jacks, 20 Calf Raises,    β”‚
β”‚            β”‚                                       β”‚           β”‚           β”‚               β”‚              β”‚               β”‚             β”‚ 15 Standing Crunches      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Options

# Filter by date range (passed to ccusage)
./vibereps-usage.py --since 2026-01-01
./vibereps-usage.py --since 2026-01-20 --until 2026-01-27

# Show only exercises (no Claude usage)
./vibereps-usage.py --exercises-only

Requirements

  • ccusage: npm install -g ccusage
  • Exercise data logged to ~/.vibereps/exercises.jsonl (automatic when using hooks)

πŸ“š More Info

  • CLAUDE.md - Technical architecture, remote server setup, and monitoring stack
  • exercise_ui.html - UI and pose detection logic (customize reps and sensitivity here)
  • server/ - Remote server for multi-user stats, leaderboards, and MCP integration

πŸ’‘ Tips

  • Too easy? Increase reps in quick mode
  • Too hard? Decrease reps or choose easier exercises
  • Want variety? The tracker suggests exercises you haven't done recently
  • Track progress? Set up the MCP server for stats and streaks

Stay healthy and keep coding! πŸ’ͺπŸš€

About

Get jacked before AI takes your job

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •