Skip to content
overterm
Documentation

Privacy

What stays on this Mac, what leaves it, and why — specifically enough to check.

Overterm has no account, no server of its own, and no telemetry. It makes no network request to start. This page says what that means concretely, because “privacy-first” is worth nothing unless you can check it.

What leaves this Mac

Two things, and this is the whole list.

The update check. Once a day at launch, Overterm asks GitHub for the latest release — through your own gh, with your own login, in a subprocess. It compares the version with the one you are running, and a chip appears in the title bar if yours is older. Downloading an update is gh release download, again yours. Settings ▸ About ▸ Check for updates once a day, at launch (updates.checkDaily) turns it off, and then nothing is asked.

Whatever the agents themselves do. Claude Code and Codex are network applications: they talk to their providers, and they would do so in any terminal. Overterm starts them by typing their command into a shell, exactly as you would, and does not interpose itself. What they send is between you and them.

That is it. There is no analytics, no crash reporting service, no font or script fetched from a CDN, no licence check and no “anonymous usage data”.

Usage and cost: local files, no key

The usage pane reads files the agents write on this Mac:

What Read from
Claude’s quotas ~/.claude.json
Claude’s tokens ~/.claude/projects/**/*.jsonl
Codex’s quotas ~/.codex/sessions/**/rollout-*.jsonl
Codex’s tokens the same rollouts

Overterm makes no network request to produce any of those figures, and there is no API key anywhere in the app — none is needed, because nobody is being asked.

The one exception is a command you can switch off: with Ask the agents for fresh numbers on, Overterm runs claude -p "/usage" at most every ten minutes while it is the front application. That is Claude Code’s own command doing its own talking, with its own credentials. Overterm reads no credentials and calls no endpoint of its own.

The money figure prices those local token counts at published list rates held in the app. It is an estimate of API cost, not your bill, and the pane says so.

“Why this file changed”: local transcripts

The changes pane can say what Claude said when it edited a file. That comes from Claude Code’s own session transcripts under ~/.claude/projects, read off the disk, incrementally, off the main thread.

Nothing is sent anywhere to produce it, no model is called, and nothing is written back into those files. Without them, the pane shows the diff and no explanation.

The MCP server: loopback and a bearer token

When an agent can drive the browser, Overterm runs an MCP server. It is:

  • bound to 127.0.0.1 only, on a random port;
  • protected by a bearer token generated fresh each launch — a request without it gets a 401;
  • addressed per pane, at /mcp/<the pane's tab id>, so an agent reaches the browser of its own tab and no other;
  • configured through a file written at mode 0600 under Application Support, whose path is handed to that pane alone as OVERTERM_MCP_CONFIG.

Nothing is listening on any other interface, and the config directory is emptied at launch so a stale token cannot be reused. Settings ▸ Browser ▸ Agents can use the browser (browser.agentControl) off means the server is never started, no config file is written, and --mcp-config is not added to claude.

Browser data — cookies, local storage — is WebKit’s own persistent store for Overterm, shared between its pages and nobody else’s.

What Overterm reads on your disk, and why

It is a terminal and a git client, so it reads a good deal. All of it is local, and all of it is in service of something you can see on screen:

Read For
your checkout the file tree, the diffs, search
git, in subprocesses status, log, branches, worktrees, stashes
lsof on a tab’s own pids which port a tab is listening on
a tab’s process tree Tab Info, and what is running in a pane
~/.config/ghostty/config and themes your terminal configuration and your themes
$HISTFILE, ~/.zsh_history, ~/.bash_history a one-time seed of the palette’s history

Your Ghostty config is loaded and never written to. Overterm’s own Ghostty options go in a separate overrides file of its own. See Files on disk for everything Overterm writes.

Things that do not exist

Worth stating plainly, because each one is an attack surface Overterm does not have:

  • no overterm command-line tool;
  • no URL scheme, so nothing on a web page can ask Overterm to do anything;
  • no plugin system — the agents are a closed set of two, on purpose;
  • no multiple windows, because there is one process and one window.

What it is honest about not being

The release build is ad-hoc signed and not notarised, and the repository is private. That means two things you should weigh: macOS has not scanned the build, and you cannot read the source to check anything on this page unless you have access. If that matters to you, build it from source — the build pins Ghostty by commit hash and refuses to proceed if the tag has moved.