Usage counts

deck can share anonymous usage counts, so we know what to make next: how many people use it, on which versions, and which parts they reach for.

Nothing is counted or sent until you say yes. You're asked once, either in deck setup or in a strip above a deck window's footer, and either answer is final until you change it. Setup only asks at a terminal: run without one, by the installer or by an agent, it records no answer, and the window asks.

What is sent

One event, at most once an hour, while a deck window is open (a window looks every five minutes whether one is due):

FieldExampleWhat it is
distinct_id3f9c…e21aA random id made on your machine the first time counts are sent. It is not derived from your machine, name, email or anything else.
version0.1.5The deck you run.
os, archmacos, aarch64Your operating system and processor type.
decks_created4deck new, since the last send.
decks_opened3Deck windows opened.
groups_written17deck group.
groups_viewed21Groups brought on screen.
comments5Comments left on decks.
reviews2Reviews submitted.
ask_now1Questions sent with Ask now.
questions_offered30Suggested questions written into groups.
questions_asked, questions_edited3, 1Suggested questions clicked, or ⌘-clicked (Ctrl-clicked on Windows and Linux) into the comment box.
walks1Walks started.
upgrades1Upgrades to a newer deck.
agents{"claude-code": 4}Which agent created the decks: claude-code, codex, cursor, amp, gemini or other. Worked out from the names of environment variables, never their values.

A count that is zero is left out, and so is agents when no deck was created. Some counts overlap on purpose: a suggested question that is clicked counts as questions_asked, and also as an ask_now and a comment, because that is what it becomes.

Alongside these, every event carries the fields PostHog needs to file it, and nothing that identifies you:

FieldValueWhy
eventdeck usageThe event's name.
api_keyphc_…deck's PostHog project key. It can add events, never read them.
$process_person_profilefalseNo person is created for the id.
$geoip_disabletrueNo location is looked up.
$ipnullNo address is attached.
$libdeckWhich program sent it.

The request also carries a User-Agent: deck/<version> header.

Never sent: code, file paths, repository or project names, deck titles, narration, comments, questions, or anything you type.

The counts go to PostHog, hosted in the EU. Each event is sent without a person profile and with location lookup turned off, and the project discards IP addresses.

Seeing it for yourself

deck telemetry show      # exactly what the next send carries, and when
deck telemetry status    # whether counts are shared, and if not, why

The counts waiting to be sent are in ~/.deck/usage.json.

Turning it off

Any one of these is enough, and all of them win over a yes:

deck telemetry on turns it back on.