TwiCC anonymous telemetry
Self-hosted TwiCC installs send anonymous usage statistics to this endpoint once a day. It is enabled by default, and can be turned off in one click from the app's settings.
Why it exists
These statistics are the only way for TwiCC's author to know how the project is actually used — how many installs are alive, how regularly and intensely they run, at what scale, on which platforms — and to decide where to spend the effort. If you leave telemetry enabled: thank you, it genuinely helps.
The telemetry code is open source like the rest of TwiCC, in the TwiCC repository, so anyone can verify that it does nothing more than what this page describes.
What is collected
One JSON document per day, built from two parts: an instance block sent with every payload, and a daily block for each not-yet-sent complete day (UTC). Every field is a counter, a boolean, an enum, or a bucketed value — never free text.
| Field | Type / buckets | Purpose |
|---|---|---|
| Instance block (every payload) | ||
instance_id | random UUID v4 | counts distinct instances; identifies nothing |
twicc_version | string | adoption of released versions |
python | major.minor | runtime support planning |
os | linux / darwin / windows | platform support planning |
arch | string | platform support planning |
providers | enabled provider keys (claude_code, codex) | provider adoption |
install | enum: pip / pipx / uv-tool / uvx / git-dev / other | packaging/install-method priorities |
projects_bucket | 0, 1, 2-5, 6-20, 21-50, 51-100, 101+ | scale of use |
workspaces_bucket | 0, 1, 2-5, 6-20, 21+ | scale of use |
remote_access | boolean | whether the instance is served beyond localhost (a password is configured) |
| Daily block (one per complete day) | ||
| sessions per model × effort | nested counts: provider → model family → version → effort; unresolvable values read unknown | volumetry, model adoption |
| sessions per permission mode | counts by provider × permission mode | volumetry, feature usage |
| user messages sent | count | intensity |
| subagent sessions | count | orchestration adoption |
| workflow runs | count | feature adoption |
| active crons | count | feature adoption |
presence_bucket | minutes of human presence: 0, <30, 30-120, 120-360, 360-720, 720+ | intensity |
| peak concurrent agents | max simultaneous live processes that day | scale of use |
cost_bucket | 0, <1, 1-10, 10-50, 50-100, 100-250, 250-500, 500-1000, 1000+ USD/day | scale of use |
| shares created | count | feature adoption |
| artifact bookmarks created | count | feature adoption |
| sessions spawned by other sessions | count | orchestration adoption |
The feature block is deliberately small and limited to what can be derived from the database without instrumentation or content scans; it may grow or shrink across schema versions.
What is never collected
- No message or prompt content, no session titles
- No project names or file paths, no git data
- No hostnames, usernames, or email addresses
- No IP addresses — the client never sends one, and this collector does not log or store any
- No exact costs or token counts, only buckets
- No per-session identifiers of any kind — only aggregate counters
The instance identifier
instance_id is a random UUID v4, generated locally the first time telemetry runs. It
is derived from nothing about the machine or its owner — no MAC address, no hostname hash
— so it identifies nothing beyond making distinct instances countable. A "Reset instance ID"
action in settings regenerates it at any time, severing any history tied to the old one.
How to disable it
Turn off the toggle at the bottom of the Global section in TwiCC's settings panel, or set the
environment variable TWICC_NO_TELEMETRY=1 before starting the backend, which
overrides the setting and prevents the task from starting at all.
Source and full design: github.com/twidi/twicc —
see docs/plans/2026-07-18-telemetry-design.md in the repository for the complete
design document.