Investigations

Does your AI phone home?

Seven local AI tools tested, what each one sent captured, and how to check any tool yourself.

0:00
Does your AI phone home?
Illustration: StrideNote

A model that runs on your own machine keeps your prompts on your own machine. That is the promise of local AI, and it holds. It says nothing about the software wrapped around the model. Between July and August 2026 we installed seven tools from a working local AI stack on our test machine, read their code, listed every network connection they held and, where we could, captured what they sent. Two of the four tools with reporting code contacted a server without being asked. None of our captures showed a prompt leaving the machine. This page is the index to those investigations: what we tested, how, what we found, and how to run the same checks on the tools you use. For a business deciding which of these tools staff may install, a section below turns each finding into the decision it forces.

Which local AI tools phone home?

Of the seven tools we tested, two report to an outside server by default. OpenJarvis sends one usage event per chat session to a PostHog analytics host, keyed to an anonymous install ID, and flushes it on a 30 second cycle. Its own documentation promises to explain how to opt out and never does. OpenCode opens a connection to its Sentry crash-reporting endpoint at launch, before anything is typed and before a project is open, from a production address compiled into the shipped app. Sentry’s own list of what its SDK collects runs to stack traces, OS and runtime versions, and the IP address of the request. It ships 41 disable flags. None of them turns that off.

Update, 19 October 2026: OpenJarvis has since merged a change, on 14 October, that makes its analytics opt-in. The finding above describes the version we tested in July.

The other tools tell a quieter story. LM Studio opened no outbound connection at rest: six processes, three sockets, all on localhost. What it does do, by default, is route model search and download through its own proxy, so its operator sees which models you look for. The Hugging Face library under most model downloads carries a 125-line telemetry module that nothing in the library calls, and reports your Python and PyTorch versions in a header on every request instead. Hugging Face documents an HF_HUB_DISABLE_TELEMETRY variable; it governs the function nothing calls, not the header. Graphify, the tool we trusted least going in, opened no connection beyond the local model server across 358 socket samples.

The count that matters is not two of seven. It is that in every capture we made, the payload held counters, timings and hashed names, never a prompt. Where we did not capture a payload, as with OpenCode, we say the finding is open.

How do we test whether an AI tool sends data?

Every finding on this desk comes from one of three kinds of evidence, and each article says which. The strongest is a capture: we point the tool’s reporting host at a listener on our own machine, run one fixed task with reporting on and then off, and compare what arrives. That is how we found the single OpenJarvis event, and how we confirmed that enabled = false under an [analytics] heading in its config file stops it, a switch its documentation never names.

The second kind is a socket listing. We launch the tool, do nothing, and list the connections its processes hold. Anything bound to 127.0.0.1 is talking to the machine it runs on. An established connection to an outside address is a question, and we resolve the address to see whose it is. The third kind is reading the shipped code, as we did when we read the whole of Graphify before installing it and listed all eight addresses hard-coded in its source.

The method depends as much on what it rules out. Fifteen hits for “amplitude” in OpenCode’s bundle were an SVG filter attribute. More than 150 references to OpenTelemetry had no exporter and no collector address. A Chrome-named crash handler in three apps had no upload address. A crash reporter in a bundle proves nothing on its own; what counts is the destination it would send to. Every retest that changed a finding is recorded in the article it changed, because a report that shows how a finding was reached can be checked rather than believed.

What did the telemetry investigations find, tool by tool?

The desk has published eleven pieces on this question so far. The list below runs in the order the work happened, with the finding each one established.

Two patterns run through the list. The first is that the alarming names were poor evidence and the ordinary plumbing was where the data went: a user agent header, a model search proxy, a session envelope. The second is that off switches are missing, hidden or pointed at the wrong thing. OpenJarvis has a switch its documentation never names. OpenCode has none. The Hugging Face library documents a switch for a function that is never called.

How can a business use the AI telemetry investigations to approve local AI tools?

Each finding above maps to a choice an IT or security team can make on the day it approves a tool. These are conditions, not quality verdicts: the settings under which each tool behaved the way our captures and socket listings showed.

OpenJarvis can be approved with a configuration line. Setting enabled = false under [analytics] in its config file stopped the one usage event per session in our capture. Ship that line with the install, and redirect the installer’s own analytics call, which has no off switch.

OpenCode cannot be quietened from inside the app. Its crash reporter connects at launch, and none of its 41 disable flags reaches it. The choices are to accept that connection or block the Sentry host at the network. We have not captured that payload, so a cautious team treats the finding as open.

LM Studio opened nothing outbound at rest, but model search goes through its own proxy by default, so its operator sees which models staff look for. Decide whether those search terms matter to you. For the Hugging Face library, expect Python and PyTorch versions in a header on every download request; the documented telemetry variable does not change that.

Graphify, pointed at a local model server, stayed on the machine across 358 socket samples. Approve the exact package name and the local backend together.

This page is the index. For a procurement file, the Local AI Telemetry Report 2026 is the document to attach: it gathers these findings into one dataset with an evidence grade on each, and it records the version tested every time.

How do you check your own AI tools for telemetry?

Four of the five checks we use need nothing beyond what ships with the operating system. Open the tool and do nothing, then list the connections its processes hold; on macOS, lsof -nP -iTCP -a -p <pid> does this for one process. Read the settings file for keys named for analytics, telemetry, usage, proxy or mirror, and check whether an access token is stored, because a token turns an anonymous request into an attributed one. Search the bundle for a destination, a DSN or a collector URL or a hard-coded host, rather than for the name of a library. Filter identifier-shaped values by where they live: a value inside a compiled binary is a build constant, many values that grow with use are session IDs, and one small value created at install and never changed is a machine identifier.

The fifth check is the capture, and it is the only one that shows the bytes. If a tool lets you set its reporting host, point it at a listener on your own machine and run the same task with the setting on and off. Where a tool does not expose that setting, as OpenCode does not, the honest result is an open finding, not a clean one. Proving your data never leaves is a method, and the method has limits we state each time: a socket listing is a snapshot, we did not induce a crash in any tool, and every test ran on one Mac on the version installed that day.

These eleven pieces are the basis of the first Stridenalysis report, the Local AI Telemetry Report 2026, which gathers them into one dataset with an evidence grade on every finding. It will publish once the next round of tests is complete: sixteen agents that can run a local model, each put through the same captures, with the version recorded every time. A tool that is not on this page has not been cleared. It has not been tested yet.

More from Investigations