Skip to main content
Orchestra Local keeps your sessions and memories on your computer. To know how many people use it, and which parts of it, the CLI and the desktop app send a small, anonymous count each day. This page lists everything in it. The count is not all a Local install sends: it also checks get.orchestrahq.ai for new versions and downloads them, and it reaches your own model provider and your own git remote. Every request Orchestra makes lists them all, with the switch for each.

What is sent

The first time each of these happens on a given day, Orchestra sends one request to api.orchestrahq.ai:
  • an agent session is saved (by the capture hook or the background capture)
  • an agent session is dispatched or resumed
  • the terminal app opens
  • the desktop app opens
  • your agent calls one of Orchestra’s MCP tools
“A given day” is your computer’s date, and one more request goes out if the date in UTC changes while it is still the same day for you, so each UTC day is counted too. That is at most six requests a day, and usually one or two. Each one contains only these fields: Never sent: code, file or folder paths, repository names, prompts, session ids or content, your name, your email, or your git identity. The API passes on only the fields in the table: a field it does not know (from a newer version of Orchestra, say) is dropped, and only that field’s name is written to our server log, never its value. If the API refuses a count, Orchestra keeps it on your computer and sends it again the next day, for up to a week. Orchestra’s API removes your IP address before passing the count on to our analytics tool (PostHog), so it cannot be used to place you on a map. It passes on only counts from versions published at get.orchestrahq.ai, and adds which channel the version came from (release_channel). Our server logs keep a short, one-way tag of the install id, not the id itself. Builds made from source never send it. Only the released CLI and the installed desktop app do. If a count cannot be sent (you are offline, or our API does not answer), it is kept in ~/.orchestra/usage-outbox.json with the time it happened and sent the next time Orchestra sends one, for up to a week. Each install’s count for a day is recorded once however many times it is sent.

How our own use is left out

The CLI and the desktop app decide on your computer whether it is one of Orchestra’s own. They send internal: true when any of these holds:
  • a user.email in your git config ends in orchestrahq.ai or orchestrahq.io
  • the repository you are working in has its origin under github.com/Orchestra-Technologies-Inc
  • the copy of Orchestra was not built by our release process
  • your home folder is a temporary folder (a test run)
  • another home folder on the same computer was already found to be one of ours (Orchestra keeps that answer, and nothing else, in /Users/Shared/.orchestra-internal on a Mac, /var/tmp/.orchestra-internal on Linux and %PROGRAMDATA%\Orchestra\internal on Windows)
On a CI machine, in a test run, or in one of our release checks (any of the variables under Turn it off), nothing is sent at all. To check the first two, Orchestra reads your git config files and the current repository’s .git/config on your computer. It does not run git. Only the answer, true, is sent. Your email and your remotes are never sent, logged or stored. Once the answer is true, it is saved in ~/.orchestra/telemetry.json and stays. orchestra telemetry external removes it, and the check then leaves that choice alone.

Counting people, not installs

Both ids are 32 characters made with a keyed one-way hash (HMAC-SHA256, with a key only Orchestra uses). The same input always gives the same id, which is what lets us count, but the input cannot be worked out from the id, and another product hashing the same input gets a different value, so our ids cannot be matched with theirs. The hardware id and your account id never leave your computer; only their hashes do.

The day’s totals

Once a day is over, the next day’s first request is followed by one more with that day’s totals, as numbers: It also carries the installId, day, client, version, os, arch, internal, machineId and personId fields above. Never which session, memory, file or teammate: the totals are counted on your computer in ~/.orchestra/usage-counts.log, which keeps a one-way tag for each session (so a session saved twice counts once) and never its id, and the file is cleared as each day is sent. Totals older than a week that could not be sent are dropped.

On your phone

The Orchestra iPhone app sends the same count only if you said yes to analytics in the app. Once a day, the first time the app opens that UTC day, it sends: a random install id made by the app, the date and time, source: mobile, client: mobile, the app’s version, your phone’s operating system, mode: hosted, the one-way hash of your Orchestra account id (personId, as above) and your workspace id. Deleting the app deletes its install id.

In a hosted workspace

When you are signed in, Orchestra’s API counts the actions you take through it, such as creating an issue, opening a session, searching, or an agent calling one of Orchestra’s MCP tools. Each count is the action’s name (and the tool’s name), the app and version you used, how many times, your account, and your workspace. Never what you typed, what was saved, or what came back. We use these counts to see which parts of Orchestra teams use. They are part of running the hosted service, so orchestra telemetry off does not change them. Each time an agent starts in Orchestra’s cloud, the API also counts that run: which agent (such as Codex), whether it was new or resumed, whether it waited for a free sandbox, the app you started it from, your account, and your workspace. Never the prompt, the repository, or anything the agent did. The minutes a cloud run uses are billed to your workspace and are not sent here. The same goes for Orchestra Local signed in to a workspace on a paid plan. Once a day your laptop tells the API how many sessions you captured on it and how many minutes your agents ran, for counting the seats your workspace pays for. We also count those numbers per person and workspace, to see how teams use Orchestra. Never which sessions, repositories or files. Each report carries a random id made on the laptop for this count, so that two laptops are not counted as one; it is not made from anything about the machine. orchestra logout stops it. To count how many people use a hosted workspace each day, Orchestra’s own servers also read, once an hour, which signed-in people did something in a workspace that day (anything they did, not what it was), and record one “active that day” count per person and workspace with the same one-way hash of the account id used above.

Turn it off

Any one of these stops it:
  • Set ORCHESTRA_NO_TELEMETRY=1 or DO_NOT_TRACK=1 in your environment.
  • On a CI machine (where CI, GITHUB_ACTIONS, GITLAB_CI, BUILDKITE, CIRCLECI, JENKINS_URL, TF_BUILD, TEAMCITY_VERSION, BITBUCKET_BUILD_NUMBER or CODEBUILD_BUILD_ID is set) it is always off.
  • In a test run (VITEST, JEST_WORKER_ID, NODE_ENV=test, or any ORCHESTRA_E2E variable) and in our release checks (ORCHESTRA_RELEASE_CHECK) it is always off.
orchestra telemetry shows whether it is on, why, and your install id. orchestra telemetry on turns it back on. While it is off, no count is sent, nothing is counted, and no install id is made. The desktop app follows the same setting, and its Setup screen says what is sent, with a Turn off button for the same switch. To start over with a new id, delete ~/.orchestra/install-id and ~/.orchestra/install.json. Turning telemetry off does not stop the version check or update downloads below. They carry no install id and nothing about you or your work, and ORCHESTRA_NO_UPDATE_CHECK=1 stops them.

Every request Orchestra makes

This is every request an Orchestra Local install can make, from the CLI, its background service and the desktop app. Nothing else leaves your computer. The install script downloads from get.orchestrahq.ai too, and sends nothing else. The on-device search model comes inside the CLI, so nothing is downloaded for it. Requests to get.orchestrahq.ai are logged with the address they came from for 14 days, which is how we count downloads and the installs too old to send the daily count. So that one computer fetching the installer on several days counts once, we keep a salted one-way hash of each address (never the address) for at most 30 days.