Skip to main content
Patter sends a small amount of anonymous usage telemetry so the maintainers can see how the SDK is used — which engines, providers, models, carriers, platforms, and versions are popular, plus coarse per-call latency, duration, and cost — and prioritise accordingly. It is on by default and designed to be invisible to your application and impossible to tie back to a person or a call.
Telemetry never collects PII or call content. No phone numbers, transcripts, audio, prompts, tool arguments, API keys, customer identifiers, file paths, hostnames, or IP addresses are ever sent.

What is collected

Each event is a small, flat JSON object with only coarse, low-cardinality fields: Common fields on every event: Per-event dimensions (all are a closed enum or a coarse bucket — an off-list value is replaced with other before sending): The run_id is a fresh random value on every process start (it groups one run’s events). The install_id is a random UUID generated once and stored in a small local file (~/.getpatter/install-id, or $XDG_STATE_HOME/getpatter/install-id when XDG_STATE_HOME is set) so the maintainers can count unique active installs over time — it is a random number, not tied to you or any PII, and is never derived from hardware (MAC address, hostname, serial numbers). Opting out never creates or reads this file. The collector drops the source IP on receipt. Custom tool names, custom integration endpoints, custom/fine-tuned model names, and any value not on a closed enum are never sent — only counts and coarse categories.

How to disable it

Telemetry is opt-out. Any one of the following turns it off:
Python
TypeScript
Or from the command line — a persisted, machine-level opt-out (parity with next telemetry disable):
Or via environment variables (these also work without touching code): Telemetry is also automatically disabled in CI and test runners (for example when CI, GITHUB_ACTIONS, PYTEST_CURRENT_TEST, or VITEST is set).

Inspect exactly what would be sent

Set PATTER_TELEMETRY_DEBUG=1 to print every event to stderr without sending it. This lets you audit precisely what would leave your machine:

Send telemetry to your own collector

Point Patter at any HTTP endpoint that accepts a JSON array of events:

Precedence

When more than one signal is present, the first match wins:
  1. DO_NOT_TRACK set → off
  2. PATTER_TELEMETRY_DISABLED set → off
  3. persisted opt-out marker present (getpatter telemetry disable) → off
  4. telemetry=False in code → off
  5. CI / test environment detected → off
  6. otherwise → on