Last updated 2026-09-09 · pilot period
Privacy
Terminal Intelligence is a personal project run by David Fleming, an individual. No company has been incorporated to operate it. This page describes what the current pilot build actually sends and where it goes. See Terms for pricing and usage terms. This policy has not been reviewed by a lawyer — see the note at the bottom.
Two separate data flows
Terminal Intelligence sends data to the internet in two distinct ways that are easy to conflate. Keep them separate:
1. Product telemetry — counts only
By default the app sends an anonymous installation identifier, an event name, and an optional result code to the TI Relay (running on Cloudflare Workers) for seven named events. These are the only events the client can submit:
install onboarding_complete explain translate insert quota_hit useful_recovery
Two further events exist in the same counts-only telemetry stream but are
written by the Relay itself, never by the client, and cannot be forged or
replayed by an app on your Mac: trial_started (written once,
server-side, the first time a device attempts an AI action) and
activate (written once the Relay itself successfully activates
a licence key through Lemon Squeezy's own licence activation API, not by
anything the app reports). None of this
telemetry includes command text, terminal output, file paths, hostnames,
or usernames. It can be turned off in Settings or with
ti telemetry off; local history via ti funnel keeps
working either way.
Every request to the Relay is also processed by its origin IP address for abuse prevention: the Relay counts requests per IP address per hour (a velocity limit) to stop runaway or abusive traffic before it reaches the AI provider. That count is kept in a per-IP-per-hour bucket for rate limiting; how long Cloudflare's underlying infrastructure retains request IP addresses in its own logs, separate from this counting, has not been independently verified for this policy and is not promised here.
2. AI requests — what actually gets sent to generate an answer
When you ask Terminal Intelligence to explain something or translate a request into a command, more than just the visible error text is sent to generate an answer. The current app sends, as part of that one request:
- the failing command and its terminal output, or your natural-language request;
- your current working directory;
- your last several recent commands and their exit status (ok/error), to give the model context on what you were doing;
- the detected project type for your current directory (inferred from
the presence of files like
package.json,Package.swift,Cargo.toml,go.mod,requirements.txt/pyproject.toml,Gemfile, or a.gitfolder — just which kind of project it looks like, not file contents); - a handful of local machine facts: macOS version and architecture,
whether this Mac has Wi-Fi hardware and whether it's currently
connected (never the network name), which network interface is
currently active, and the names (not contents) of CLI tools found
locally — either in a short ambient list from
~/.terminal-intelligence/binand your project folders'node_modules/.bin, or, when asking about one specific tool by name, an exact yes/no lookup of whether that named tool exists on your PATH or in those same folders; - your shell and terminal app name (zsh, Terminal.app).
Directory paths and recent commands can contain your Mac username (e.g.
inside /Users/yourname/...) and project or file names you
chose yourself. Terminal Intelligence never reads or sends your Wi-Fi
network name or any hardware address.
Where that request goes depends on your setup:
- TI Hosted (default): the request goes to the TI Relay,
which forwards it to OpenRouter with
data_collection: denyset on the provider request — a request-level instruction that OpenRouter not retain or use the content for training. We have not independently verified how OpenRouter's own systems honor that flag beyond what its own documentation states, and we do not promise a specific retention period on OpenRouter's or its underlying model providers' side. The Relay itself logs counts, latency, and result codes for the request, not the prompt content. - Bring your own key (Anthropic or OpenRouter): the request goes directly from your Mac to that provider using your own credentials, under that provider's own terms and privacy policy, which this site does not control and has not independently verified.
Before either path, the app applies best-effort, pattern-based secret
redaction to the command, output, and recent-command text (things that
look like an Authorization header, a bearer token, an
environment-variable assignment, or a handful of known API-key formats
such as sk-..., ghp_..., and AWS access keys).
This is pattern matching against known shapes, not a guarantee:
it will not catch a secret in a format it doesn't recognize, and it is
not applied to every field described above (for example, local machine
facts and directory paths are not run through the same secret patterns,
since they aren't expected to contain them, but that also means anything
unexpected in a path is not filtered). Do not rely on it as a substitute
for keeping secrets out of commands, output, and file paths in the first
place.
Payment
Paid checkout is not yet live on this site or in the app; there is no way to pay Terminal Intelligence today. Pilot access is arranged directly by email. When checkout is enabled, subscription billing will run through a third-party payment processor under that processor's own terms, and this page will be updated to name it and describe what it collects before checkout goes live.
Contact
Questions about this policy or a request to delete data: email support@terminalintelligence.app.
This page describes the pilot product's actual current behavior as of the date above, to the best of the founder's knowledge, and will be revised as the product changes. See Terms for pricing and usage terms.