Important
Please report security problems privately through GitHub: Report a vulnerability. Please don't open a public issue for anything that could put users at risk. Don't include real tokens or personal logs in a report.
Only the latest release gets fixes. The app updates itself, so please update before reporting. Security fixes ship as a new patch release as soon as they are ready, normally within a few days of a confirmed report, and the release notes say what was fixed once users have had time to update.
- Claude Code's login token, read from your keychain with
/usr/bin/security, used only to ask Anthropic for your usage limits (HTTPS toapi.anthropic.com). macOS may ask you to allow this. - Codex's ChatGPT login (
~/.codex/auth.json), only if you turn ChatGPT usage on; read-only, used only forchatgpt.com/backend-api/wham/usage. - Claude Code's logs (
~/.claude/projects), read-only, to count tokens. - Its own folder (
~/Library/Application Support/ClaudeUsage, mode 700): history, preferences and a small event log. No tokens are ever written there. - Network: Anthropic and (optionally) ChatGPT usage endpoints, GitHub (release check, change log, model prices). Nothing else, and no analytics.
Every release DMG is signed, together with its version number, with an Ed25519 key whose private half is kept offline on the maintainer's Mac, never on GitHub. The app has the public key built in and installs an update only if all of these pass: the download is from this repo's GitHub releases over HTTPS, the signature verifies for exactly that version (so an older signed image can't pass as a newer release), the SHA-256 matches, the app's bundle id and version are right, and its code signature is intact. Downloads have a time and size limit and may only redirect to GitHub's own hosts. An update that fails any check is discarded. Beta versions (Settings → About → Get beta versions) are GitHub pre-releases from the same repo and pass exactly the same checks. The app never builds or runs code from the repository when updating.
The app is ad-hoc signed (no paid Apple Developer ID), so macOS Gatekeeper treats it as unidentified on first launch. The terminal and Homebrew installs verify the SHA-256 of the DMG; the Homebrew cask pins it. If the signing key is ever lost or exposed, a new key will be announced in the releases and the README. The maintainer's key backup, restore and rotation steps are in RELEASING.md.
- Programs the app runs (
claude,codex) must be owned by you or root and not writable by others, and system folders are searched first. - Developer overrides (
CUB_*variables and test flags) are ignored in the shipped app. - The self-test suite (
ClaudeUsage --selftest) covers signature checks, URL validation and executable checks.
- 0.9.10 and 0.9.13 (October 2026): updater and supply chain, credentials and data, repository history, diagnostics. Led to offline release signing, version-bound signatures, download limits and log hardening.
- 0.15.1 (October 2026): install scripts, the Homebrew cask, the updater including the new beta channel, settings import and the release script. Two low-severity fixes: the in-app "copy command" pointed at a developer path instead of the official installer, and imported settings weren't kept to their normal ranges. Accepted as they are: the terminal installer and the cask trust GitHub for the first install (they check the SHA-256 published with the release, and the script itself is served from GitHub, so an offline signature check there would add nothing); the cask clears the quarantine flag because the app isn't notarised; settings import only accepts known keys with short plain values, after you confirm. Nothing medium or above is outstanding.
- 0.16.2 (October 2026): everything changed since 0.15.1 – the "other computers" log folders, the Windows helper script, pricing for Claude Haiku 5.5, the Reports fix and the settings export change. The updater, install scripts and Homebrew cask were unchanged. Fixed: logs from a synced folder are less trusted than your own, so token counts are now kept to a sane range (a crafted log with huge numbers could have overflowed the totals and crashed the app at every launch) and entries dated more than two days ahead are ignored (they would have written junk days into the saved activity); the Windows helper refuses a destination inside Claude Code's own log folder (it would copy into itself). Accepted as they are: the extra log folders are only read and stay on this Mac (not part of settings export); the helper copies raw logs, which contain your conversations, so the sync service you choose sees them (stated in the script, its guide and PRIVACY.md); the scheduled task runs the script with
-ExecutionPolicy Bypassfrom where you saved it, as you, so only you can change it. Nothing medium or above is outstanding. - 0.16.4 (October 2026): the two releases since 0.16.2 – the daily price-update job and the chart/history fixes. The job runs on GitHub with write access to one file only, uses a pinned action, takes only numbers and model names of a fixed shape from Anthropic's pricing page, and refuses to write if the page layout changes or a price moves more than ten-fold; the app checks the file again before using it. Nothing medium or above is outstanding.
- 0.16.7 (October 2026): the three releases since 0.16.4 – the HTTP 429 back-off, the log reader and the faster scan. The back-off honours the server's Retry-After but clamps it to 1–30 minutes, so a bad header can't stall refreshing. Logs and the update files are now read with plain reads instead of memory mapping (a failed page-in can no longer crash the app). The updater's trust checks, install scripts and Homebrew cask were unchanged. Nothing medium or above is outstanding.
Settings → Help & Legal shows exactly what "Copy" and "Report a Bug" include before you use them: app version, macOS version, chip, a few yes/no states (Claude Code found/signed in, update state, notifications, ChatGPT on/off) and a short local event log. No account details, file paths, tokens or usage numbers. Nothing is sent automatically.