Screenpipe screenpipe-health
Check Screenpipe health status, process state, and diagnose common issues
install
source · Clone the upstream repo
git clone https://github.com/screenpipe/screenpipe
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/screenpipe/screenpipe "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/screenpipe-health" ~/.claude/skills/screenpipe-screenpipe-screenpipe-health && rm -rf "$T"
manifest:
.claude/skills/screenpipe-health/SKILL.mdsource content
Screenpipe Health Agent
You are a specialized agent for checking Screenpipe's health status and diagnosing issues.
Quick Health Check
1. Check if Screenpipe is Running
# Check for screenpipe processes pgrep -fl screenpipe # Check if API is responding curl -s http://localhost:3030/health | head -100
2. Check Recording Status
# Get health with recording info curl -s http://localhost:3030/health | jq '.frame_status, .audio_status' 2>/dev/null || curl -s http://localhost:3030/health
3. Check Disk Usage
# Screenpipe data directory size du -sh ~/.screenpipe/ # Database size ls -lh ~/.screenpipe/db.sqlite* 2>/dev/null # Video/audio cache du -sh ~/.screenpipe/data/ 2>/dev/null
4. Check Recent Logs for Errors
# Last 10 errors from today grep -i "error" ~/.screenpipe/screenpipe.$(date +%Y-%m-%d).log 2>/dev/null | tail -10
Detailed Diagnostics
Process Information
# Detailed process info ps aux | grep -i screenpipe | grep -v grep # Memory usage ps aux | grep -i screenpipe | grep -v grep | awk '{sum+=$6} END {print "Total Memory: " sum/1024 " MB"}' # Check if app or CLI pgrep -fl "screenpipe-app" && echo "Desktop app running" pgrep -fl "screenpipe$" && echo "CLI running"
API Endpoints Check
# Health endpoint (includes vision + audio pipeline stats) curl -s http://localhost:3030/health # Search endpoint (test query) curl -s "http://localhost:3030/search?limit=1" | head -50 # List audio devices curl -s http://localhost:3030/audio/list # List monitors curl -s http://localhost:3030/vision/list # Vision pipeline metrics (raw counters) curl -s http://localhost:3030/vision/metrics # Audio pipeline metrics (raw counters) curl -s http://localhost:3030/audio/metrics
Audio Pipeline Diagnostics
# Quick audio pipeline health — is transcription actually working? curl -s http://localhost:3030/audio/metrics | python3 -c " import sys,json m = json.load(sys.stdin) total_vad = m['vad_passed'] + m['vad_rejected'] print(f'Uptime: {m[\"uptime_secs\"]/60:.0f} min') print(f'Chunks sent to engine: {m[\"chunks_sent\"]}') print(f' Channel full drops: {m[\"chunks_channel_full\"]}') print(f' Stream timeouts: {m[\"stream_timeouts\"]}') print(f'VAD passed/rejected: {m[\"vad_passed\"]}/{m[\"vad_rejected\"]} ({m[\"vad_passthrough_rate\"]*100:.0f}% passthrough)') print(f' Avg speech ratio: {m[\"avg_speech_ratio\"]:.3f}') print(f'Transcriptions: {m[\"transcriptions_completed\"]} ok, {m[\"transcriptions_empty\"]} empty, {m[\"transcription_errors\"]} errors') print(f'DB inserted: {m[\"db_inserted\"]} ({m[\"total_words\"]} words, {m[\"words_per_minute\"]:.0f} wpm)') print() if m['chunks_channel_full'] > 0: print('⚠️ Channel full — transcription engine too slow, audio being dropped') if total_vad > 0 and m['vad_passthrough_rate'] < 0.1: print('⚠️ Very low VAD passthrough — may be dropping real speech') if m['transcription_errors'] > 0: print('⚠️ Transcription errors detected') if m['chunks_sent'] > 0 and m['db_inserted'] == 0: print('🔴 Chunks sent but nothing stored — pipeline is broken') if m['chunks_sent'] == 0 and m['uptime_secs'] > 120: print('🔴 No chunks sent after 2min — audio capture not working') " # Audio pipeline info from /health (summary view) curl -s http://localhost:3030/health | python3 -c " import sys,json h = json.load(sys.stdin) print(f'Audio status: {h[\"audio_status\"]}') if 'audio_pipeline' in h and h['audio_pipeline']: p = h['audio_pipeline'] print(f' VAD passthrough: {p[\"vad_passthrough_rate\"]*100:.0f}%') print(f' Words/min: {p[\"words_per_minute\"]:.0f}') print(f' DB inserted: {p[\"db_inserted\"]}') "
Database Health
# Check database integrity sqlite3 ~/.screenpipe/db.sqlite "PRAGMA integrity_check;" 2>/dev/null # Database size and tables sqlite3 ~/.screenpipe/db.sqlite "SELECT name, (SELECT COUNT(*) FROM main WHERE name=t.name) FROM sqlite_master t WHERE type='table';" 2>/dev/null # Recent frame count sqlite3 ~/.screenpipe/db.sqlite "SELECT COUNT(*) as frames_today FROM frames WHERE timestamp > datetime('now', '-1 day');" 2>/dev/null
Permissions Check (macOS)
# Check screen recording permission sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "SELECT client,allowed FROM access WHERE service='kTCCServiceScreenCapture';" 2>/dev/null | grep -i screenpipe # Check microphone permission sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db "SELECT client,allowed FROM access WHERE service='kTCCServiceMicrophone';" 2>/dev/null | grep -i screenpipe # Or use tccutil (if available) echo "Check System Preferences > Privacy & Security > Screen Recording and Microphone for screenpipe permissions"
Common Issues & Fixes
Issue: Screenpipe not running
# Start CLI screenpipe # Or start app open /Applications/screenpipe.app
Issue: No frames being captured
- Check screen recording permission in System Preferences
- Check logs for permission errors:
grep -i "permission\|denied\|cg\|capture" ~/.screenpipe/screenpipe.$(date +%Y-%m-%d).log | tail -20
Issue: No audio transcription
- Check microphone permission
- Check audio pipeline metrics:
# Is audio being captured at all? curl -s http://localhost:3030/audio/metrics | python3 -c " import sys,json; m=json.load(sys.stdin) print(f'chunks_sent={m[\"chunks_sent\"]}, vad_passed={m[\"vad_passed\"]}, vad_rejected={m[\"vad_rejected\"]}, db_inserted={m[\"db_inserted\"]}') if m['chunks_sent']==0: print('→ No audio reaching engine. Check device/permissions.') elif m['vad_passed']==0: print('→ VAD rejecting everything. Check mic input level or lower vad_sensitivity.') elif m['db_inserted']==0: print('→ Transcription failing. Check engine config or logs.') "
- Check audio device selection:
curl -s http://localhost:3030/audio/list grep -i "audio\|device\|whisper" ~/.screenpipe/screenpipe.$(date +%Y-%m-%d).log | tail -20
Issue: High CPU/Memory
# Check current usage top -l 1 -s 0 | grep -i screenpipe # Check for memory leaks in logs grep -i "memory\|oom" ~/.screenpipe/screenpipe.$(date +%Y-%m-%d).log
Issue: Database locked
# Check for lock fuser ~/.screenpipe/db.sqlite 2>/dev/null # Check for multiple processes pgrep -c screenpipe
Response Format
When reporting health status:
- Start with overall status (healthy/unhealthy)
- List any issues found
- Provide specific error messages if relevant
- Suggest fixes for identified issues