What this release does
Nothing user-visible changes. But under the hood, when you have Detailed analytics on in Settings → Privacy, the app now sends a small anonymous event every time the CTO agent decides which model an engineer should run on. The aggregate of those events powers the savings claim on askcodi.com — instead of a generic 'AskCodi saves money' pitch, the landing can show a real receipt: 'CTO routing saved $X across Y installs last month vs running everything on Opus.'
What gets sent
Per event:
- Model name (e.g.
claude-haiku-4-5)
- Token counts (input, output, cached)
- Pre-computed cost in cents at the time of the call
- Who picked the model (
cto for orchestrator routing, user for chat clicks)
- An anonymous per-machine UUID generated on first launch (NOT tied to your account)
- The adapter type (
claude_code, codex, askcodi) and provider (anthropic, openai, etc.)
What never gets sent
The endpoint rejects payloads that contain any of: prompts, completions, message bodies, file paths, project names, workspace names, branches, commits, or source code. The desktop client never serializes those fields in the first place.
How to turn it off
Settings → Privacy → Detailed analytics is the master toggle. Flip it off and:
- The pending queue is dropped immediately (no last-flush)
- Nothing new is recorded
- The PostHog product analytics pipeline goes silent at the same time
EU and UK users: the toggle defaults to OFF until you answer the first-launch consent dialog. We do not send anything until you've made a choice.
Rate limits & idempotency
Each install is capped at 1,000 events per 24 hours — enough for a busy day of orchestrator work, low enough that a runaway client can't fill the table. Events carry a client-generated UUID; offline-queue retries dedupe silently at the database level.