claude-mem v13.22.0

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's oauthAccount.organizationType.
  • ide and provider now actually reach PostHog on the rollup. The docs already claimed this; the rollup computation was dropping them.
Storage
  • sdk_sessions gains two nullable columns, observed_model and observed_billing (schema version 50). The migration is idempotent and runs on worker start.
Privacy
  • Only oauthAccount.organizationType, oauthAccount presence, and customApiKeyResponses.approved are 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).
View original

Upgraded? How did it go?

Discussion