About CC One
Your AI CLI usage, owned by you. cc one reads the session logs your AI CLIs already write and turns them into tokens, cost, cache efficiency, and trends — a local-first dashboard with optional multi-device sync through a GitHub repo you control.
Why
Every session with Claude Code, Codex, Gemini CLI, Grok CLI, or OpenCode writes a log to disk — tokens, cache hits, spend — all in plain text, unread. cc one reads those logs and turns them into a clear picture: what you spent, what you received, and where your tokens went. It also manages provider switching, writing the exact config file each CLI reads.
Two principles govern the design:
- Local-first. The full dashboard works with zero network — the logs already on your disk are all it needs.
- Read-only toward your logs. cc one never modifies session logs or tool behavior. The sole write is provider switching: always your explicit action, always backed up first.
Multi-device sync is an opt-in layer, never a precondition.
Features
Providers
- One config hub for all five CLIs — switching a provider writes the real config file that CLI reads, merging controlled fields only, with the previous file backed up first.
- 59 built-in presets — select one, enter your API key, and switch. Import from CC-Switch, local config files, or a CC One backup; export the whole list as JSON anytime.
- Model role mapping — five roles (Sonnet / Opus / Fable / Haiku / Subagent), each with its own model and a 1M-context toggle; one click fetches the vendor's model list.
- Structure syncs, keys never — the provider list syncs per device; API keys are stripped from anything that leaves your machine.
Dashboard
- Four-bucket token economics — input / output / cache creation / cache read, normalized across CLIs into one model that matches your bill.
- Cache-hit rate, model distribution, requests & cost — models ranked by tokens, each with its own cache-hit rate; totals frozen at collection time.
- Trends & request log — multi-metric trend chart with today-vs-yesterday delta; per-call log with token breakdown, cost, and full details on click.
Sessions
- Browsable history — every conversation grouped by project, full-text search, filters by time / source / model / device.
- Complete transcripts, instantly — stored locally at collect time, rendered as markdown with syntax highlighting; in-session search with hit-highlighting and jump.
- Local & Favorites — private local groups that never leave this machine; favorited sessions sync across devices with source-device badges. Only favorited sessions ever leave your machine.
Sync (optional)
- Your own repo, plain text — usage projected into human-readable, per-device, per-day JSONL in a GitHub repo you control; no third-party server in the middle.
- Conflict-free by construction — device-isolated writes, deterministic artifacts, self-healing rebases.
- System-proxy aware; dashboard, glance card, and tucked bar can be scoped to a single device.
Library
- Drag-to-relay upload — drop files or directories into the window; they travel through your sync repo into that device's subtree.
- In-app preview & manual export — images, text/JSON, sandboxed rendering for the rest; export to a path you choose.
Cost & pricing
- Editable per-model pricing, one-click LiteLLM cost-map fetch, rebill for records collected without a price, JSON import/export.
Experience
- Glance mode — a tucked mini-bar or a floating card mirroring the dashboard; each shape retains its placement.
- Multi-skin theming, tray-resident background collection (5s–60s), signed auto-updates, UI in English / 简体中文 / 日本語.
What stays local, what syncs
| | Standalone | Synced (repo bound) |
| ------------------------------------------------ | ---------- | -------------------------------------------- |
| Usage, cost, trends, request log | Local only | Syncs across devices |
| Session transcripts & favorites | Local only | Favorited sessions sync; the rest stay local |
| Provider structure | Local only | Syncs per device — API keys never sync |
| Library files | Local only | Syncs across devices |
| Settings, skins, pricing overrides, local groups | Local | Local — never written to the repo |
Nothing leaves your machine unless you bind a repo and enable sync. The access token stays on your machine and is never written to the repo.
How it works
A Tauri 2 app: a Rust backend handles collection, the local store (the single source of truth), provider config writes, and optional sync; a React frontend renders the dashboard through generated, type-safe IPC bindings.