Status: Active Date: April 8, 2026 Owner: codecoast labs Positioning: OpenClaw-first, local-first, passive-first, raw-signal-first
SenseKit is an iPhone runtime that observes real device signals and forwards them to OpenClaw in signed JSON batches.
The phone does not decide the final meaning first. OpenClaw gets the rawer possibilities and decides what they mean.
SenseKit now works like this:
- iPhone collectors observe system signals.
- SenseKit stores those signals locally and writes debug/audit entries.
- SenseKit batches the signals into
sensekit.signal_batch.v1. - SenseKit signs the payload and sends it to the configured OpenClaw hook.
- OpenClaw decides whether the signals mean wake, driving, arrival, workout completion, or something else.
SenseKit sends sensekit.signal_batch.v1.
Top-level fields:
schema_versionbatch_idsent_atdevicesignalsdelivery
Each signal contains:
schema_versionsignal_idsignal_keycollectorsourceweightpolarityobserved_atreceived_atvalid_for_secpayload
SenseKit currently supports these raw collectors:
- Motion via Core Motion
- Location via Core Location
- Power via
UIDevice - Workout samples via HealthKit
- Manual test scenarios for bench testing
Examples of signal keys:
motion.activity_observedlocation.region_state_changedlocation.location_observedpower.battery_state_changedpower.battery_level_observedhealth.workout_sample_observed
SenseKit is designed to keep emitting signals when the app is backgrounded or the phone is locked, as far as iOS allows:
- Motion uses background-capable activity updates.
- Region monitoring and location updates can relaunch or wake the app.
- Power state changes are observed from the passive runtime.
- HealthKit workout observer delivery can wake the app for workout changes.
iOS still controls exact timing. SenseKit does not promise zero-delay delivery for every source.
SenseKit is local-first:
- it stores runtime state, timeline, and audit history on-device
- it only sends to the OpenClaw endpoint the user configures
- it signs outbound requests with HMAC
SenseKit does not currently send calendar titles, attendee lists, or the raw HMAC secret itself.
SenseKit does send the configured bearer token in the HTTP Authorization header and a derived HMAC signature header to the user-configured endpoint.
Exact coordinates are only sent when place_sharing_mode is precise_coordinates.
SenseKit does not currently try to:
- normalize signals into final events before delivery
- build a heavyweight snapshot object before delivery
- run a local policy engine before delivery
- act as a general behavioral-data warehouse
The app includes manual test scenarios for bench work.
These scenarios do not fake final events. They emit representative raw signal groups through the same queue and delivery path used by live collectors.