Repository files navigation

UsageAtlas app icon

UsageAtlas

One desktop dashboard for your AI coding usage.
See quota, resets, tokens, requests, and cost across Codex, Claude, Cursor, and OpenCode — read locally, never uploaded.

Download for Windows, macOS, or Linux · All releases

CIWindows, macOS, and LinuxMIT license

Screenshots

Today view with total tokens, capacity meters for each tool, and hourly activityInsights view with a heatmap of a typical week in two-hour blocks

Install

Get an installer from usageatlas.com or the releases page, then:

  • Windows — run the .exe installer. Builds are not Authenticode-signed yet, so choose More info → Run anyway at the SmartScreen prompt.
  • macOS — open the .dmg and drag UsageAtlas into Applications. Builds are signed and notarized.
  • Linux — run the .AppImage, or install the .deb or .rpm.

Every asset is listed with its SHA-256 in SHA256SUMS on the release. macOS and Windows update themselves in the background.

What it reads

UsageAtlas reuses the credentials the tools already keep on your machine. Nothing else is needed to sign in.

  • Codex — talks to the installed, signed-in Codex CLI through its official local app-server API. The OAuth token is never read.
  • Claude — reads CLAUDE_CODE_OAUTH_TOKEN or .credentials.json in your Claude config directory, then queries the OAuth usage endpoint.
  • Cursor — reuses the signed-in desktop session from Cursor's local state database for account limits plus 90 days of per-request token, model, and cost history.
  • OpenCode — reads the local OpenCode database for per-step token, request, project, model, and cost analytics.

Four more providers are on the way. A provider only ships once it has complete authentication, structured error handling, and deterministic adapter tests.

Highlights

  • Today view with capacity meters, reset times, plan details, credits, and hourly activity
  • History and insights across 7, 30, and 90 days by project, session, model, and tool
  • Usage alerts that fire a native notification before you run into a limit
  • Tray presence, launch at login, and system/light/dark themes
  • Local-first: no account, no sync, and no usage data leaves the machine
  • Sealed local history: completed days are stored on disk so past usage survives restarts and provider outages
  • Sandboxed renderer with no Node.js access, an allowlisted preload API, ASAR integrity, and Electron fuses

Privacy

Provider data is read from local files and provider APIs. Completed-day usage and capacity snapshots are sealed into a local history database in the app data directory. There is no UsageAtlas account and no cloud sync. An anonymous install count tells us how many people use the app; it never includes usage figures and can be switched off in Settings. Diagnostics are redacted before they are shown or copied.

Build from source

Requirements: Bun 1.3.14 and Node.js 22.13+.

git clone https://github.com/SRX9/UsageAtlas.git
cd UsageAtlas
bun ci
bun run desktop:start

bun run check runs lint, typecheck, tests, and the build. bun run desktop:make produces installers for the current platform with Electron Forge; unsigned builds need no credentials.

The repo is a Bun + Turborepo workspace: the Electron app lives in apps/desktop, shared schemas and fixtures in packages/contracts, and build helpers in tooling.

Releases

Every push to main ships a release. CI takes the version in apps/desktop/package.json, moves the patch number to the first one that is not published yet, records that back on main, then builds, signs, and notarizes every platform, tags desktop-v<version>, and publishes the installers, SHA256SUMS, and the update feeds the in-app updater consumes. Write a new major or minor version there by hand and it releases as written instead.

See CONTRIBUTING.md to contribute and SECURITY.md to report a vulnerability privately.

Acknowledgements

Inspired by CodexBar by Peter Steinberger. Charts are vendored from Dither Kit.

License

Source code is available under the MIT License. The UsageAtlas name and logo are not covered by it — see TRADEMARKS.md.

About

Track all your AI coding usage and limits, Claude Code, Codex, Cursor, OpenCode and more. One picture.

Topics

Resources

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

UsageAtlas app icon

UsageAtlas

One desktop dashboard for your AI coding usage.
See quota, resets, tokens, requests, and cost across Codex, Claude, Cursor, and OpenCode — read locally, never uploaded.

Download for Windows, macOS, or Linux · All releases

CIWindows, macOS, and LinuxMIT license

Screenshots

Today view with total tokens, capacity meters for each tool, and hourly activityInsights view with a heatmap of a typical week in two-hour blocks

Install

Get an installer from usageatlas.com or the releases page, then:

  • Windows — run the .exe installer. Builds are not Authenticode-signed yet, so choose More info → Run anyway at the SmartScreen prompt.
  • macOS — open the .dmg and drag UsageAtlas into Applications. Builds are signed and notarized.
  • Linux — run the .AppImage, or install the .deb or .rpm.

Every asset is listed with its SHA-256 in SHA256SUMS on the release. macOS and Windows update themselves in the background.

What it reads

UsageAtlas reuses the credentials the tools already keep on your machine. Nothing else is needed to sign in.

  • Codex — talks to the installed, signed-in Codex CLI through its official local app-server API. The OAuth token is never read.
  • Claude — reads CLAUDE_CODE_OAUTH_TOKEN or .credentials.json in your Claude config directory, then queries the OAuth usage endpoint.
  • Cursor — reuses the signed-in desktop session from Cursor's local state database for account limits plus 90 days of per-request token, model, and cost history.
  • OpenCode — reads the local OpenCode database for per-step token, request, project, model, and cost analytics.

Four more providers are on the way. A provider only ships once it has complete authentication, structured error handling, and deterministic adapter tests.

Highlights

  • Today view with capacity meters, reset times, plan details, credits, and hourly activity
  • History and insights across 7, 30, and 90 days by project, session, model, and tool
  • Usage alerts that fire a native notification before you run into a limit
  • Tray presence, launch at login, and system/light/dark themes
  • Local-first: no account, no sync, and no usage data leaves the machine
  • Sealed local history: completed days are stored on disk so past usage survives restarts and provider outages
  • Sandboxed renderer with no Node.js access, an allowlisted preload API, ASAR integrity, and Electron fuses

Privacy

Provider data is read from local files and provider APIs. Completed-day usage and capacity snapshots are sealed into a local history database in the app data directory. There is no UsageAtlas account and no cloud sync. An anonymous install count tells us how many people use the app; it never includes usage figures and can be switched off in Settings. Diagnostics are redacted before they are shown or copied.

Build from source

Requirements: Bun 1.3.14 and Node.js 22.13+.

git clone https://github.com/SRX9/UsageAtlas.git
cd UsageAtlas
bun ci
bun run desktop:start

bun run check runs lint, typecheck, tests, and the build. bun run desktop:make produces installers for the current platform with Electron Forge; unsigned builds need no credentials.

The repo is a Bun + Turborepo workspace: the Electron app lives in apps/desktop, shared schemas and fixtures in packages/contracts, and build helpers in tooling.

Releases

Every push to main ships a release. CI takes the version in apps/desktop/package.json, moves the patch number to the first one that is not published yet, records that back on main, then builds, signs, and notarizes every platform, tags desktop-v<version>, and publishes the installers, SHA256SUMS, and the update feeds the in-app updater consumes. Write a new major or minor version there by hand and it releases as written instead.

See CONTRIBUTING.md to contribute and SECURITY.md to report a vulnerability privately.

Acknowledgements

Inspired by CodexBar by Peter Steinberger. Charts are vendored from Dither Kit.

License

Source code is available under the MIT License. The UsageAtlas name and logo are not covered by it — see TRADEMARKS.md.

About

Track all your AI coding usage and limits, Claude Code, Codex, Cursor, OpenCode and more. One picture.

Topics

Resources

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UsageAtlas app icon

UsageAtlas

One desktop dashboard for your AI coding usage.
See quota, resets, tokens, requests, and cost across Codex, Claude, Cursor, and OpenCode — read locally, never uploaded.

Download for Windows, macOS, or Linux · All releases

CIWindows, macOS, and LinuxMIT license

Screenshots

Today view with total tokens, capacity meters for each tool, and hourly activityInsights view with a heatmap of a typical week in two-hour blocks

Install

Get an installer from usageatlas.com or the releases page, then:

  • Windows — run the .exe installer. Builds are not Authenticode-signed yet, so choose More info → Run anyway at the SmartScreen prompt.
  • macOS — open the .dmg and drag UsageAtlas into Applications. Builds are signed and notarized.
  • Linux — run the .AppImage, or install the .deb or .rpm.

Every asset is listed with its SHA-256 in SHA256SUMS on the release. macOS and Windows update themselves in the background.

What it reads

UsageAtlas reuses the credentials the tools already keep on your machine. Nothing else is needed to sign in.

  • Codex — talks to the installed, signed-in Codex CLI through its official local app-server API. The OAuth token is never read.
  • Claude — reads CLAUDE_CODE_OAUTH_TOKEN or .credentials.json in your Claude config directory, then queries the OAuth usage endpoint.
  • Cursor — reuses the signed-in desktop session from Cursor's local state database for account limits plus 90 days of per-request token, model, and cost history.
  • OpenCode — reads the local OpenCode database for per-step token, request, project, model, and cost analytics.

Four more providers are on the way. A provider only ships once it has complete authentication, structured error handling, and deterministic adapter tests.

Highlights

  • Today view with capacity meters, reset times, plan details, credits, and hourly activity
  • History and insights across 7, 30, and 90 days by project, session, model, and tool
  • Usage alerts that fire a native notification before you run into a limit
  • Tray presence, launch at login, and system/light/dark themes
  • Local-first: no account, no sync, and no usage data leaves the machine
  • Sealed local history: completed days are stored on disk so past usage survives restarts and provider outages
  • Sandboxed renderer with no Node.js access, an allowlisted preload API, ASAR integrity, and Electron fuses

Privacy

Provider data is read from local files and provider APIs. Completed-day usage and capacity snapshots are sealed into a local history database in the app data directory. There is no UsageAtlas account and no cloud sync. An anonymous install count tells us how many people use the app; it never includes usage figures and can be switched off in Settings. Diagnostics are redacted before they are shown or copied.

Build from source

Requirements: Bun 1.3.14 and Node.js 22.13+.

git clone https://github.com/SRX9/UsageAtlas.git
cd UsageAtlas
bun ci
bun run desktop:start

bun run check runs lint, typecheck, tests, and the build. bun run desktop:make produces installers for the current platform with Electron Forge; unsigned builds need no credentials.

The repo is a Bun + Turborepo workspace: the Electron app lives in apps/desktop, shared schemas and fixtures in packages/contracts, and build helpers in tooling.

Releases

Every push to main ships a release. CI takes the version in apps/desktop/package.json, moves the patch number to the first one that is not published yet, records that back on main, then builds, signs, and notarizes every platform, tags desktop-v<version>, and publishes the installers, SHA256SUMS, and the update feeds the in-app updater consumes. Write a new major or minor version there by hand and it releases as written instead.

See CONTRIBUTING.md to contribute and SECURITY.md to report a vulnerability privately.

Acknowledgements

Inspired by CodexBar by Peter Steinberger. Charts are vendored from Dither Kit.

License

Source code is available under the MIT License. The UsageAtlas name and logo are not covered by it — see TRADEMARKS.md.

About

Track all your AI coding usage and limits, Claude Code, Codex, Cursor, OpenCode and more. One picture.

Topics

Resources

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UsageAtlas app icon

UsageAtlas

One desktop dashboard for your AI coding usage.
See quota, resets, tokens, requests, and cost across Codex, Claude, Cursor, and OpenCode — read locally, never uploaded.

Download for Windows, macOS, or Linux · All releases

CIWindows, macOS, and LinuxMIT license

Screenshots

Today view with total tokens, capacity meters for each tool, and hourly activityInsights view with a heatmap of a typical week in two-hour blocks

Install

Get an installer from usageatlas.com or the releases page, then:

  • Windows — run the .exe installer. Builds are not Authenticode-signed yet, so choose More info → Run anyway at the SmartScreen prompt.
  • macOS — open the .dmg and drag UsageAtlas into Applications. Builds are signed and notarized.
  • Linux — run the .AppImage, or install the .deb or .rpm.

Every asset is listed with its SHA-256 in SHA256SUMS on the release. macOS and Windows update themselves in the background.

What it reads

UsageAtlas reuses the credentials the tools already keep on your machine. Nothing else is needed to sign in.

  • Codex — talks to the installed, signed-in Codex CLI through its official local app-server API. The OAuth token is never read.
  • Claude — reads CLAUDE_CODE_OAUTH_TOKEN or .credentials.json in your Claude config directory, then queries the OAuth usage endpoint.
  • Cursor — reuses the signed-in desktop session from Cursor's local state database for account limits plus 90 days of per-request token, model, and cost history.
  • OpenCode — reads the local OpenCode database for per-step token, request, project, model, and cost analytics.

Four more providers are on the way. A provider only ships once it has complete authentication, structured error handling, and deterministic adapter tests.

Highlights

  • Today view with capacity meters, reset times, plan details, credits, and hourly activity
  • History and insights across 7, 30, and 90 days by project, session, model, and tool
  • Usage alerts that fire a native notification before you run into a limit
  • Tray presence, launch at login, and system/light/dark themes
  • Local-first: no account, no sync, and no usage data leaves the machine
  • Sealed local history: completed days are stored on disk so past usage survives restarts and provider outages
  • Sandboxed renderer with no Node.js access, an allowlisted preload API, ASAR integrity, and Electron fuses

Privacy

Provider data is read from local files and provider APIs. Completed-day usage and capacity snapshots are sealed into a local history database in the app data directory. There is no UsageAtlas account and no cloud sync. An anonymous install count tells us how many people use the app; it never includes usage figures and can be switched off in Settings. Diagnostics are redacted before they are shown or copied.

Build from source

Requirements: Bun 1.3.14 and Node.js 22.13+.

git clone https://github.com/SRX9/UsageAtlas.git
cd UsageAtlas
bun ci
bun run desktop:start

bun run check runs lint, typecheck, tests, and the build. bun run desktop:make produces installers for the current platform with Electron Forge; unsigned builds need no credentials.

The repo is a Bun + Turborepo workspace: the Electron app lives in apps/desktop, shared schemas and fixtures in packages/contracts, and build helpers in tooling.

Releases

Every push to main ships a release. CI takes the version in apps/desktop/package.json, moves the patch number to the first one that is not published yet, records that back on main, then builds, signs, and notarizes every platform, tags desktop-v<version>, and publishes the installers, SHA256SUMS, and the update feeds the in-app updater consumes. Write a new major or minor version there by hand and it releases as written instead.

See CONTRIBUTING.md to contribute and SECURITY.md to report a vulnerability privately.

Acknowledgements

Inspired by CodexBar by Peter Steinberger. Charts are vendored from Dither Kit.

License

Source code is available under the MIT License. The UsageAtlas name and logo are not covered by it — see TRADEMARKS.md.

About

Track all your AI coding usage and limits, Claude Code, Codex, Cursor, OpenCode and more. One picture.

Topics

Resources

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

UsageAtlas app icon

UsageAtlas

One desktop dashboard for your AI coding usage.
See quota, resets, tokens, requests, and cost across Codex, Claude, Cursor, and OpenCode — read locally, never uploaded.

Download for Windows, macOS, or Linux · All releases

CIWindows, macOS, and LinuxMIT license

Screenshots

Today view with total tokens, capacity meters for each tool, and hourly activityInsights view with a heatmap of a typical week in two-hour blocks

Install

Get an installer from usageatlas.com or the releases page, then:

  • Windows — run the .exe installer. Builds are not Authenticode-signed yet, so choose More info → Run anyway at the SmartScreen prompt.
  • macOS — open the .dmg and drag UsageAtlas into Applications. Builds are signed and notarized.
  • Linux — run the .AppImage, or install the .deb or .rpm.

Every asset is listed with its SHA-256 in SHA256SUMS on the release. macOS and Windows update themselves in the background.

What it reads

UsageAtlas reuses the credentials the tools already keep on your machine. Nothing else is needed to sign in.

  • Codex — talks to the installed, signed-in Codex CLI through its official local app-server API. The OAuth token is never read.
  • Claude — reads CLAUDE_CODE_OAUTH_TOKEN or .credentials.json in your Claude config directory, then queries the OAuth usage endpoint.
  • Cursor — reuses the signed-in desktop session from Cursor's local state database for account limits plus 90 days of per-request token, model, and cost history.
  • OpenCode — reads the local OpenCode database for per-step token, request, project, model, and cost analytics.

Four more providers are on the way. A provider only ships once it has complete authentication, structured error handling, and deterministic adapter tests.

Highlights

  • Today view with capacity meters, reset times, plan details, credits, and hourly activity
  • History and insights across 7, 30, and 90 days by project, session, model, and tool
  • Usage alerts that fire a native notification before you run into a limit
  • Tray presence, launch at login, and system/light/dark themes
  • Local-first: no account, no sync, and no usage data leaves the machine
  • Sealed local history: completed days are stored on disk so past usage survives restarts and provider outages
  • Sandboxed renderer with no Node.js access, an allowlisted preload API, ASAR integrity, and Electron fuses

Privacy

Provider data is read from local files and provider APIs. Completed-day usage and capacity snapshots are sealed into a local history database in the app data directory. There is no UsageAtlas account and no cloud sync. An anonymous install count tells us how many people use the app; it never includes usage figures and can be switched off in Settings. Diagnostics are redacted before they are shown or copied.

Build from source

Requirements: Bun 1.3.14 and Node.js 22.13+.

git clone https://github.com/SRX9/UsageAtlas.git
cd UsageAtlas
bun ci
bun run desktop:start

bun run check runs lint, typecheck, tests, and the build. bun run desktop:make produces installers for the current platform with Electron Forge; unsigned builds need no credentials.

The repo is a Bun + Turborepo workspace: the Electron app lives in apps/desktop, shared schemas and fixtures in packages/contracts, and build helpers in tooling.

Releases

Every push to main ships a release. CI takes the version in apps/desktop/package.json, moves the patch number to the first one that is not published yet, records that back on main, then builds, signs, and notarizes every platform, tags desktop-v<version>, and publishes the installers, SHA256SUMS, and the update feeds the in-app updater consumes. Write a new major or minor version there by hand and it releases as written instead.

See CONTRIBUTING.md to contribute and SECURITY.md to report a vulnerability privately.

Acknowledgements

Inspired by CodexBar by Peter Steinberger. Charts are vendored from Dither Kit.

License

Source code is available under the MIT License. The UsageAtlas name and logo are not covered by it — see TRADEMARKS.md.

About

Track all your AI coding usage and limits, Claude Code, Codex, Cursor, OpenCode and more. One picture.

Topics

Resources

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UsageAtlas app icon

UsageAtlas

One desktop dashboard for your AI coding usage.
See quota, resets, tokens, requests, and cost across Codex, Claude, Cursor, and OpenCode — read locally, never uploaded.

Download for Windows, macOS, or Linux · All releases

CIWindows, macOS, and LinuxMIT license

Screenshots

Today view with total tokens, capacity meters for each tool, and hourly activityInsights view with a heatmap of a typical week in two-hour blocks

Install

Get an installer from usageatlas.com or the releases page, then:

  • Windows — run the .exe installer. Builds are not Authenticode-signed yet, so choose More info → Run anyway at the SmartScreen prompt.
  • macOS — open the .dmg and drag UsageAtlas into Applications. Builds are signed and notarized.
  • Linux — run the .AppImage, or install the .deb or .rpm.

Every asset is listed with its SHA-256 in SHA256SUMS on the release. macOS and Windows update themselves in the background.

What it reads

UsageAtlas reuses the credentials the tools already keep on your machine. Nothing else is needed to sign in.

  • Codex — talks to the installed, signed-in Codex CLI through its official local app-server API. The OAuth token is never read.
  • Claude — reads CLAUDE_CODE_OAUTH_TOKEN or .credentials.json in your Claude config directory, then queries the OAuth usage endpoint.
  • Cursor — reuses the signed-in desktop session from Cursor's local state database for account limits plus 90 days of per-request token, model, and cost history.
  • OpenCode — reads the local OpenCode database for per-step token, request, project, model, and cost analytics.

Four more providers are on the way. A provider only ships once it has complete authentication, structured error handling, and deterministic adapter tests.

Highlights

  • Today view with capacity meters, reset times, plan details, credits, and hourly activity
  • History and insights across 7, 30, and 90 days by project, session, model, and tool
  • Usage alerts that fire a native notification before you run into a limit
  • Tray presence, launch at login, and system/light/dark themes
  • Local-first: no account, no sync, and no usage data leaves the machine
  • Sealed local history: completed days are stored on disk so past usage survives restarts and provider outages
  • Sandboxed renderer with no Node.js access, an allowlisted preload API, ASAR integrity, and Electron fuses

Privacy

Provider data is read from local files and provider APIs. Completed-day usage and capacity snapshots are sealed into a local history database in the app data directory. There is no UsageAtlas account and no cloud sync. An anonymous install count tells us how many people use the app; it never includes usage figures and can be switched off in Settings. Diagnostics are redacted before they are shown or copied.

Build from source

Requirements: Bun 1.3.14 and Node.js 22.13+.

git clone https://github.com/SRX9/UsageAtlas.git
cd UsageAtlas
bun ci
bun run desktop:start

bun run check runs lint, typecheck, tests, and the build. bun run desktop:make produces installers for the current platform with Electron Forge; unsigned builds need no credentials.

The repo is a Bun + Turborepo workspace: the Electron app lives in apps/desktop, shared schemas and fixtures in packages/contracts, and build helpers in tooling.

Releases

Every push to main ships a release. CI takes the version in apps/desktop/package.json, moves the patch number to the first one that is not published yet, records that back on main, then builds, signs, and notarizes every platform, tags desktop-v<version>, and publishes the installers, SHA256SUMS, and the update feeds the in-app updater consumes. Write a new major or minor version there by hand and it releases as written instead.

See CONTRIBUTING.md to contribute and SECURITY.md to report a vulnerability privately.

Acknowledgements

Inspired by CodexBar by Peter Steinberger. Charts are vendored from Dither Kit.

License

Source code is available under the MIT License. The UsageAtlas name and logo are not covered by it — see TRADEMARKS.md.

About

Track all your AI coding usage and limits, Claude Code, Codex, Cursor, OpenCode and more. One picture.

Topics

Resources

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

UsageAtlas app icon

UsageAtlas

One desktop dashboard for your AI coding usage.
See quota, resets, tokens, requests, and cost across Codex, Claude, Cursor, and OpenCode — read locally, never uploaded.

Download for Windows, macOS, or Linux · All releases

CIWindows, macOS, and LinuxMIT license

Screenshots

Today view with total tokens, capacity meters for each tool, and hourly activityInsights view with a heatmap of a typical week in two-hour blocks

Install

Get an installer from usageatlas.com or the releases page, then:

  • Windows — run the .exe installer. Builds are not Authenticode-signed yet, so choose More info → Run anyway at the SmartScreen prompt.
  • macOS — open the .dmg and drag UsageAtlas into Applications. Builds are signed and notarized.
  • Linux — run the .AppImage, or install the .deb or .rpm.

Every asset is listed with its SHA-256 in SHA256SUMS on the release. macOS and Windows update themselves in the background.

What it reads

UsageAtlas reuses the credentials the tools already keep on your machine. Nothing else is needed to sign in.

  • Codex — talks to the installed, signed-in Codex CLI through its official local app-server API. The OAuth token is never read.
  • Claude — reads CLAUDE_CODE_OAUTH_TOKEN or .credentials.json in your Claude config directory, then queries the OAuth usage endpoint.
  • Cursor — reuses the signed-in desktop session from Cursor's local state database for account limits plus 90 days of per-request token, model, and cost history.
  • OpenCode — reads the local OpenCode database for per-step token, request, project, model, and cost analytics.

Four more providers are on the way. A provider only ships once it has complete authentication, structured error handling, and deterministic adapter tests.

Highlights

  • Today view with capacity meters, reset times, plan details, credits, and hourly activity
  • History and insights across 7, 30, and 90 days by project, session, model, and tool
  • Usage alerts that fire a native notification before you run into a limit
  • Tray presence, launch at login, and system/light/dark themes
  • Local-first: no account, no sync, and no usage data leaves the machine
  • Sealed local history: completed days are stored on disk so past usage survives restarts and provider outages
  • Sandboxed renderer with no Node.js access, an allowlisted preload API, ASAR integrity, and Electron fuses

Privacy

Provider data is read from local files and provider APIs. Completed-day usage and capacity snapshots are sealed into a local history database in the app data directory. There is no UsageAtlas account and no cloud sync. An anonymous install count tells us how many people use the app; it never includes usage figures and can be switched off in Settings. Diagnostics are redacted before they are shown or copied.

Build from source

Requirements: Bun 1.3.14 and Node.js 22.13+.

git clone https://github.com/SRX9/UsageAtlas.git
cd UsageAtlas
bun ci
bun run desktop:start

bun run check runs lint, typecheck, tests, and the build. bun run desktop:make produces installers for the current platform with Electron Forge; unsigned builds need no credentials.

The repo is a Bun + Turborepo workspace: the Electron app lives in apps/desktop, shared schemas and fixtures in packages/contracts, and build helpers in tooling.

Releases

Every push to main ships a release. CI takes the version in apps/desktop/package.json, moves the patch number to the first one that is not published yet, records that back on main, then builds, signs, and notarizes every platform, tags desktop-v<version>, and publishes the installers, SHA256SUMS, and the update feeds the in-app updater consumes. Write a new major or minor version there by hand and it releases as written instead.

See CONTRIBUTING.md to contribute and SECURITY.md to report a vulnerability privately.

Acknowledgements

Inspired by CodexBar by Peter Steinberger. Charts are vendored from Dither Kit.

License

Source code is available under the MIT License. The UsageAtlas name and logo are not covered by it — see TRADEMARKS.md.

About

Track all your AI coding usage and limits, Claude Code, Codex, Cursor, OpenCode and more. One picture.

Topics

Resources

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

UsageAtlas app icon

UsageAtlas

One desktop dashboard for your AI coding usage.
See quota, resets, tokens, requests, and cost across Codex, Claude, Cursor, and OpenCode — read locally, never uploaded.

Download for Windows, macOS, or Linux · All releases

CIWindows, macOS, and LinuxMIT license

Screenshots

Today view with total tokens, capacity meters for each tool, and hourly activityInsights view with a heatmap of a typical week in two-hour blocks

Install

Get an installer from usageatlas.com or the releases page, then:

  • Windows — run the .exe installer. Builds are not Authenticode-signed yet, so choose More info → Run anyway at the SmartScreen prompt.
  • macOS — open the .dmg and drag UsageAtlas into Applications. Builds are signed and notarized.
  • Linux — run the .AppImage, or install the .deb or .rpm.

Every asset is listed with its SHA-256 in SHA256SUMS on the release. macOS and Windows update themselves in the background.

What it reads

UsageAtlas reuses the credentials the tools already keep on your machine. Nothing else is needed to sign in.

  • Codex — talks to the installed, signed-in Codex CLI through its official local app-server API. The OAuth token is never read.
  • Claude — reads CLAUDE_CODE_OAUTH_TOKEN or .credentials.json in your Claude config directory, then queries the OAuth usage endpoint.
  • Cursor — reuses the signed-in desktop session from Cursor's local state database for account limits plus 90 days of per-request token, model, and cost history.
  • OpenCode — reads the local OpenCode database for per-step token, request, project, model, and cost analytics.

Four more providers are on the way. A provider only ships once it has complete authentication, structured error handling, and deterministic adapter tests.

Highlights

  • Today view with capacity meters, reset times, plan details, credits, and hourly activity
  • History and insights across 7, 30, and 90 days by project, session, model, and tool
  • Usage alerts that fire a native notification before you run into a limit
  • Tray presence, launch at login, and system/light/dark themes
  • Local-first: no account, no sync, and no usage data leaves the machine
  • Sealed local history: completed days are stored on disk so past usage survives restarts and provider outages
  • Sandboxed renderer with no Node.js access, an allowlisted preload API, ASAR integrity, and Electron fuses

Privacy

Provider data is read from local files and provider APIs. Completed-day usage and capacity snapshots are sealed into a local history database in the app data directory. There is no UsageAtlas account and no cloud sync. An anonymous install count tells us how many people use the app; it never includes usage figures and can be switched off in Settings. Diagnostics are redacted before they are shown or copied.

Build from source

Requirements: Bun 1.3.14 and Node.js 22.13+.

git clone https://github.com/SRX9/UsageAtlas.git
cd UsageAtlas
bun ci
bun run desktop:start

bun run check runs lint, typecheck, tests, and the build. bun run desktop:make produces installers for the current platform with Electron Forge; unsigned builds need no credentials.

The repo is a Bun + Turborepo workspace: the Electron app lives in apps/desktop, shared schemas and fixtures in packages/contracts, and build helpers in tooling.

Releases

Every push to main ships a release. CI takes the version in apps/desktop/package.json, moves the patch number to the first one that is not published yet, records that back on main, then builds, signs, and notarizes every platform, tags desktop-v<version>, and publishes the installers, SHA256SUMS, and the update feeds the in-app updater consumes. Write a new major or minor version there by hand and it releases as written instead.

See CONTRIBUTING.md to contribute and SECURITY.md to report a vulnerability privately.

Acknowledgements

Inspired by CodexBar by Peter Steinberger. Charts are vendored from Dither Kit.

License

Source code is available under the MIT License. The UsageAtlas name and logo are not covered by it — see TRADEMARKS.md.

About

Track all your AI coding usage and limits, Claude Code, Codex, Cursor, OpenCode and more. One picture.

Topics

Resources

Contributing

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages