What is collected
What is never captured
The following classes are not collected by any code path:- Text content (typed, displayed, or in clipboard).
- Audio (mic).
- Images (camera, screenshots).
- Location (GPS, network location, geofencing).
- Contacts.
- Calendar entries.
- Browser history.
- Network requests originating from the app (the SDK does not call out to the network at all — see “Outbound traffic” below).
Outbound traffic
The SDK itself makes no outbound network calls. There is no HTTP client in the synheart-behavior source. Cloud delivery, when desired, happens throughsynheart-core → the Synheart runtime’s ingest connector, which:
- Gates on
BehaviorandcloudUploadconsent. - Hashes
subject_id; the raw value never leaves the device. - Signs requests with the device’s hardware key (see Synheart Auth).
Platform permissions
SynheartBehavior.checkNotificationPermission() / requestNotificationPermission() and the call-permission equivalents are Android-only; iOS does not have a comparable user-facing permission for these surfaces, and the SDK collects only what iOS exposes through public APIs.
Adversary model
Implementation invariants
When auditing the SDK against this threat model, the following are non-negotiable code invariants:- No string captured from input fields.
BehaviorEventType.typingevents carry only timing fields in theirmetricsmap. - No clipboard contents.
ClipboardActionandClipboardContextenums encode the action/location, not the payload. - No notification body or title.
InterruptionActionenum is the only notification-derived field on events. - No outbound HTTP from the SDK. No HTTP clients imported in any of the four SDK packages.
- No background data persistence by the SDK. Events flow through streams; aggregates are computed in-memory and surface as
BehaviorSessionSummary. Hosts decide whether to persist.
Consent gating layers
Logging policy
The SDK logs atinfo / warn levels in production. Logs include:
- Session lifecycle (
session_start,session_end, durations). - Permission state changes.
- Inference latency (motion-lite).
- Event-level payloads (no event-by-event logs).
- User identifiers (raw
userId/deviceIdare never written to logs unless the host injects them). - Motion sample bytes.
- Inference inputs.
Related
- Behavior Overview — config flags including the
consentBehaviorflag. - Consent System — runtime gate enforcement.
- Synheart Auth — request signing for cloud-bound traffic.