Every event we send

This is the complete list, not a summary. Interface events are filtered against a fixed allowlist before anything is published, so a property that isn't named here doesn't get through.

APPLICATION EVENT PROPERTIES SENT
server_started device_count, drivers_loaded
driver_loaded driver_name, hashed_driver_uid, device_count, usb_vid, usb_pid, usb_product, usb_manufacturer, has_serial_number
client_connected num_clients — host, port and client id are deliberately excluded
recipe_fired event_type, action_types, action_count, cooldown_ms, fire_offset_ms, success, triggered_by_recipe
recipe_failed the same fields, plus failed_action_index, failed_action_type
recipe_activity_summary window_seconds, plus per-shape fire, success and failure counts, first and last fire offsets, inter-fire stats, chained_count
mcp_usage_summary window_seconds, session_count, per-tool call counts, tool_errors, distinct_tools_used
assistant.query.started hashed_conversation_id, provider_id, model_id
assistant.query.completed hashed_conversation_id, provider_id, model_id, iterations, ok, stop_reason, input_tokens, output_tokens, cached_input_tokens, wall_clock_ms, tool_use_count, tools_used, tool_errors
assistant.provider.switched hashed_conversation_id, the provider and model ids moved from and to, mid_conversation
INTERFACE EVENT PROPERTIES ALLOWED THROUGH
page_viewed page_name
widget_added / widget_removed widget_type, dashboard_id
channel_added channel_type
widget_sources_summary widget_type, source_types (count map), total_sources
widget_interaction_summary widget_type, interactions (count map)
project_switched project_count
settings_changed setting_category
feature_toggled feature, enabled

Every event also carries deployment_mode, a UTC timestamp, event_schema_version, and distinct_id — the machine id put through a salted SHA-256, so the PostHog identity is anonymous. Interface summaries accumulate locally and flush every five minutes.

What is never sent

  • Your files, or any of their contents
  • File names, folder paths, or your machine name
  • Captured data — no log lines, bus payloads or measurements, only counts and timings
  • Anything you typed to the assistant, or anything it replied
  • Name, email, or licence key
  • Your IP address — like any HTTPS request it's visible in transit, and IP storage is switched off in PostHog, so it's discarded on arrival and never recorded against an event
  • Connection details — host, port and client id are excluded by hand

A whole event, verbatim

This is a real recipe_fired event, exactly as it leaves the app.

{
  "event": "recipe_fired",
  "distinct_id": "9f4c1e…a72b",
  "properties": {
    "event_type": "gpio_edge",
    "action_types": ["i2c_write", "gpio_set"],
    "action_count": 2,
    "cooldown_ms": 500,
    "fire_offset_ms": 18432,
    "success": true,
    "triggered_by_recipe": false,
    "deployment_mode": "desktop",
    "event_schema_version": 1
  }
}

Nothing about which device, which register, or what value — only that a GPIO edge fired a two-action recipe and it worked.

HOW IT'S ANONYMISED

Anything that could identify hardware or a person is hashed at the subscriber boundary, before it enters the queue — driver UIDs, which may contain USB serials, conversation ids, and the machine id itself. Salted SHA-256, one way, so we can count returning machines without ever knowing which machine.

TURNING IT OFF

You're asked on first run, before anything is sent, and the answer lives on the config page — change it whenever. Say no and the app works exactly the same; we simply learn nothing about how you use it.

IF WE GET IT WRONG

The tables above are the whole list. Anything sent that isn't on them is a bug, not a policy — tell us and we'll fix it and say so here.

This website

Separate from the app: this site counts visits — pages viewed and downloads started — using PostHog, with no cookies and nothing tied to you. In the EU/UK we ask before counting anything, and saying no changes nothing about how the site works.

BETA · PHASE 1

Ask for an invitation

Five questions. They decide which phase you land in — we open to a few kinds of user at a time so support stays fast.

What's your work?
How many people would use it?
Which platform?
Would this be personal or paid work?
No newsletter. We write once, when your phase opens.