Privacy and network behavior
- OpenCode data is read locally from SQLite in read-only mode.
- The local-model journal (
--record-ollama,--record-usage,--record-event) stores usage metadata, not prompt or response content.--record-eventalso stores the project path and session id, when the adapter sends them. - Routing events contain only the JSON fields supplied by the caller.
- An LLM agent you point at the tool (
--summary-json, the Claude Code skill) reads token counts, model names, costs, project paths and session ids. Those travel to the model provider that agent runs on, as anything in its context does — that is your agent’s data flow, not this tool’s, which still transmits nothing. Nothing from your prompts or transcripts is in any export. - Prompts, completions, API keys, credentials, and interaction content are not collected.
- Claude Code session transcripts contain source code and secrets; only the
usageblock of each line is parsed. A test plants a fake credential in a transcript and fails if it reaches a usage record. ~/.claude.jsonis read to decide billing — only whetheroauthAccountis present and itsuserRateLimitTier/organizationRateLimitTierstrings — and for the cached rate-limit windows undercachedUsageUtilization, as the Subscription limits section itemises. The file also holds the account’s email, name, organisation, and per-project prompt history; none of that is retained or logged, and the parsed document is dropped at once..credentials.jsonandsettings.jsonare never read.--statuslinereads Claude Code’s statusline payload from stdin, and from it only the threerate_limitswindows’used_percentageandresets_at. The session id, transcript path, working directory, model and session cost in the same payload are never deserialised. It writes one file in the data directory,statusline-limits.json, holding those figures and the time they arrived, and nothing else. The environment is checked only for the presence ofANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKEN,CLAUDE_CODE_USE_BEDROCK, andCLAUDE_CODE_USE_VERTEX; their values are not read.- Copilot’s CLI store and session logs contain prompts, completions and tool
arguments in their
turnstable anduser.message/assistant.messagerecords; only theassistant_usage_eventscolumns andsession.shutdownaggregates are parsed, under the same planted-credential test as Claude Code. - Cursor’s
state.vscdbis never opened. See Why there is no Cursor collector. - Codex rollouts contain prompts, tool-call arguments and outputs, and
reasoning summaries; only
session_meta,turn_context, and thetoken_countblock (token counts, and therate_limitswindows beside them) are parsed, under the same planted-credential test as Claude Code.~/.codex/auth.jsonis a credential file and is never opened; the environment is checked only for the presence ofOPENAI_API_KEYandCODEX_API_KEY. - Omarchy’s agents-panel records are read-only display data: six fields per
record (
id,name,updatedAt,ready,tierLabel,usageStatusText,limits). The agents’ credentials, Omarchy’s probe cache, the record’sauthHelpTextand token tallies are never read, no network request is made, and the reader writes nothing into the directory. --omarchy-recordis the one write into Omarchy’s directory, and only that explicit action performs it:<id>.json(opencodeby default) holding token counts, model ids, request and session counts, and budget figures — never content, never a path. Ids that would overwrite Omarchy’s own files (claude,codex,fireworks) are refused; the file is written atomically with mode 0600.- Per-project attribution records the working directory path of each
session, so
~/a/buildand~/b/buildstay separate projects. The dashboard shows only the shortest name that distinguishes them, but--jsonand--csvexport the full path — worth knowing before pasting an export into a ticket. - Normal dashboard and export operation does not require a network request,
and nothing is written outside the tool’s own data directory unless
--omarchy-recordis run. --refresh-pricing,--refresh-zen, and an enabledzen_pricingbackground collector make outbound requests to OpenCode/Zen endpoints.- Two commands ask GitHub for the latest release tag, and nothing else does:
--check-update, whose only job is to ask and cache, and--doctorwhen[update] check = true. Off by default, never automatic, and never on the dashboard’s refresh path. It is a plain GET of a public endpoint: no usage data, no identifiers, no query parameters. The User-Agent names the tool and its version because GitHub’s API requires one. - That answer is cached in the tool’s own data directory, and the dashboard
reads it once at startup to show a newer release in its header. The cache
is what keeps the header offline: it redraws several times a second and never
makes a request or reads a clock. Only those two commands write it, so with
neither run the header stays silent — except for an answer an earlier run
already left, which
--doctordiscloses. - A recurring check is yours to schedule, not the dashboard’s to make:
contrib/systemd/user/ai-usage-update.timerruns--check-updatedaily, and any other scheduler can run the same command. The dashboard process itself never makes the request, whatever the config says. - Reporting how this copy was installed and how to upgrade it needs no
network at all.
--doctorreads it off the running binary’s own path, so it is always on and works offline.
Default local storage paths (when the corresponding XDG variable is unset):
| Data | Path |
|---|---|
| OpenCode usage, read-only | ~/.local/share/opencode/opencode.db |
| Claude Code config document, read-only (billing and cached rate-limit windows) | ~/.claude.json |
Claude Code rate-limit windows, written only by --statusline |
~/.local/share/ai-usage-tui/statusline-limits.json |
| Codex session logs, read-only | ~/.codex/sessions, ~/.codex/archived_sessions |
| Omarchy agents-panel records, read-only | ~/.local/state/omarchy/agents/usage |
Omarchy agents-panel record, written only by --omarchy-record |
~/.local/state/omarchy/agents/usage/<id>.json |
| Local-model and routing journal | ~/.local/share/ai-usage-tui/usage.db |
| Zen pricing cache | ~/.local/share/ai-usage-tui/zen-pricing.toml |
| Zen model catalog | ~/.local/share/ai-usage-tui/zen-models.json |
Latest-release answer, written only by --check-update or an opted-in --doctor |
~/.local/share/ai-usage-tui/update-check.json |
| Configuration | ~/.config/ai-usage-tui/config.toml |
Everything under ~/.local/share/ai-usage-tui/ is created readable and writable by you alone
(0600), the journal’s SQLite side files and the diagnostic log included. A file that is
already there keeps the permissions it has: a journal made by an earlier release stays as wide
as it was, --doctor says so, and chmod 600 is yours to run.