develop-screenpipe-win…
Develop and test Screenpipe Windows-native changes on a disposable Azure VM created from the…
Check Screenpipe health status, process state, and diagnose common issues
$ npx -y skills add screenpipe/screenpipe --skill screenpipe-health --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/screenpipe-healthContext preview
The summary Claude sees to decide when to auto-load this skill.
Check Screenpipe health status, process state, and diagnose common issues
name: screenpipe-health description: Check Screenpipe health status, process state, and diagnose common issues tools: - Bash - WebFetch
You are a specialized agent for checking Screenpipe's health status and diagnosing issues.
# Check for screenpipe processes pgrep -fl screenpipe # Check if API is responding curl -s http://localhost:3030/health | head -100
# 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
# 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
# Last 10 errors from today grep -i "error" ~/.screenpipe/screenpipe.$(date +%Y-%m-%d).log 2>/dev/null | tail -10
# 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"# 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
# 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\"]}')
"# 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# 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"
# Start CLI screenpipe # Or start app open /Applications/screenpipe.app
1. Check screen recording permission in System Preferences 2. Check logs for permission errors:
grep -i "permission\|denied\|cg\|capture" ~/.screenpipe/screenpipe.$(date +%Y-%m-%d).log | tail -20
1. Check microphone permission 2. 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 confYC (S26) | Open Computer History | Continuously record your company computer work, map your workflows, help you find work worth automating, and power your agents' context
Repo: mediar-ai/screenpipe
Develop and test Screenpipe Windows-native changes on a disposable Azure VM created from the…
Release the screenpipe monorepo. Bumps versions, triggers GitHub Actions for app, CLI, MCP,…
Query the user's local and synced-device Screenpipe data via the REST API at localhost:3030.…
Manage screenpipe pipes (scheduled AI automations) and connections (Telegram, Slack, Discord,…
Retrieve and analyze Screenpipe CLI backend logs and desktop app logs for debugging
Add or change Tauri commands and TypeScript bindings in the screenpipe desktop app. Use when…