A Claude Code hook that captures your webcam after every response and adjusts its behavior based on your facial expression. If you look frustrated, it asks what went wrong. If you look happy, it keeps going.
Once installed, claude-vibe-check runs silently in the background. No extra commands, no config files to edit, no interruptions to your workflow.
Claude Code finishes a response. The "Stop" hook fires automatically, triggering claude-vibe-check.
A single frame is captured from your webcam using fswebcam, imagesnap, or ffmpeg, depending on your OS.
Your photo is analyzed either by Claude's vision model (online mode) or a local CV model like FER or HSEmotion (offline mode).
Based on the detected emotion, Claude adjusts its next message. Frustrated? It offers to fix things. Happy? It keeps rolling.
Choose between sending the photo to Claude for rich visual analysis or keeping everything local with a lightweight CV model.
Sends the captured photo directly to Claude's vision model. Claude sees your full expression, posture, and environment, giving it the richest possible context for its reaction.
Runs a local facial emotion recognition model on your machine. Your photo never leaves your computer. Supports two backends: FER (simple, Keras-based) and HSEmotion (faster, better accuracy, ONNX-based).
Each detected emotion triggers a different behavior in Claude's next response, making the interaction feel more natural and responsive.
Claude asks what went wrong and offers to fix or redo the changes. It becomes empathetic and constructive, focusing on understanding the issue.
Claude explains its reasoning more clearly and asks if you want a different approach. It walks through the logic step by step.
Claude notes the positive vibe and continues working normally. No interruption, just a brief acknowledgment that things look good.
Claude explains its reasoning and asks directly what you dislike about the approach, offering concrete alternatives.
Claude explains what it did and why, since the output might not have been what you expected. It checks if you want to continue in this direction.
Claude continues normally with no special reaction. A neutral expression means things are fine and no adjustment is needed.
Every offline vibe check is logged automatically. Run stats to see how your emotions shift across projects, time of day, and days of the week.
See the distribution of all detected emotions with visual bar charts and percentages.
Find out which projects make you happy and which ones make you frustrated. Each project is tracked separately.
Discover when you code best. Morning person or night owl, the data will tell you.
Track how your mood shifts day to day with a rolling seven-day view of your dominant emotions.
Here is what the setup and test flow looks like in your terminal.
Install claude-vibe-check globally with npm, then run setup. That is all it takes to wire it into Claude Code.
Install the package globally and run setup to add the hook to your Claude Code settings automatically.
This adds a "Stop" hook to ~/.claude/settings.json that fires after every Claude response.
You need at least one webcam capture tool installed on your system. claude-vibe-check will auto-detect whichever one is available.
If you want emotion detection to run locally without sending photos to Claude, install one of the Python backends.
Settings are stored in ~/.config/claude-vibe-check/config. You can also set them through environment variables.
The default cooldown is 60 seconds, which prevents claude-vibe-check from running on every single response during rapid back-and-forth.
| Command | Description |
|---|---|
| claude-vibe-check setup | Install the hook into Claude Code settings |
| claude-vibe-check uninstall | Remove the hook from Claude Code settings |
| claude-vibe-check test | Test webcam capture to make sure everything works |
| claude-vibe-check status | Show current installation status, mode, and detected tools |
| claude-vibe-check mode [online|offline] | Get or set the analysis mode |
| claude-vibe-check cooldown [seconds] | Get or set the minimum seconds between checks |
| claude-vibe-check stats [today|week|<project>] | Show vibe statistics, filterable by time or project |
| claude-vibe-check history clear | Clear all logged vibe history |
claude-vibe-check supports both major development platforms with multiple capture tool options for each.
Uses V4L2-based capture tools. Any standard USB or built-in webcam that shows up as /dev/video0 will work out of the box.
Uses AVFoundation for camera access. Works with the built-in FaceTime camera and most external USB webcams.