Usage analytics, and how to turn them off

The app (dira teams) sends usage analytics to GA4. The engine (tick.sh, tickets.py) sends nothing at all. Everything in this chapter is about the app side.

What gets sent - eight events

Eight names, and that is all of them. An event in the code that is not in this table is a defect.

EventWhenParameters
app_opena user session starts (ahead of the first event, and again after 30 minutes of no activity)app_version, shell (desktop|browser)
screen_viewyou arrive on a screenscreen (root|board|ticket|workers|personas|protocols|ontology|home)
project_adda project has been addedmethod (create|register)
worker_createa worker was createdengine (the id from the engine catalogue as it stands. Today that is claude|codex|grok|agy, and a value typed by hand folds into other), cron_ok (bool)
ticket_createa ticket was issued or a request submittedkind (work|request|feedback)
answer_submita person wrote the answer in an answer round tripnone
feedback_submitsend was pressed on the feedback formnone
analytics_offanalytics are turned off (one last time, just before it stops)none

The values are counts, booleans and enums decided in advance, and nothing else. Facts the engine makes, like a .done transition or a dispatch, are not events. Only screen actions are counted. Errors and crashes are not sent either.

What does not get sent

None of the following goes into any parameter of any event.

File paths, project names, the queue root, ticket hashes, ticket titles, ticket bodies, persona names, worker names, people's names, tokens, prompts (the instructions that go into an agent, or what the agent puts out), and anything an IP could be inferred from.

screen_view does not send the URL itself either. /p/<project>/tickets/<hash> carries both a project name and a ticket hash, so what goes out is that path swapped for one screen name decided in advance (ticket, and so on). The free text you write in the feedback form does not reach GA either. That goes to a GitHub issue and nowhere else, and what is left in GA is the fact that you sent it (feedback_submit).

What has to be true to send - two credentials

Nothing goes out without GA_MEASUREMENT_ID and GA_API_SECRET. CI puts those two into release builds only, and they are not committed to the repository. With no values, the code sends nothing. A development server started with pnpm dev and an .app you built by hand are both in that state. That is why sessions running during development do not pollute the analytics.

Usage stats in the Settings dialog shows you whether those values are there, too. On a build without the credentials you get the one line Not sending and the reason, and no button to turn anything off. There is nothing to turn off.

Turning it off

Open Settings with the gear at the top right and pick Usage stats in the left-hand tree (see The screens). It is on by default, and one button turns it off. From that moment no event goes out, and the line above changes to Not sending.

Deleting it

There is one analytics file, ~/.config/dira/analytics.json. It holds two values and no more: install_id (the anonymous install identifier sent to GA4) and enabled (written as false only when you have turned it off). Delete the file and the next run issues a new install_id, counted as a new install with no line back to the earlier analytics. One line in a terminal does it.

rm ~/.config/dira/analytics.json
bash

What is sent and why, how long it is kept, and who processes it are in the privacy policy.

Next is Schedules.