356 lines · 27.1 KB · HTML
RawDownload
<!doctype html><html lang="en">  <head>    <meta charset="utf-8" />    <meta name="viewport" content="width=device-width, initial-scale=1" />    <title>CodexBar — every AI coding limit in your menu bar</title>    <meta      name="description"      content="A tiny macOS menu bar app that tracks AI coding-provider usage windows, credits, costs, and resets across 53 providers — Codex, OpenAI, Claude, Cursor, Gemini, Copilot, LiteLLM, and more."    />    <meta name="theme-color" content="#0a0a0c" />    <link rel="canonical" href="https://codexbar.app/" />    <link rel="alternate" hreflang="x-default" href="https://codexbar.app/" />    <link rel="alternate" hreflang="en" href="https://codexbar.app/?lang=en" />    <link rel="alternate" hreflang="zh-CN" href="https://codexbar.app/?lang=zh-CN" />    <link rel="alternate" hreflang="zh-TW" href="https://codexbar.app/?lang=zh-TW" />    <link rel="alternate" hreflang="ja" href="https://codexbar.app/?lang=ja-JP" />    <link rel="alternate" hreflang="es" href="https://codexbar.app/?lang=es" />    <link rel="alternate" hreflang="pt-BR" href="https://codexbar.app/?lang=pt-BR" />    <link rel="alternate" hreflang="ko" href="https://codexbar.app/?lang=ko" />    <link rel="alternate" hreflang="de" href="https://codexbar.app/?lang=de" />    <link rel="alternate" hreflang="fr" href="https://codexbar.app/?lang=fr" />    <link rel="alternate" hreflang="ar" href="https://codexbar.app/?lang=ar" />    <link rel="alternate" hreflang="it" href="https://codexbar.app/?lang=it" />    <link rel="alternate" hreflang="vi" href="https://codexbar.app/?lang=vi" />    <link rel="alternate" hreflang="nl" href="https://codexbar.app/?lang=nl" />    <link rel="alternate" hreflang="tr" href="https://codexbar.app/?lang=tr" />    <link rel="alternate" hreflang="uk" href="https://codexbar.app/?lang=uk" />    <link rel="alternate" hreflang="id" href="https://codexbar.app/?lang=id" />    <link rel="alternate" hreflang="pl" href="https://codexbar.app/?lang=pl" />    <link rel="alternate" hreflang="fa" href="https://codexbar.app/?lang=fa" />    <link rel="alternate" hreflang="th" href="https://codexbar.app/?lang=th" />    <link rel="alternate" hreflang="ca" href="https://codexbar.app/?lang=ca" />    <link rel="alternate" hreflang="sv" href="https://codexbar.app/?lang=sv" />     <meta property="og:title" content="CodexBar" />    <meta      property="og:description"      content="Track usage windows, credits, and resets across 53 AI coding providers from your macOS menu bar."    />    <meta property="og:type" content="website" />    <meta property="og:url" content="https://codexbar.app/" />    <meta property="og:image" content="https://codexbar.app/social.png" />    <meta property="og:image:width" content="1200" />    <meta property="og:image:height" content="630" />    <meta name="twitter:image" content="https://codexbar.app/social.png" />    <meta name="twitter:card" content="summary_large_image" />     <link rel="icon" href="./icon.png" type="image/png" />    <link rel="apple-touch-icon" href="./icon.png" />    <script>      (function () {        try {          var supported = ['en', 'zh-CN', 'zh-TW', 'ja-JP', 'es', 'pt-BR', 'ko', 'de', 'fr', 'ar', 'it', 'vi', 'nl', 'tr', 'uk', 'id', 'pl', 'fa', 'th', 'ca', 'sv'];          var aliases = { 'zh-hans': 'zh-CN', 'zh-cn': 'zh-CN', 'zh-hant': 'zh-TW', 'zh-tw': 'zh-TW', 'zh-hk': 'zh-TW', ja: 'ja-JP', pt: 'pt-BR', 'pt-br': 'pt-BR' };          function normalizeLocale(value) {            if (!value) return null;            var lower = value.toLowerCase();            if (aliases[lower]) return aliases[lower];            for (var i = 0; i < supported.length; i += 1) {              if (supported[i].toLowerCase() === lower || lower.indexOf(supported[i].toLowerCase() + '-') === 0) return supported[i];            }            return null;          }          var queryLocale = normalizeLocale(new URLSearchParams(location.search).get('lang'));          var storedLocale = normalizeLocale(localStorage.getItem('codexbar-language'));          var browserLocale = null;          var browserLanguages = navigator.languages || [navigator.language];          for (var i = 0; i < browserLanguages.length && !browserLocale; i += 1) browserLocale = normalizeLocale(browserLanguages[i]);          var locale = queryLocale || storedLocale || browserLocale || 'en';          document.documentElement.lang = locale;          document.documentElement.dir = locale === 'ar' || locale === 'fa' ? 'rtl' : 'ltr';          document.documentElement.dataset.locale = locale;           var queryTheme = new URLSearchParams(location.search).get('theme');          var theme = queryTheme === 'light' || queryTheme === 'dark'            ? queryTheme            : localStorage.getItem('codexbar-theme');          if (theme === 'light' || theme === 'dark') document.documentElement.dataset.theme = theme;        } catch (_) {}      })();    </script>    <link rel="stylesheet" href="./site.css?v=10" />  </head>  <body>    <div class="backdrop" aria-hidden="true">      <span class="plane p1"></span>      <span class="plane p2"></span>      <span class="trace t1"></span>      <span class="trace t2"></span>      <span class="trace t3"></span>      <span class="trace t4"></span>    </div>    <header class="masthead">      <a class="brand" href="./" aria-label="CodexBar">        <img class="mark" src="./icon.png" alt="" width="28" height="28" />        <span class="wordmark">CodexBar</span>      </a>      <nav class="nav" aria-label="Primary" data-i18n-aria-label="nav.primary">        <a class="nav-link" href="https://github.com/steipete/CodexBar/blob/main/docs/providers.md" data-i18n="nav.docs">Docs</a>        <a class="nav-link" href="https://github.com/steipete/CodexBar" data-i18n="nav.source">Source</a>        <label class="language-control" for="language-select">          <span class="sr-only" data-i18n="nav.language">Language</span>          <select id="language-select" name="language" class="language-select" aria-label="Language" data-i18n-aria-label="nav.language">            <option value="en">English</option>            <option value="zh-CN">简体中文</option>            <option value="zh-TW">繁體中文</option>            <option value="ja-JP">日本語</option>            <option value="es">Español</option>            <option value="pt-BR">Português (BR)</option>            <option value="ko">한국어</option>            <option value="de">Deutsch</option>            <option value="fr">Français</option>            <option value="ar">العربية</option>            <option value="it">Italiano</option>            <option value="vi">Tiếng Việt</option>            <option value="nl">Nederlands</option>            <option value="tr">Türkçe</option>            <option value="uk">Українська</option>            <option value="id">Bahasa Indonesia</option>            <option value="pl">Polski</option>            <option value="fa">فارسی</option>            <option value="th">ไทย</option>            <option value="ca">Català</option>            <option value="sv">Svenska</option>          </select>          <svg width="12" height="12" viewBox="0 0 12 12" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true">            <path d="m3 4.5 3 3 3-3" />          </svg>        </label>        <button class="theme-toggle" type="button" aria-label="Switch color theme" aria-pressed="false" title="Switch color theme">          <svg class="sun" width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true">            <circle cx="8" cy="8" r="2.75" />            <path d="M8 1.5v1.25M8 13.25v1.25M1.5 8h1.25M13.25 8h1.25M3.4 3.4l.9.9M11.7 11.7l.9.9M12.6 3.4l-.9.9M4.3 11.7l-.9.9" />          </svg>          <svg class="moon" width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">            <path d="M13.2 10.1A5.8 5.8 0 0 1 5.9 2.8a6 6 0 1 0 7.3 7.3Z" />          </svg>        </button>        <a class="btn primary" href="https://github.com/steipete/CodexBar/releases/latest" data-i18n="nav.download">Download</a>      </nav>    </header>     <main>      <section class="lede">        <h1><span data-i18n="hero.prefix">Every AI coding limit,</span> <span class="grad" data-i18n="hero.accent">in your menu bar.</span></h1>        <p class="dek" data-i18n="hero.description">          CodexBar tracks usage windows, credit balances, and reset countdowns across the providers you actually pay for —          one status item each, or merge them into one.        </p>        <div class="actions">          <a class="btn primary lg" href="https://github.com/steipete/CodexBar/releases/latest" data-i18n="hero.download">Download for macOS</a>          <div class="brew" role="group" aria-label="Homebrew install command">            <code id="brew-cmd">brew install --cask steipete/tap/codexbar</code>            <button class="brew-copy" type="button" aria-label="Copy to clipboard" title="Copy" data-i18n-aria-label="clipboard.copy" data-i18n-title="clipboard.copy">              <svg class="ic" width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">                <rect x="5" y="5" width="9" height="9" rx="1.5" />                <path d="M5 11H3.5A1.5 1.5 0 0 1 2 9.5v-7A1.5 1.5 0 0 1 3.5 1h7A1.5 1.5 0 0 1 12 2.5V5" />              </svg>              <svg class="ok" width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">                <polyline points="3 8 6 11 13 4" />              </svg>            </button>          </div>        </div>        <p class="fineprint" data-i18n="hero.fineprint">Free &amp; open source · macOS 14+ · Universal via GitHub Releases and Homebrew</p>      </section>       <section class="providers" aria-labelledby="providers-h">        <header class="section-head">          <h2 id="providers-h" data-i18n="providers.title">53 providers, one menu bar</h2>          <p data-i18n="providers.description">Popular providers become status items with their own usage windows, reset countdowns, charts, and provider menus.</p>        </header>        <ul class="grid">        <li><a class="provider" style="--brand:#49A3B0" href="https://github.com/steipete/CodexBar/blob/main/docs/codex.md">          <img class="chip-logo no-bg" src="./logos/codex.svg" data-dark-src="./logos/codex-dark.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Codex</span><span class="auth">OAuth</span></span>        </a></li>        <li><a class="provider" style="--brand:#CC7C5E" href="https://github.com/steipete/CodexBar/blob/main/docs/claude.md">          <img class="chip-logo" src="./logos/claude.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Claude</span><span class="auth">OAuth</span></span>        </a></li>        <li><a class="provider" style="--brand:#1A1A1A" href="https://github.com/steipete/CodexBar/blob/main/docs/cursor.md">          <img class="chip-logo" src="./logos/cursor.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Cursor</span><span class="auth" data-i18n="auth.cookies">Cookies</span></span>        </a></li>        <li><a class="provider" style="--brand:#3B82F6" href="https://github.com/steipete/CodexBar/blob/main/docs/opencode.md">          <img class="chip-logo preserve-color" src="./logos/opencode.svg" data-dark-src="./logos/opencode-dark.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">OpenCode</span><span class="auth" data-i18n="auth.cookiesGo">Cookies + Go</span></span>        </a></li>        <li><a class="provider" style="--brand:#FF6A00" href="https://github.com/steipete/CodexBar/blob/main/docs/alibaba-coding-plan.md">          <img class="chip-logo" src="./logos/alibaba.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Alibaba</span><span class="auth" data-i18n="auth.cookies">Cookies</span></span>        </a></li>        <li><a class="provider" style="--brand:#FF6A00" href="https://github.com/steipete/CodexBar/blob/main/docs/alibaba-token-plan.md">          <img class="chip-logo" src="./logos/alibaba.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Alibaba Token</span><span class="auth" data-i18n="auth.cookies">Cookies</span></span>        </a></li>        <li><a class="provider" style="--brand:#AB87EA" href="https://github.com/steipete/CodexBar/blob/main/docs/gemini.md">          <img class="chip-logo" src="./logos/gemini.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Gemini</span><span class="auth">OAuth</span></span>        </a></li>        <li><a class="provider" style="--brand:#60BA7E" href="https://github.com/steipete/CodexBar/blob/main/docs/antigravity.md">          <img class="chip-logo" src="./logos/antigravity.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Antigravity</span><span class="auth" data-i18n="auth.local">Local</span></span>        </a></li>        <li><a class="provider" style="--brand:#FF6B35" href="https://github.com/steipete/CodexBar/blob/main/docs/factory.md">          <img class="chip-logo no-bg" src="./logos/droid.svg" data-dark-src="./logos/droid-dark.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Droid</span><span class="auth" data-i18n="auth.cookies">Cookies</span></span>        </a></li>        <li><a class="provider" style="--brand:#A855F7" href="https://github.com/steipete/CodexBar/blob/main/docs/copilot.md">          <img class="chip-logo" src="./logos/copilot.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Copilot</span><span class="auth" data-i18n="auth.deviceFlow">Device flow</span></span>        </a></li>        <li><a class="provider" style="--brand:#0F172A" href="https://github.com/steipete/CodexBar/blob/main/docs/devin.md">          <img class="chip-logo" src="./logos/devin.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Devin</span><span class="auth" data-i18n="auth.bearerLocal">Bearer / Local</span></span>        </a></li>        <li><a class="provider" style="--brand:#E85A6A" href="https://github.com/steipete/CodexBar/blob/main/docs/zai.md">          <img class="chip-logo no-bg" src="./logos/zai.svg" data-dark-src="./logos/zai-dark.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">z.ai</span><span class="auth" data-i18n="auth.apiKey">API key</span></span>        </a></li>        <li><a class="provider" style="--brand:#FE6060" href="https://github.com/steipete/CodexBar/blob/main/docs/minimax.md">          <img class="chip-logo" src="./logos/minimax.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">MiniMax</span><span class="auth" data-i18n="auth.apiKey">API key</span></span>        </a></li>        <li><a class="provider" style="--brand:#FE603C" href="https://github.com/steipete/CodexBar/blob/main/docs/kimi.md">          <img class="chip-logo" src="./logos/kimi.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Kimi</span><span class="auth" data-i18n="auth.token">Token</span></span>        </a></li>        <li><a class="provider" style="--brand:#4C00FF" href="https://github.com/steipete/CodexBar/blob/main/docs/kimi-k2.md">          <img class="chip-logo" src="./logos/kimi-k2.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Kimi K2</span><span class="auth" data-i18n="auth.legacyApi">Legacy API</span></span>        </a></li>        <li><a class="provider" style="--brand:#f8f676" href="https://github.com/steipete/CodexBar/blob/main/docs/kilo.md">          <img class="chip-logo no-bg" src="./logos/kilo.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Kilo</span><span class="auth" data-i18n="auth.apiKey">API key</span></span>        </a></li>        <li><a class="provider" style="--brand:#FF9900;--ink:#0a0a0c" href="https://github.com/steipete/CodexBar/blob/main/docs/kiro.md">          <img class="chip-logo no-bg" src="./logos/kiro.svg" data-dark-src="./logos/kiro-dark.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Kiro</span><span class="auth">CLI</span></span>        </a></li>        <li><a class="provider" style="--brand:#4285F4" href="https://github.com/steipete/CodexBar/blob/main/docs/vertexai.md">          <img class="chip-logo" src="./logos/vertex-ai.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Vertex AI</span><span class="auth">gcloud</span></span>        </a></li>        <li><a class="provider logo-dark" style="--brand:#6366F1" href="https://github.com/steipete/CodexBar/blob/main/docs/augment.md">          <img class="chip-logo" src="./logos/augment.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Augment</span><span class="auth">CLI</span></span>        </a></li>        <li><a class="provider" style="--brand:#DC2626" href="https://github.com/steipete/CodexBar/blob/main/docs/amp.md">          <img class="chip-logo" src="./logos/amp.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Amp</span><span class="auth" data-i18n="auth.cookies">Cookies</span></span>        </a></li>        <li><a class="provider" style="--brand:#888888" href="https://github.com/steipete/CodexBar/blob/main/docs/ollama.md">          <img class="chip-logo" src="./logos/ollama.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Ollama</span><span class="auth" data-i18n="auth.apiKeyCookies">API key + Cookies</span></span>        </a></li>        <li><a class="provider" style="--brand:#141414" href="https://github.com/steipete/CodexBar/blob/main/docs/providers.md#fetch-strategies-current">          <img class="chip-logo" src="./logos/synthetic.svg" data-dark-src="./logos/synthetic-dark.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Synthetic</span><span class="auth" data-i18n="auth.apiKey">API key</span></span>        </a></li>        <li><a class="provider" style="--brand:#FF3399" href="https://github.com/steipete/CodexBar/blob/main/docs/jetbrains.md">          <img class="chip-logo" src="./logos/jetbrains-ai.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">JetBrains AI</span><span class="auth" data-i18n="auth.local">Local</span></span>        </a></li>        <li><a class="provider" style="--brand:#7B68EE" href="https://github.com/steipete/CodexBar/blob/main/docs/warp.md">          <img class="chip-logo" src="./logos/warp.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Warp</span><span class="auth" data-i18n="auth.apiKey">API key</span></span>        </a></li>        <li><a class="provider" style="--brand:#EAEAE6;--ink:#0a0a0c" href="https://github.com/steipete/CodexBar/blob/main/docs/elevenlabs.md">          <img class="chip-logo" src="./logos/elevenlabs.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">ElevenLabs</span><span class="auth" data-i18n="auth.apiKey">API key</span></span>        </a></li>        <li><a class="provider" style="--brand:#6467F2" href="https://github.com/steipete/CodexBar/blob/main/docs/openrouter.md">          <img class="chip-logo" src="./logos/openrouter.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">OpenRouter</span><span class="auth" data-i18n="auth.apiKey">API key</span></span>        </a></li>        <li><a class="provider" style="--brand:#4C89F0" href="https://github.com/steipete/CodexBar/blob/main/docs/litellm.md">          <img class="chip-logo" src="./logos/litellm.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">LiteLLM</span><span class="auth" data-i18n="auth.virtualKey">Virtual key</span></span>        </a></li>        <li><a class="provider" style="--brand:#20B2AA" href="https://github.com/steipete/CodexBar/blob/main/docs/providers.md#fetch-strategies-current">          <img class="chip-logo" src="./logos/perplexity.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Perplexity</span><span class="auth" data-i18n="auth.cookies">Cookies</span></span>        </a></li>        <li><a class="provider" style="--brand:#38BDF8" href="https://github.com/steipete/CodexBar/blob/main/docs/abacus.md">          <img class="chip-logo no-bg" src="./logos/abacus-ai.png" data-dark-src="./logos/abacus-ai-dark.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Abacus AI</span><span class="auth" data-i18n="auth.cookies">Cookies</span></span>        </a></li>        <li><a class="provider" style="--brand:#FF500F" href="https://github.com/steipete/CodexBar/blob/main/docs/providers.md#fetch-strategies-current">          <img class="chip-logo" src="./logos/mistral.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Mistral</span><span class="auth" data-i18n="auth.cookies">Cookies</span></span>        </a></li>        <li><a class="provider" style="--brand:#527DF0" href="https://github.com/steipete/CodexBar/blob/main/docs/deepseek.md">          <img class="chip-logo" src="./logos/deepseek.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">DeepSeek</span><span class="auth" data-i18n="auth.apiKey">API key</span></span>        </a></li>        <li><a class="provider" style="--brand:#2563EB" href="https://github.com/steipete/CodexBar/blob/main/docs/providers.md#t3-chat">          <img class="chip-logo" src="./logos/t3chat.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">T3 Chat</span><span class="auth" data-i18n="auth.cookies">Cookies</span></span>        </a></li>        <li><a class="provider" style="--brand:#44C800;--ink:#0a0a0c" href="https://github.com/steipete/CodexBar/blob/main/docs/codebuff.md">          <img class="chip-logo no-bg" src="./logos/codebuff.png" data-dark-src="./logos/codebuff-dark.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Codebuff</span><span class="auth" data-i18n="auth.apiKey">API key</span></span>        </a></li>        <li><a class="provider" style="--brand:#26AD61" href="https://github.com/steipete/CodexBar/blob/main/docs/poe.md">          <img class="chip-logo" src="./logos/poe.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Poe</span><span class="auth" data-i18n="auth.apiKey">API key</span></span>        </a></li>        <li><a class="provider" style="--brand:#3184FF" href="https://github.com/steipete/CodexBar/blob/main/docs/chutes.md">          <img class="chip-logo" src="./logos/chutes.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Chutes</span><span class="auth" data-i18n="auth.apiKey">API key</span></span>        </a></li>        <li><a class="provider" style="--brand:#084EFF" href="https://github.com/steipete/CodexBar/blob/main/docs/zed.md">          <img class="chip-logo" src="./logos/zed.svg" alt="" width="20" height="20" /><span class="meta"><span class="name">Zed</span><span class="auth" data-i18n="auth.local">Local</span></span>        </a></li>        <li><a class="provider add" href="https://github.com/steipete/CodexBar/blob/main/docs/provider.md">          <span class="chip">+</span><span class="meta"><span class="name" data-i18n="providers.yourProvider">Your provider</span><span class="auth" data-i18n="providers.authoringGuide">Authoring guide</span></span>        </a></li>        </ul>      </section>       <section class="showcase">      <figure class="shot">        <img src="./codexbar.png" alt="CodexBar menu bar popover showing provider tiles with usage bars, reset countdowns, and credit details." data-i18n-alt="showcase.alt" />      </figure>      <div class="features">        <article>          <h3 data-i18n="features.resetsTitle">Resets you can plan around</h3>          <p data-i18n="features.resetsBody">Per-provider session, weekly, and monthly windows with countdowns to the next reset — no more guessing whether to start a long task.</p>        </article>        <article>          <h3 data-i18n="features.spendTitle">Credits, spend, and cost scans</h3>          <p data-i18n="features.spendBody">Credit balances and monthly spend where the provider exposes them, plus configurable local cost scans for Codex and Claude.</p>        </article>        <article>          <h3 data-i18n="features.statusTitle">Status &amp; incidents</h3>          <p data-i18n="features.statusBody">Provider status polling surfaces incident badges in the menu and an indicator overlay on the bar icon.</p>        </article>        <article>          <h3 data-i18n="features.cliTitle">CLI &amp; widgets</h3>          <p data-i18n-rich="features.cliBody">WidgetKit widgets for supported providers and a bundled <code>codexbar</code> CLI for scripts and CI — macOS and Linux builds on every release.</p>        </article>      </div>      </section>       <section class="detail">      <article class="block">        <h3 data-i18n="detail.installTitle">Install &amp; updates</h3>        <p data-i18n-rich="detail.installBody">          Universal app via <a href="https://github.com/steipete/CodexBar/releases/latest">GitHub Releases</a> with Sparkle auto-updates, or via          <code>brew install --cask steipete/tap/codexbar</code> (updates via <code>brew upgrade</code>).        </p>      </article>      <article class="block">        <h3 data-i18n="detail.cliTitle">CLI</h3>        <p data-i18n-rich="detail.cliBody">          A bundled <code>codexbar</code> binary plus standalone tarballs for macOS and Linux on each release. On Linux:          <code>brew install steipete/tap/codexbar</code>.        </p>      </article>      <article class="block">        <h3 data-i18n="detail.privacyTitle">Privacy</h3>        <p data-i18n-rich="detail.privacyBody">          Reuses existing provider sessions — OAuth, device flow, API keys, browser cookies, local files — so no passwords are stored.          Audit notes in <a href="https://github.com/steipete/CodexBar/issues/12">issue #12</a>.        </p>      </article>      <article class="block">        <h3 data-i18n="detail.permissionsTitle">macOS permissions</h3>        <p data-i18n="detail.permissionsBody">          Full Disk Access for Safari cookies, Keychain access for cookie decryption and OAuth flows, and Files &amp; Folders prompts          when provider helpers read project directories.        </p>      </article>      </section>    </main>     <footer class="foot">      <p>        <span data-i18n="footer.builtBy">Built by</span> <a href="https://steipete.me">Peter Steinberger</a> ·        <a href="https://github.com/steipete/CodexBar/blob/main/CHANGELOG.md" data-i18n="footer.changelog">Changelog</a> ·        <a href="https://github.com/steipete/CodexBar/blob/main/LICENSE">MIT</a> ·        <a href="https://trimmy.app">trimmy.app</a>      </p>    </footer>     <script type="module" src="./site.js?v=1"></script>  </body></html>