Telemetry
Effective date: 22 October 2026
Jack reports how it is used, so we can help you when something goes wrong and keep it working as the AI engines it drives change, often weekly. This page lists everything it sends. Nothing else leaves your machine for us.
What it never sends
Whatever the event: prompts, replies and chat text; file names and paths; the names you give repositories, projects, agents and teammates; the wording of hard limits; your documents; command lines and environment variables; your email address.
The product holds the list of events and properties in its code and drops anything not on it.
How we tell installs apart
Events carry your account ID, which is the user ID from our sign-in service, so a support request can be matched to what happened. Your email address never travels in an event.
How much it sends
The desktop app counts use per day, not per click: ten thousand clicks on one screen make one event, with a count. An install sends at most 60 events a day; anything past that is dropped, and the next daily snapshot says how many.
Our servers send one event per account action, such as signing up or changing plan, never one per request. The hosted relay sends one total an hour for the tools it forwarded, never one event per call, and the total carries no arguments, message bodies or tokens.
Properties on every event
| Property | What it is |
|---|---|
user_id | Your account ID. Your email address never travels in an event. |
company_domain | Your email's domain when it belongs to a company rather than a free email service, so we can count teams. |
ai_level | The AI experience level you picked in the app. |
product | Which product sent the event: runtime or work. |
surface | Where it happened: desktop (the desktop app), platform (our servers for accounts and billing) or relay (the hosted relay). Events from our servers carry only product, surface, schema_version and, where known, plan. |
app_version | The version you run. |
os, arch | Your operating system and processor architecture. |
plan | Your plan: Free, Pro, Team or Enterprise. |
schema_version | The version of this list of events. |
country, region | Worked out from your IP address when the event arrives. The IP address itself is then discarded, never stored. |
Properties on some events
| Property | What it is |
|---|---|
kind | On feature_used: screen, action or setting. |
feature | On feature_used: the key of the screen, control or setting in the app's text catalogue, never anything you typed or named. |
count | On feature_used, error_shown and tool_forwarded: how many times it happened in the day or hour. |
first_seen_hour, day, hour | On the daily and hourly totals: the UTC hour of first use, the UTC day and the UTC hour the total covers. |
value | On feature_used for a setting: the new value, only when it is a fixed choice. |
error, screen | On error_shown and paywall_viewed: the key in the text catalogue of the error, or of the screen where the upgrade prompt appeared. |
engine, engines_installed, engines_logged_in | AI engines, always by product name. |
sessions, groups, projects, agents, routines, skills, hard_limits, dropped_events | On install_snapshot: counts of what you have, and of events the app dropped to stay within its daily limit. |
previous_plan, new_plan, interval | On plan and subscription events: the plan before and after, and the billing interval. |
reason, may_contact | On churn_reason_submitted: the reason you picked and whether we may contact you. Never the comment. |
state | On telemetry_preference_changed: on or off. |
tool, client, outcome | On tool_forwarded: the tool, the cloud client by product name or other, and whether the call succeeded. |
runtime_version | On runtime_connected: the version of your Jack Runtime. |
Events
| Event | When it is sent, and what it carries |
|---|---|
app_startedsurface: desktop | The app launches.Nothing beyond the common properties. |
feature_usedsurface: desktop | A day's use of one screen, action or setting ends. The app counts use per day, not per click: ten thousand clicks make one event, and there is one per feature per day.Whether it is a screen, an action or a setting, its key in the app's text catalogue, how many times you used it, the hour you first used it that day and the day. For a setting, the new value only when it is a fixed choice, never text you typed. |
error_shownsurface: desktop | A day's errors of one kind end: the app shows you an error, counted per day.The error's key in the text catalogue, how many times it was shown and the day. |
signed_insurface: desktop, platform | You sign in. Our servers send it at most once per account a day.Nothing beyond the common properties. |
ai_level_chosensurface: desktop | You pick your AI experience level.The level. |
engine_limit_reachedsurface: desktop | An AI engine reports that you reached its usage limit.The engine, by product name. |
paywall_viewedsurface: desktop | You see an upgrade prompt.The key of the screen where it appeared. |
trial_startedsurface: desktop, platform | You start a trial.The plan. |
plan_changedsurface: desktop | Your plan changes.The previous and the new plan. |
churn_reason_submittedsurface: desktop | You continue from the cancellation step.The reason you picked and whether you agreed to be contacted. Never the comment you may have written. |
telemetry_preference_changedsurface: desktop | An Enterprise policy turns telemetry on or off.The new state. It is the last event sent when telemetry turns off. |
install_snapshotsurface: desktop | Once a day.Which AI engines are installed and logged in, by product name, and how many sessions, groups, projects, agents, routines, skills and hard limits you have, and how many events the app had to drop. Counts only, never names. |
sign_upsurface: platform | You create an account.Nothing beyond the common properties. |
checkout_startedsurface: platform | You start paying for a plan.The plan and the billing interval. |
subscription_changedsurface: platform | Your subscription changes to another plan.The new plan and the previous plan. |
subscription_cancelledsurface: platform | Your subscription is cancelled.The plan. |
tool_forwardedsurface: relay | Once an hour, for the tools the hosted relay forwarded between your Jack Runtime and a cloud AI client. It is one hourly total, never one event per call.The tool, the cloud client by product name (or other), the outcome, how many calls and the hour. No arguments, bodies or tokens. |
runtime_connectedsurface: relay | Your Jack Runtime connects to the hosted relay, at most once per Jack Runtime an hour.The Jack Runtime's version. |
runtime_registeredsurface: relay | Your Jack Runtime is registered with the hosted relay, once.Nothing beyond the common properties. |
tool_called | A harness or app calls one of Jack Runtime's MCP tools.The tool, the calling harness or MCP client by product name, the outcome, any error code and how long it took. |
session_state_changed | A worker session changes state, such as from working to waiting.The old and new state, the worker's harness, the orchestrating harness, whether Jack Runtime started or attached to the session, and how deep it sits under other workers. |
turn_completed | A worker finishes a turn.The harness, how many events of each type the turn had, token counts and how long it waited for permission. Never what was said. |
update_checked | The product checks for a new version.The update channel and the version it found. |
update_installed | A new version is installed.The old and new version and the channel. |
Crash reports
When Jack hits an internal error, it sends a crash report to Sentry: the error, the stack trace, the version, your operating system and the same account ID. Stack traces show paths inside Jack, not your own files, wherever the build allows. Sentry does not store your IP address.
When you first run it
The first time you use Jack, it tells you once that telemetry is on, what it collects and how to object, with a link to this page.
Turning it off
Telemetry stays on in the Free, Pro and Team plans, because it is how we support you. Enterprise organisations can have telemetry turned off for the organisation. There is no switch for it in the app.
You can object at any time under GDPR Article 21(1). Email [email protected] with the reasons that apply to your situation. We review your objection and reply by email. We delete what we hold under your account if you ask.
Where it goes and how long we keep it
Events from the app travel through a relay on our own domain to PostHog, and crash reports to Sentry, both in their EU regions. Events from our servers go straight to PostHog's EU region. Your IP address is used only to work out your country and region, then discarded. We keep usage events for one year and crash reports for 90 days. We never sell this data, share it for advertising or use it for anything but the purposes on the legitimate interest assessment.
Legal basis
Our legitimate interest in supporting you and keeping Jack working (GDPR Article 6(1)(f)). The legitimate interest assessment weighs that interest against yours. Who we are, and the rest of how we handle personal data, is in the privacy policy.
Your rights
You can ask for a copy of what we hold, and to correct, delete or restrict it. Email [email protected] and we will answer within one month. You can also complain to the Norwegian Data Protection Authority,Datatilsynet, or the authority where you live.
Changes
A new event or property appears on this page before a version sends it, and the date above changes. Every event carries schema_version, so old and new versions are told apart.
Jack