Skip to main content

Appendix A: Praxist User Data Collection Notice

Notice version: 3
Effective date: 19 August 2026

The User may help improve Praxist by sharing pseudonymized (pseudonymous) product-usage data. Praxist collects it only when all of the following are true:

  1. the installed build contains an approved collection transport;
  2. product-usage collection is enabled for that build; and
  3. the User separately selects Share product usage or otherwise provides an explicit supported opt-in after this Notice is made available for review.

Accepting the Praxist Fair Source License and User Agreement does not provide this optional consent. If the installed build has no approved collection capability, or if consent is unset or denied, no product-usage events are collected or sent. Research operation is not reduced when the User declines. A temporary network or collector outage after opt-in may leave bounded events in the local outbox for later delivery; it does not affect the Research Run.

Development builds send authorized events to the fixed Praxist development collector at http://45.78.201.249/v1/events. This development transport is plain HTTP and is intended only for internal development or test data. Formal releases send authorized events to the Praxist production collector at https://telemetry.theaiscientist.com/v1/events using HTTPS certificate verification and without following redirects.

2. Data Praxist May Collect After Opt-In

The product-usage protocol has a closed schema. It may collect only the fields described below.

2.1 Common lifecycle fields

  • schema_version: version of the product-usage event structure;
  • praxist_version: public Praxist version;
  • consent_notice_version: version of this Notice;
  • environment_id (Environment ID): locally generated random identifier that remains stable across Research Runs in one Praxist environment;
  • telemetry_run_id: separate random identifier for one research run;
  • event_id: random identifier for correlation and deduplication of one event;
  • event_sequence: sequence number within the same research run;
  • event_type: one of the lifecycle events below;
  • occurred_at: client-side event time in UTC to second precision;
  • error_summaries: bounded structured error-category counts; and
  • error_summaries_truncated: whether the bounded error list was truncated.

The random identifiers are not derived from usernames, accounts, device serial numbers, MAC addresses, IP addresses, hostnames, project paths, or task content, and are not simple incrementing identifiers.

2.2 Lifecycle events

Praxist may emit four event types:

  1. run_started records the generation ordinal, planned Peer count, and aggregate counts of Peers in planning, running, completed, cancelled, failed, and unknown states at the run-start boundary.
  2. generation_finished records the same generation and aggregate Peer state fields at a durable Generation boundary. Peer state counts must sum to the planned Peer count. completed means only that the Peer lifecycle returned normally; it does not assert that a scientific result is valid. unknown means that a canonical terminal state could not be confirmed.
  3. run_finished records active run duration in complete minutes and whether it reached the 43,200-minute (30-day) recording cap. Duration may be null when it cannot be determined.
  4. run_reconciled records the same bounded duration fields when a previously unfinished run is resumed and trustworthy terminal processing is later completed.

Individual Peer identifiers, outputs, prompts, research conclusions, and raw error details are not collected.

2.3 Structured error summaries

Each lifecycle event may include up to 16 grouped summaries. Each group may contain only:

  • scope: run, generation, or peer;
  • stage: setup, launch, execution, finalization, or reconciliation;
  • error_type: configuration, resource, orchestration, runtime, external_dependency, storage, or unknown;
  • error_code: PRX-CAPACITY, PRX-PEER-LAUNCH, PRX-PEER-RUNTIME, PRX-RUNTIME, PRX-RUN-FAILED, or PRX-UNKNOWN;
  • reason_code: auth_error, quota_exhausted, rate_limited, timeout, provider_unavailable, runtime_error, tool_unavailable, invalid_request, budget_denied, budget_expired, capacity_unavailable, process_start_failed, state_unreadable, unexpected_termination, or unknown;
  • count: count of matching errors, capped at 65,535; and
  • count_capped: whether the count reached that cap.

The structure cannot contain raw error messages, logs, stack traces, provider responses, or arbitrary text.

2.4 Time fields

occurred_at is generated by the local Praxist client at a lifecycle milestone, converted to UTC using the local system clock, and may reflect clock inaccuracy. The Collector adds received_at after validating an event. This server receipt time cannot be supplied or changed by the client. It represents arrival time, not task completion time, and is used for storage management and retention rather than local duration calculation.

3. Data Praxist Does Not Collect

Product-usage events do not include:

  • research task content, prompts, research results, files, filenames, project paths, or commands;
  • environment variables, API keys, saved login credentials, logs, stack traces, raw error messages, or arbitrary text;
  • model names, service-provider names, provider responses, or account information;
  • names, email addresses, operating-system details, hardware information, Python version, client time zone, cookies, or arbitrary request headers; or
  • individual Peer identities or individual Peer outputs.

4. Network Information

Product-usage event bodies do not include IP addresses, cookies, or arbitrary request headers. Network services necessarily process connection information temporarily to deliver a request, protect the service, and apply rate limits. The Praxist Collector deployment disables access logging, strips forwarded IP, cookie, and client User-Agent headers before application processing, and does not persist them as product-usage event data. The client sends only a fixed, protocol-level User-Agent header.

5. Retention and Withdrawal

Delivered raw events are retained for no more than 180 days and are then deleted by the scheduled retention process. The User may run:

praxist product-usage withdraw

Withdrawal immediately disables future capture for the current user and deletes unsent local events. It does not delete already delivered events; those remain only until the scheduled retention period expires. The current state is available through:

praxist product-usage status --json

During Agent-assisted OOBE, the supported explicit sharing replies are Yes and Agree; the supported refusal replies are No and Disagree. An Agent must not infer a choice from other language.