Turn telemetry off
Any one of these turns off both the local events and the daily ping:- Settings file
- Environment variable
Set This keeps it off for every session. A project’s
telemetry_enabled to false in ~/.o4/settings.json:.o4/settings.json can set it too, and the project value wins in a trusted workspace, so a trusted project can turn telemetry back on for sessions started there. The environment variables below turn it off whatever either file says./config and no command-line flag for it; use one of the methods above.
What o4 records locally
While telemetry is on, each session in the terminal interface appends events to~/.o4/telemetry/events.jsonl, one JSON object per line. Print mode (o4 -p) and the other subcommands don’t record events. This file stays on your machine unless you set O4_TELEMETRY_ENDPOINT (see Sending events to your own endpoint).
Every event also has a
timestamp and the session_id of the o4 session it came from. For example:
/stats totals the events in this file across all your sessions. With telemetry off, nothing new is added to it, so /stats shows only what was recorded before, or No telemetry data recorded yet. See Context and cost.
The daily ping
At most once every 20 hours, when a session starts in the terminal interface, o4 sends one HTTPS request tohttps://t.open4rena.ai/p with exactly these four fields:
The install ID is stored in
~/.o4/telemetry/install_id. Delete that file to get a new one. The time of the last ping is stored in ~/.o4/telemetry/last_ping. o4 records the time before it sends, and the ping is fire-and-forget: if it fails, for example because you’re offline, o4 doesn’t show an error and doesn’t try again for another 20 hours.
What o4 never collects
Telemetry never includes your code or file contents, prompts, the model’s replies, file paths or file names, API keys, or error messages.Sending events to your own endpoint
If you setO4_TELEMETRY_ENDPOINT to a URL, o4 also uploads the local events to it. Every 5 minutes, and once more when the session ends, o4 sends the contents of events.jsonl as a JSON POST with the body {"events": [...]}. After a successful upload, it empties the file. If the upload fails, the events stay in the file for the next attempt. o4 doesn’t wait for the upload at the end of a session, so if o4 exits before it finishes, those events go out with a later upload.
O4_TELEMETRY_ENDPOINT is unset, which is the default, or when telemetry is off.
O4_PING_ENDPOINT changes where the daily ping goes, for example to a mirror on a network without internet access.
Other network requests
Apart from telemetry and your model providers, o4 connects to these services. None of them receive your code or prompts.
The model’s own tools also make requests when it uses them:
fetch and web_fetch download the URLs it asks for, web_search queries Brave Search, Tavily or DuckDuckGo depending on which keys you’ve set, and remote_trigger posts a prompt, with your o4 session ID in an X-O4-Session header, to the URL the model names. o4 asks you before every remote_trigger call. MCP servers and hooks you configure can make their own requests. See Tools.
o4 doesn’t check for updates. To update, reinstall it; see Install o4.