Uthere — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Uthere (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Camera-based presence detection for Claude Code. Uses your webcam to check if you're sitting at your computer.
Two components:
is_user_present tool that Claude can call anytime to check if you're thereUses MediaPipe BlazeFace for fast, lightweight face detection. Works well with glasses, varied lighting, and different angles. The model (~200KB) is downloaded automatically on first run.
Requires Python 3.11+ and uv.
git clone https://github.com/odfalik/uthere.git
cd uthere
uv syncOn macOS, your terminal app needs camera access. Go to System Settings > Privacy & Security > Camera and enable it for your terminal (Terminal, iTerm2, etc).
Add either or both of the following to your Claude Code settings file (~/.claude/settings.json).
Gives Claude a tool it can call to check if you're at your desk.
{
"mcpServers": {
"uthere": {
"command": "uv",
"args": ["--directory", "/path/to/uthere", "run", "python", "-m", "uthere.server"]
}
}
}Prevents Claude from stopping when you're away. If Claude finishes a response and no face is detected, it gets a message telling it to keep going. A 60-second cooldown prevents infinite loops.
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "uv --directory /path/to/uthere run python -m uthere.hook",
"timeout": 15
}
]
}
]
}
}All configuration is through environment variables. Set them in your shell profile or in Claude Code's env settings.
| Variable | Default | Description |
|---|---|---|
UTHERE_AWAY_MESSAGE | "No face detected. User appears to be away..." | MCP tool message when no face is detected |
UTHERE_PRESENT_MESSAGE | "User is at their computer." | MCP tool message when face is detected |
UTHERE_HOOK_MESSAGE | "The user is not at their computer right now..." | Message sent to the agent when the stop hook blocks |
Example using Claude Code's env settings:
{
"env": {
"UTHERE_AWAY_MESSAGE": "User is away. Send them a message on Discord.",
"UTHERE_HOOK_MESSAGE": "User is AFK. Keep working, ping them on Discord if stuck."
}
}true if a face is found in any frameThe whole check takes about 1-2 seconds. The camera is released immediately after each check.
MIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.