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
Since Flutter 0.4.1 and Kotlin 0.6.0 the libraries declare these permissions
in their own Android manifests, so your app inherits them:
- Flutter:
BIND_NOTIFICATION_LISTENER_SERVICE,READ_PHONE_STATEand the notification listener service. - Kotlin:
BIND_NOTIFICATION_LISTENER_SERVICE,ACCESS_NETWORK_STATEand the notification listener service (addREAD_PHONE_STATEyourself for call events).
tools:node="remove" in your manifest.
checkNotificationPermission() / requestNotificationPermission() and the
call-permission equivalents exist on all three SDKs. On iOS, notification
events come from the host forwarding its UNUserNotificationCenter delegate
callbacks (or the SDK installed as the delegate).
Adversary model
Implementation invariants
The SDK holds to these 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.