What is Synheart Sensor Agent?
Synheart Sensor Agent is a privacy-first PC background sensor that captures keyboard and mouse interaction timing (not content) for behavioral research. It extracts features like typing rhythm, mouse movement patterns, and interaction continuity - all without ever capturing what you type or where you click.Key Features
- Privacy by Design: Never captures key content, passwords, or screen coordinates
- Behavioral Features: Extracts 16+ behavioral signals from interaction patterns
- HSI Format: Exports data in the Human State Interface (HSI) JSON format (via Synheart Flux)
- Transparency: Full visibility into what data is collected via
statuscommand - macOS Support: Native integration using Core Graphics event taps
Privacy Guarantees
| What We Capture | What We Never Capture |
|---|---|
| When keys are pressed (timing only) | Which keys you press (no passwords, messages, etc.) |
| How fast the mouse moves (speed only) | Where your cursor is (no screen position tracking) |
| When clicks and scrolls occur (timing only) | What applications you use |
| Any screen content |
Installation
From Source
Requirements
- Rust: 1.70 or later
- macOS: 10.15 (Catalina) or later
- Permissions: Input Monitoring permission required
Usage
Grant Input Monitoring Permission
Before the agent can capture events:- Open System Preferences > Security & Privacy > Privacy
- Select Input Monitoring in the left sidebar
- Click the lock icon and authenticate
- Add the
synheart-sensorapplication - Restart the application
Commands
Core Gateway Integration
For real-time HSI processing via synheart-core-gateway, enable thegateway feature:
Synheart Flux Integration
For rolling baselines and enriched HSI metrics, enable the optionalflux feature:
Behavioral Features
Keyboard Features
| Feature | Description |
|---|---|
typing_rate | Keys pressed per second |
pause_count | Number of pauses (gaps > 500ms) |
mean_pause_ms | Average pause duration |
latency_variability | Std dev of inter-key intervals |
hold_time_mean | Average key hold duration |
burst_index | Burstiness of typing (0-1) |
session_continuity | Active typing ratio |
typing_cadence_stability | Rhythmic consistency of typing (0-1) |
typing_gap_ratio | Proportion of inter-tap intervals as gaps |
typing_interaction_intensity | Composite of speed, stability, gap behavior |
Mouse Features
| Feature | Description |
|---|---|
mouse_activity_rate | Movement events per second |
mean_velocity | Average cursor speed |
velocity_variability | Consistency of movement |
acceleration_spikes | Sudden speed changes |
click_rate | Clicks per second |
scroll_rate | Scroll events per second |
idle_ratio | Idle vs active time |
micro_adjustment_ratio | Small movements ratio |
Derived Signals
| Signal | Description |
|---|---|
interaction_rhythm | Overall input regularity |
friction | Hesitation/correction indicator |
motor_stability | Movement consistency |
focus_continuity_proxy | Sustained attention indicator |
burstiness | Whether interactions occur in clusters or evenly |
deep_focus_block | True if window shows sustained, uninterrupted activity |
Flux-Enriched Metrics (Optional)
When the--flux flag is enabled:
| Metric | Description |
|---|---|
distraction_score | Aggregate estimate of distraction |
focus_hint | Aggregate estimate of focus |
interaction_intensity | Flux-computed interaction intensity |
HSI Output Format
The agent exports data in HSI 1.0 (Human State Interface) JSON format:Configuration
Configuration is stored at:- macOS:
~/Library/Application Support/synheart-sensor-agent/config.json
Architecture
Troubleshooting
”Input Monitoring permission not granted”
- Open System Preferences > Security & Privacy > Privacy
- Select Input Monitoring
- Ensure the application is in the list and checked
- If already checked, remove and re-add the application
- Restart the application
No events being captured
- Ensure you’re actively typing or moving the mouse
- Check that the correct sources are enabled (
--sources all) - Verify permission is granted with
synheart-sensor status
Resources
- GitHub: synheart-ai/synheart-sensor-agent
- crates.io: synheart-sensor-agent
- docs.rs: synheart-sensor-agent