Skip to main content

Privacy

PreviewAvailable on: WindowsShips in the preview channel only. Not a stable release.

What stays on your machine, what leaves it, and how to turn reporting off.

What stays local

Harmony is local-first by construction, not by policy. The daemon, your terminals and scrollback, tasks, artifacts, agent-to-agent messages, channels, voice models, and MCP integration all run on your machine.

There is no cloud host in the path of your work, and local use does not require a Harmony account.

What leaves your machine

Three things, and only three:

WhatWhenTo whom
Provider trafficWhen you run an agent turnThe provider you chose
Release checks and downloadsOn update check or installThis site
Usage and lifecycle reportingOnly if you opt inThis site

Provider traffic is the significant one. When you run an agent, your prompts and whatever context that agent gathers go to that provider under that provider's privacy policy. Harmony does not proxy, inspect, or retain it — but it also cannot make a third-party provider private.

IMPORTANT

Choosing a provider is choosing a privacy policy. If a repository must not leave your machine, use a local model, not a hosted one.

Usage reporting

Off unless you turn it on. Harmony asks once, on first run, and doing nothing leaves it off. Declining, dismissing the prompt, and pressing Escape are all the same answer.

This section previously described lifecycle reporting as "identifier-free". That was not accurate and is worth correcting plainly: every report carries one random installation UUID, and always has. It is what makes a machine that opens Harmony every day count as one machine rather than thirty. It is not an account id, it is generated on your machine, and it is not linked to anything you sign in to.

What is reported

KindEventsWhy
Install and updatefirst launch, update check, update available, download started, downloaded, installed, failed, repairWhether builds reach people and actually run
Usageone heartbeat per day, session opened, session ended, feature usedWhether anybody uses it, and which parts

Each report carries the installation UUID, the version, the release channel, and the platform. Feature use carries a name from a fixed list and a count. Session length is reported as a bucket rather than a duration, so "under a minute" or "one to four hours" but never a start and end time.

The fixed list of feature names is, in full:

NameCounted when
pane_splita pane is split
pane_closea pane is closed
terminal_opena terminal is opened
session_reattacha session is reattached
voice_dictationdictation is used
agent_spawnan agent is launched
task_createa task is created
task_completea task is completed
worktree_createa worktree is prepared
channel_posta message is posted to a channel
browser_session_starta browser session is started

The last six are counted when an agent uses the corresponding tool. Only the name and a count leave your machine: not what the agent was asked to do, not which repository or worktree it touched, not the channel or its contents, and not the page a browser session opened. Those are on the never-reported list below and stay there.

What is never reported

Not "minimised" or "anonymised" — absent:

  • your code, prompts, or agent responses
  • terminal input, output, or scrollback
  • filesystem paths
  • project, repository, or worktree names
  • environment variables, credentials, tokens, or API keys
  • IP addresses, or the raw user-agent string
  • account, profile, or user identifiers
  • free text of any kind

The complete wire contract lives in the repository as telemetry-contract.json, with the same file byte-identical on both sides so neither can quietly start sending more than the other accepts.

Retention

Reports carrying an installation UUID are deleted after 180 days. Daily aggregates, which carry no identifier at all, are kept.

Turning it off

Settings → Privacy, or:

nala telemetry off

Or override it for a single invocation:

$env:NALA_TELEMETRY = "0"

nala telemetry on its own shows the current setting. Turning it off also deletes anything queued locally and not yet sent.

Voice

Voice runs on-device. Dictation uses a local Whisper process; Read Aloud uses a local Kokoro model. Models are downloaded once, then used offline.

Audio is not uploaded to Harmony. What you dictate becomes text that goes wherever you send it — including, if you dictate into an agent pane, to that agent's provider.

Diagnostics and support bundles

Diagnostics are generated locally and are not transmitted unless you send them.

WARNING

Diagnostics contain absolute filesystem paths, workspace and repository names, and provider details. Those routinely reveal usernames, client names, and unreleased project names. Review and redact before sharing.

Data on disk

Harmony stores its state in a per-user data directory, namespaced by the runtime data suffix so development and packaged installs stay separate. Sessions, task state, artifacts, and scrollback live there.

Deleting that directory deletes your durable work. It is not a cache.