The short version

Kangentic is a desktop app that runs coding agents on your own machine. Your boards, tasks, and agent transcripts are stored on your device and are never uploaded to a Kangentic server.

Four things do leave your machine, and only these:

What leaves Where it goes Can you turn it off
Anonymous usage analytics, desktop Aptabase Yes, KANGENTIC_TELEMETRY=0
Crash and error reports, desktop Sentry Yes, KANGENTIC_ERROR_REPORTING=0 (or KANGENTIC_TELEMETRY=0, which turns off both)
Update checks, desktop GitHub Releases No setting
Crash reports, mobile official builds Sentry Yes, build from source

Separately, the coding agents Kangentic launches are third-party tools that talk to their own providers under your own accounts. That traffic is between you and them; Kangentic does not proxy it and never sees it. See Coding agents you run.

There is no Kangentic account, no login, no licence key, and nothing to sign up for. We do not sell data and we do not run advertising or cross-site tracking.

What stays on your device

The desktop app keeps its data in a local SQLite database in your operating system's application-data directory:

That local data includes:

None of this is transmitted to Kangentic. It is also not encrypted at rest: the database is an ordinary file protected by your operating system's file permissions, so it is only as private as the machine and user account it sits on. Credentials you supply for optional integrations, such as an Asana or Azure DevOps personal access token, are encrypted using your operating system's secure storage (Keychain on macOS, DPAPI on Windows, kwallet or libsecret on Linux). On a system where that secure storage is unavailable, Kangentic warns and falls back to storing them unencrypted, in which case you must trust the local filesystem.

Kangentic does not store API keys for any AI provider. The agent CLIs use their own credentials, which they manage themselves.

Desktop app: usage analytics

The desktop app sends anonymous usage analytics through Aptabase, a privacy-focused analytics service for desktop apps. Analytics are enabled by default in official packaged builds and disabled in development builds.

Events are high-level counters: the app launching, closing, or hitting an error; a project being created, moved, or re-pointed; an agent session starting, finishing, or failing to start; a task reaching Done; an update being applied; the shape of a board when it is opened; and whether one of ten named features has been touched today. Their properties are counts, durations, exit codes, the agent and model identifier, permission mode, and token and cost totals. Error messages are stripped of file paths and truncated before being sent, and no stack traces are included in an analytics event.

Counts are counts, never content. A board snapshot sends how many columns a project has and a bucketed range for how many tasks, never their names. A feature event says a feature was used on a given day, never what it was used for. No task titles, descriptions, file paths, project names, code, or agent output is ever included in an analytics event.

Two things in this stream are worth stating plainly rather than filing under "anonymous":

A stable identifier and an IP address are ordinarily personal data under the GDPR, so we describe them here rather than claiming the stream contains nothing personal at all.

Turning analytics off

Set the KANGENTIC_TELEMETRY environment variable to 0 or false. This disables every analytics event, including the installation identifier, and it disables error reporting too. To keep usage analytics and switch off only the error reports, set KANGENTIC_ERROR_REPORTING=0 instead. There is no in-app opt-out: the Privacy tab is informational only, so the environment variables are the control.

To make it permanent, add it to your shell profile or your system environment variables. For the full event table and per-platform instructions, see Privacy & Analytics in the documentation.

Desktop app: update checks

On every platform the app checks GitHub Releases for a new version shortly after launch and then every four hours. Each check reveals your IP address, the app version, and your platform to GitHub, in the same way visiting any web page would. Updates are downloaded only after a newer version is found, and installed when you quit the app.

Linux is the exception to that last step: a packaged Linux build checks and downloads like the others, but installing needs your package manager, so the update stays staged until you choose Restart to update. See Auto-Updates for details.

Desktop app: crash and error reports

When the desktop app crashes or hits an unexpected error, it sends an error report to Sentry, the same third-party error-monitoring service the mobile app uses, so the fault can be found and fixed. This is diagnostics, not analytics: it is about the app breaking, not about you using it. Electron's built-in crash reporter is never enabled, so no crash dumps or minidumps are uploaded.

An error report contains the error type, its message, the stack trace, the app version, and the platform. Before it leaves your machine, the Sentry SDK rewrites every stack-frame path and URL relative to the application root, so your home directory does not travel with the trace. Personally identifiable data collection is switched off in the SDK, Sentry's own server-side scrubbing is on, and performance tracing and session replay are never enabled.

The report carries the same anonymous clientId described above as its user identifier, so an issue can be counted as "installs affected" rather than left as an unbounded number of reports. It is the same non-reversible digest, with the same properties and the same opt-outs, and it is not used to build a profile of how you use the app.

The anonymous app_error analytics event described above still fires alongside it, and it is deliberately narrower: it carries a sanitised message and no stack trace. A user-interface error adds three fields that say where it happened: which of the three reporters caught it, the failing panel's label, and a trail of React component names. The raw component stack is never sent to Aptabase, because a production stack frame embeds a file:// URL containing your home directory. Kangentic reduces it to component names before anything leaves the process, and a name cannot carry a path.

Set KANGENTIC_ERROR_REPORTING to 0 or false to switch error reporting off while leaving usage analytics on. KANGENTIC_TELEMETRY=0 switches off both.

Mobile app: crash reports

When the mobile app crashes or hits an unexpected error, official builds send a crash report to Sentry, a third-party error-monitoring service, so the fault can be found and fixed. This is diagnostics, not analytics: it is about the app breaking, not about you using it.

A crash report contains the technical details of the failure, and nothing about what you were doing in the app:

It deliberately does not contain your session content. No screenshots, no screen recording, no on-screen text, no keystrokes, no console output, no network request details, no transcripts, terminal output, code or diffs, no notification content, and no pairing or encryption keys. Those are not stripped out afterwards; they are never collected in the first place.

There is no account to attach an identifier to, and the app sends no account, email, username, or user profile with a crash report, and does not use crash data to build any picture of how you use the app. A crash caught by the operating system, rather than by the app's own code, does carry one identifier: a random ID generated on your device by the crash-reporting software itself, not by Kangentic. It resets if you uninstall and reinstall the app, it is not your device's hardware ID or an advertising ID, and it is not used to identify you or to link a crash report to any other data.

Builds you compile yourself from the open-source repository have crash reporting switched off entirely and send nothing.

Mobile app: camera, microphone, notifications

Pairing your phone, and the relay

Pairing a phone to a desktop links them directly. Because the desktop usually sits behind a home or office router, both devices connect outward to a small relay server that forwards bytes between them.

Everything that crosses the relay is end-to-end encrypted between your phone and your desktop. The relay forwards opaque ciphertext and has no ability to decrypt it: it holds no keys, and the encryption is negotiated directly between your two devices inside the tunnel it forwards. Session content is never written to a Kangentic server or to any third-party service.

Being blind to content is not the same as being invisible, so here is what a relay operator can still observe, including Kangentic when you use the hosted one:

This is inherent to operating any relay and is not specific to Kangentic's. The relay writes nothing to disk, and its logs contain no connection identifiers and no client IP addresses. On the hosted instance, TLS is terminated by Cloudflare, which therefore sees the connection URL and the routing identifier it carries. You can remove Kangentic from this picture entirely by running your own relay: it is open-source and self-hostable, and pointing your desktop at it is a single setting. See The Hosted Relay and Self-Hosting the Relay.

Push notifications are delivered through Expo's push service and the platform push networks, which are Firebase Cloud Messaging on Android and APNs on iOS. Those services see your device's push token and delivery timing. They receive only the encrypted payload and a generic placeholder title, never the decrypted content.

On the phone, pairing keys and trust anchors are stored in your device's hardware-backed secure storage: the Keychain on iOS, the Android Keystore on Android. Session content lives only in memory on your device while the app is running.

Coding agents you run

Kangentic launches coding-agent command-line tools that you have already installed, using the credentials you have already configured for them. Supported agents are Claude Code, Codex, Gemini, Cursor CLI, GitHub Copilot CLI, Grok Build, Antigravity CLI, OpenCode, Aider, Qwen Code, Kimi Code, Factory Droid, Warp (Oz CLI), and Ollama.

With the exception of Ollama, which runs models locally, these tools send your prompts, your code, and their tool output to their own providers, under your own account with that provider. That is what they are for. Kangentic does not proxy those requests, does not hold the API keys, and does not see the traffic. What you send to each provider is governed by that provider's own privacy policy and your agreement with them.

Kangentic does read and store the resulting session transcripts locally, as described in What stays on your device, and it writes task titles and descriptions into the agent's terminal when you start or hand off a session.

Optional features that use the network

These are off unless you turn them on or connect them:

This website

kangentic.com uses Umami for basic traffic analytics: page views, referrers, coarse device and country information, and a count of clicks on the "Star on GitHub" links. Umami is cookieless and does not track visitors across other websites, so there is no advertising profile and no cross-site identifier.

The site is hosted on Cloudflare Pages. As with any web host, Cloudflare processes the network requests needed to serve pages to you, including your IP address.

What Kangentic never does

Retention

Your choices

Because there is no account, most privacy controls are things you can do directly rather than requests you have to make of us:

We hold no account, email address, or user profile, so there is no per-user record for us to look up, export, or delete on request. Crash reports carry no identifier that can be traced back to a person and expire on their own within 30 days. If you have a question about data you believe relates to you, contact us using the details below and we will help as far as the data allows.

Changes to this policy

If this policy changes, the date at the top of this page will change and the revised policy will be published at this same URL.

Contact

Kangentic is a product of VORPAHL LLC.

Questions about this policy can be sent to hello@kangentic.com or raised on the project's GitHub repository . For anything involving logs or private project details, use support@kangentic.com instead.

To report a security vulnerability, please use hello@kangentic.com with "SECURITY" in the subject line, or GitHub's private vulnerability reporting.