Skip to main content
o4 runs on your machine. Your code, prompts and the model’s replies go to the model provider you use, and to other services only through tools, MCP servers and hooks (see Other network requests). o4 doesn’t send them to Open4rena. o4 also has anonymous telemetry, which is on by default: it records usage events in a file on your machine and sends one small daily ping. This page lists exactly what that covers, the other network requests o4 makes, and how to turn telemetry off.

Turn telemetry off

Any one of these turns off both the local events and the daily ping:
Set telemetry_enabled to false in ~/.o4/settings.json:
This keeps it off for every session. A project’s .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.
If settings.json isn’t valid JSON, or any value in it has the wrong type or an unknown choice, o4 ignores the whole file without a message, and telemetry is back on. Check the file after you edit it by hand, or use O4_TELEMETRY=0 as well. See the configuration reference.
There’s no telemetry switch in /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:
The Session tab of /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 to https://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 set O4_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.
Nothing is uploaded when 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.

Model providers

Your prompts, the conversation, file contents the model reads, and tool results are sent to the provider of the model you’re using, such as Anthropic, OpenAI or a local Ollama server. o4 also sends some requests to that same provider in the background, for example to summarize a session when it ends. What the provider does with that data is covered by your agreement with that provider. o4 sends model traffic only to providers you’ve configured. See Providers and API keys.