v13.22.0
Added 2
- Added `observed_model` and `observed_billing` fields to telemetry to track the model and billing tier being observed in user IDE sessions
- Added `observed_model` and `observed_billing` nullable columns to the `sdk_sessions` storage table (schema version 50)
Changed 3
- Updated telemetry privacy controls to read only `oauthAccount.organizationType`, `oauthAccount` presence, and `customApiKeyResponses.approved` from `.claude.json` and project parsed objects to those fields immediately
- Updated telemetry scrubber whitelist and documentation to include the new `observed_model` and `observed_billing` properties
- Improved Stop hook performance to read the transcript once for both the last assistant message and observed model instead of separately
Fixed 1
- Fixed `ide` and `provider` fields not reaching PostHog on the `observer_turn_rollup` event
From claude-mem
What's new
Telemetry: observed model, source, and billing tier (#3836)
PostHog previously only knew the observer model (the model claude-mem uses to write observations). The observer_turn_rollup event now also reports the session being observed:
observed_model— the model the user's IDE session is running (e.g.claude-fable-5-1), read from the transcript's last assistant entry on each Stop hook.observed_billing— a closed, low-cardinality enum:max | pro | team | enterprise | subscription | api_key | bedrock | vertex | foundry | unknown, detected in the hook process from Claude Code's environment and~/.claude.json'soauthAccount.organizationType.ideandprovidernow actually reach PostHog on the rollup. The docs already claimed this; the rollup computation was dropping them.
Storage
sdk_sessionsgains two nullable columns,observed_modelandobserved_billing(schema version 50). The migration is idempotent and runs on worker start.
Privacy
- Only
oauthAccount.organizationType,oauthAccountpresence, andcustomApiKeyResponses.approvedare read from.claude.json, and the parsed object is projected to those fields immediately. Parse failures log only the error class name, never the message. - Both new properties are whitelisted in the telemetry scrubber and documented in
docs/public/telemetry.mdx.
Performance
- The Stop hook now reads the transcript once for both the last assistant message and the observed model (previously one read; the new field did not add a second).