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 toapi.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
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 sendinternal: true when any of these holds:
- a
user.emailin your git config ends inorchestrahq.aiororchestrahq.io - the repository you are working in has its
originundergithub.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-internalon a Mac,/var/tmp/.orchestra-internalon Linux and%PROGRAMDATA%\Orchestra\internalon Windows)
.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, soorchestra 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=1orDO_NOT_TRACK=1in your environment. - On a CI machine (where
CI,GITHUB_ACTIONS,GITLAB_CI,BUILDKITE,CIRCLECI,JENKINS_URL,TF_BUILD,TEAMCITY_VERSION,BITBUCKET_BUILD_NUMBERorCODEBUILD_BUILD_IDis set) it is always off. - In a test run (
VITEST,JEST_WORKER_ID,NODE_ENV=test, or anyORCHESTRA_E2Evariable) 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.