CodexBar Menu Bar AI Usage Tracker
CodexBar 菜单栏AI使用情况追踪器
Skill by
ara.so — Codex Skills collection.
CodexBar is a macOS menu bar application that displays real-time usage statistics for AI coding assistants including OpenAI Codex, Claude, Cursor, Gemini, Copilot, and 25+ other providers. It shows token limits, credit balances, reset countdowns, and provider status without requiring separate logins. Built with Swift for macOS 14+, it includes both a GUI app and CLI for scripting.
由
ara.so提供的Skill — Codex Skills合集。
CodexBar是一款macOS菜单栏应用,可实时显示AI编码助手的使用统计数据,支持OpenAI Codex、Claude、Cursor、Gemini、Copilot等25+种服务商。无需单独登录,即可查看令牌限制、信用余额、重置倒计时以及服务商状态。基于Swift开发,适用于macOS 14+,包含GUI应用和用于脚本的CLI工具。
Homebrew (Recommended)
Homebrew(推荐)
bash
brew install --cask steipete/tap/codexbar
bash
brew install --cask steipete/tap/codexbar
GitHub Releases
GitHub Releases
Download the latest
from:
https://github.com/steipete/CodexBar/releases/latest
https://github.com/steipete/CodexBar/releases/latest
CLI Only (macOS/Linux)
仅CLI版本(macOS/Linux)
macOS/Linux CLI via Homebrew
通过Homebrew安装macOS/Linux CLI
brew install steipete/tap/codexbar
brew install steipete/tap/codexbar
Or download tarballs from releases:
或从Releases下载压缩包:
CodexBarCLI-v<version>-macos-arm64.tar.gz
CodexBarCLI-v<version>-macos-arm64.tar.gz
CodexBarCLI-v<version>-linux-x86_64.tar.gz
CodexBarCLI-v<version>-linux-x86_64.tar.gz
- Open CodexBar from Applications
- Go to Settings → Providers
- Enable the providers you use (Codex, Claude, Cursor, etc.)
- Authenticate via the supported methods for each provider
- 从应用程序中打开CodexBar
- 进入「设置」→「服务商」
- 启用你使用的服务商(Codex、Claude、Cursor等)
- 通过各服务商支持的方式完成认证
- macOS: 14+ (Sonoma) for GUI app
- Linux: CLI only
- Permissions (optional, per provider):
- Full Disk Access: for Safari cookie access
- Keychain: for browser cookie decryption and OAuth tokens
- macOS: GUI应用需要14+(Sonoma)版本
- Linux: 仅支持CLI版本
- 权限(可选,依服务商而定):
- 全磁盘访问权限:用于读取Safari Cookie
- 钥匙串访问权限:用于解密浏览器Cookie和存储OAuth令牌
Settings → Providers shows all available providers with toggles. Each provider has specific auth requirements listed in its documentation.
「设置」→「服务商」页面展示所有可用服务商及开关。每个服务商的具体认证要求可查看其文档说明。
List all providers
列出所有服务商
codexbar config providers
codexbar config providers
codexbar config enable --provider grok
codexbar config enable --provider grok
Disable a provider
禁用某个服务商
codexbar config disable --provider cursor
codexbar config disable --provider cursor
Set API key from environment variable
通过环境变量设置API密钥
printf '%s' "$OPENROUTER_API_KEY" | codexbar config set-api-key --provider openrouter --stdin
printf '%s' "$OPENROUTER_API_KEY" | codexbar config set-api-key --provider openrouter --stdin
Set API key directly (not recommended for scripts)
直接设置API密钥(不推荐在脚本中使用)
codexbar config set-api-key --provider deepseek --api-key "sk-xxxxx"
codexbar config set-api-key --provider deepseek --api-key "sk-xxxxx"
Set API key without enabling
设置API密钥但不启用服务商
printf '%s' "$VENICE_API_KEY" | codexbar config set-api-key --provider venice --stdin --no-enable
The `set-api-key` command:
- Trims input whitespace
- Sets restrictive file permissions on config
- Enables the provider by default (use `--no-enable` to prevent)
printf '%s' "$VENICE_API_KEY" | codexbar config set-api-key --provider venice --stdin --no-enable
`set-api-key`命令特性:
- 自动去除输入中的空白字符
- 为配置文件设置严格的权限
- 默认启用对应服务商(使用`--no-enable`参数可取消)
Show usage for a specific provider
查看指定服务商的使用情况
codexbar usage --provider codex
codexbar usage --provider codex
Check cost/usage for last 30 days (local scan)
查看过去30天的成本/使用情况(本地扫描)
codexbar cost --provider codex
codexbar cost --provider claude
codexbar cost --provider both
codexbar cost --provider codex
codexbar cost --provider claude
codexbar cost --provider both
Refresh all enabled providers
刷新所有已启用的服务商数据
Configuration commands
配置相关命令
codexbar config providers
codexbar config enable --provider <name>
codexbar config disable --provider <name>
codexbar config set-api-key --provider <name> --stdin
codexbar config providers
codexbar config enable --provider <name>
codexbar config disable --provider <name>
codexbar config set-api-key --provider <name> --stdin
- : Success
- : General error
- : Authentication/configuration error
- : Network/API error
- : 执行成功
- : 通用错误
- : 认证/配置错误
- : 网络/API错误
Provider Configuration Examples
服务商配置示例
Authentication: OAuth API or local Codex CLI
认证方式: OAuth API或本地Codex CLI
Enable Codex provider
启用Codex服务商
codexbar config enable --provider codex
codexbar config enable --provider codex
Optional: Add OpenAI web dashboard cookies for extras
可选:添加OpenAI网页控制台Cookie以获取额外数据
(code review remaining, usage breakdown, credits history)
(剩余代码审核次数、使用明细、信用历史)
Configure via Settings → Providers → Codex → OpenAI cookies
通过「设置」→「服务商」→「Codex」→「OpenAI cookies」配置
Claude (Anthropic)
Claude(Anthropic)
Authentication: OAuth API, browser cookies, or CLI PTY fallback
认证方式: OAuth API、浏览器Cookie或CLI PTY fallback
codexbar config enable --provider claude
codexbar config enable --provider claude
Uses OAuth by default
默认使用OAuth
Falls back to browser cookies or Claude CLI if needed
必要时自动 fallback 到浏览器Cookie或Claude CLI
Authentication: Browser session cookies
bash
codexbar config enable --provider cursor
认证方式: 浏览器会话Cookie
bash
codexbar config enable --provider cursor
Requires browser cookies from cursor.sh
需要从cursor.sh获取浏览器会话Cookie
Shows plan, usage, and billing resets
可查看套餐、使用情况及计费重置信息
Authentication: API token
Set API key from environment
通过环境变量设置API密钥
printf '%s' "$OPENROUTER_API_KEY" | codexbar config set-api-key --provider openrouter --stdin
printf '%s' "$OPENROUTER_API_KEY" | codexbar config set-api-key --provider openrouter --stdin
Or configure in GUI: Settings → Providers → OpenRouter
或在GUI中配置:「设置」→「服务商」→「OpenRouter」
Set API key securely
安全设置API密钥
printf '%s' "$DEEPSEEK_API_KEY" | codexbar config set-api-key --provider deepseek --stdin
printf '%s' "$DEEPSEEK_API_KEY" | codexbar config set-api-key --provider deepseek --stdin
Authentication: OAuth via Gemini CLI credentials
bash
codexbar config enable --provider gemini
认证方式: 通过Gemini CLI凭证进行OAuth
bash
codexbar config enable --provider gemini
Uses gcloud OAuth, no browser cookies required
使用gcloud OAuth,无需浏览器Cookie
GitHub Copilot
GitHub Copilot
Authentication: GitHub device flow
bash
codexbar config enable --provider copilot
认证方式: GitHub设备流
bash
codexbar config enable --provider copilot
Uses GitHub device flow + Copilot internal usage API
使用GitHub设备流 + Copilot内部使用API
CodexBar is built with Swift. To integrate provider parsing or usage tracking:
CodexBar基于Swift开发。如需集成服务商解析或使用情况追踪功能:
Reading Configuration
读取配置
swift
import Foundation
struct CodexBarConfig: Codable {
var providers: [String: ProviderConfig]
}
struct ProviderConfig: Codable {
var enabled: Bool
var apiKey: String?
}
func loadConfig() throws -> CodexBarConfig {
let configPath = FileManager.default.homeDirectoryForCurrentUser
.appendingPathComponent(".codexbar/config.json")
let data = try Data(contentsOf: configPath)
return try JSONDecoder().decode(CodexBarConfig.self, from: data)
}
// Usage
do {
let config = try loadConfig()
if config.providers["codex"]?.enabled == true {
print("Codex provider is enabled")
}
} catch {
print("Failed to load config: \(error)")
}
swift
import Foundation
struct CodexBarConfig: Codable {
var providers: [String: ProviderConfig]
}
struct ProviderConfig: Codable {
var enabled: Bool
var apiKey: String?
}
func loadConfig() throws -> CodexBarConfig {
let configPath = FileManager.default.homeDirectoryForCurrentUser
.appendingPathComponent(".codexbar/config.json")
let data = try Data(contentsOf: configPath)
return try JSONDecoder().decode(CodexBarConfig.self, from: data)
}
// 使用示例
do {
let config = try loadConfig()
if config.providers["codex"]?.enabled == true {
print("Codex服务商已启用")
}
} catch {
print("加载配置失败: \(error)")
}
Calling CLI from Swift
在Swift中调用CLI
swift
import Foundation
func runCodexBarCLI(args: [String]) throws -> String {
let process = Process()
process.executableURL = URL(fileURLWithPath: "/opt/homebrew/bin/codexbar")
process.arguments = args
let pipe = Pipe()
process.standardOutput = pipe
try process.run()
process.waitUntilExit()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
return String(data: data, encoding: .utf8) ?? ""
}
// Get usage for a provider
do {
let output = try runCodexBarCLI(args: ["usage", "--provider", "codex"])
print(output)
} catch {
print("CLI error: \(error)")
}
swift
import Foundation
func runCodexBarCLI(args: [String]) throws -> String {
let process = Process()
process.executableURL = URL(fileURLWithPath: "/opt/homebrew/bin/codexbar")
process.arguments = args
let pipe = Pipe()
process.standardOutput = pipe
try process.run()
process.waitUntilExit()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
return String(data: data, encoding: .utf8) ?? ""
}
// 获取指定服务商的使用情况
do {
let output = try runCodexBarCLI(args: ["usage", "--provider", "codex"])
print(output)
} catch {
print("CLI执行错误: \(error)")
}
Scripting Cost Tracking
脚本化成本追踪
Track AI coding costs daily
每日追踪AI编码成本
LOG_FILE="$HOME/ai-usage-log.txt"
DATE=$(date +%Y-%m-%d)
echo "=== $DATE ===" >> "$LOG_FILE"
codexbar cost --provider both >> "$LOG_FILE" 2>&1
LOG_FILE="$HOME/ai-usage-log.txt"
DATE=$(date +%Y-%m-%d)
echo "=== $DATE ===" >> "$LOG_FILE"
codexbar cost --provider both >> "$LOG_FILE" 2>&1
Alert if cost exceeds threshold
当成本超过阈值时发送告警
COST=$(codexbar cost --provider codex | grep -o '$[0-9.]*' | head -1 | tr -d '$')
if (( $(echo "$COST > 50.0" | bc -l) )); then
echo "Warning: Codex cost ($COST) exceeds $50" | mail -s "AI Cost Alert" user@example.com
fi
COST=$(codexbar cost --provider codex | grep -o '$[0-9.]*' | head -1 | tr -d '$')
if (( $(echo "$COST > 50.0" | bc -l) )); then
echo "警告: Codex成本($COST)超过50美元" | mail -s "AI成本告警" user@example.com
fi
Automated Provider Enablement
自动启用服务商
Enable all providers from environment
通过环境变量启用所有服务商
PROVIDERS=(
"codex:$OPENAI_API_KEY"
"openrouter:$OPENROUTER_API_KEY"
"deepseek:$DEEPSEEK_API_KEY"
"venice:$VENICE_API_KEY"
)
for entry in "${PROVIDERS[@]}"; do
IFS=: read -r provider key <<< "$entry"
if [ -n "$key" ]; then
printf '%s' "$key" | codexbar config set-api-key --provider "$provider" --stdin
echo "Enabled $provider"
fi
done
PROVIDERS=(
"codex:$OPENAI_API_KEY"
"openrouter:$OPENROUTER_API_KEY"
"deepseek:$DEEPSEEK_API_KEY"
"venice:$VENICE_API_KEY"
)
for entry in "${PROVIDERS[@]}"; do
IFS=: read -r provider key <<< "$entry"
if [ -n "$key" ]; then
printf '%s' "$key" | codexbar config set-api-key --provider "$provider" --stdin
echo "已启用$provider"
fi
done
Menu Bar Icon Modes
菜单栏图标模式
CodexBar supports two display modes:
Individual Icons (default):
- One menu bar icon per enabled provider
- Each shows provider-specific usage bar
Merge Icons Mode:
- Single menu bar icon with all providers
- Click to switch between providers
- Enable in Settings → Display → Merge Icons
CodexBar支持两种显示模式:
独立图标模式(默认):
- 每个已启用的服务商对应一个菜单栏图标
- 每个图标显示服务商专属的使用进度条
合并图标模式:
- 单个菜单栏图标整合所有服务商
- 点击可切换不同服务商
- 在「设置」→「显示」→「合并图标」中启用
Set refresh interval via GUI: Settings → Refresh
通过GUI设置刷新间隔:「设置」→「刷新」
Options: manual, 1m, 2m, 5m, 15m
选项:手动、1分钟、2分钟、5分钟、15分钟
Or edit ~/.codexbar/config.json:
或编辑~/.codexbar/config.json:
{
"refreshInterval": 300 // 5 minutes in seconds
}
{
"refreshInterval": 300 // 单位为秒,此处为5分钟
}
"Full Disk Access required" for Safari cookies
"需要全磁盘访问权限"以读取Safari Cookie
- Open System Settings → Privacy & Security → Full Disk Access
- Add
- Restart CodexBar
Alternative: Use Chrome/Brave/Arc cookies or API keys instead.
- 打开「系统设置」→「隐私与安全性」→「全磁盘访问权限」
- 添加
- 重启CodexBar
替代方案:使用Chrome/Brave/Arc的Cookie或API密钥。
Keychain prompts for browser cookies
读取浏览器Cookie时弹出钥匙串授权提示
- Open Keychain Access.app
- Search for "Chrome Safe Storage" (or your browser)
- Double-click → Access Control tab
- Click + and add
- Save and restart CodexBar
- 打开「钥匙串访问.app」
- 搜索「Chrome Safe Storage」(或你的浏览器名称)
- 双击打开→「访问控制」标签页
- 点击「+」并添加
- 保存并重启CodexBar
Keychain prompts for Claude OAuth
Claude OAuth的钥匙串授权提示
- Open Keychain Access.app
- Search for "Claude Code-credentials"
- Double-click → Access Control tab
- Click + and add
- Save and restart CodexBar
- 打开「钥匙串访问.app」
- 搜索「Claude Code-credentials」
- 双击打开→「访问控制」标签页
- 点击「+」并添加
- 保存并重启CodexBar
Provider shows "stale" or "error"
服务商显示「过期」或「错误」状态
Check provider status via CLI
通过CLI检查服务商状态
codexbar usage --provider <name>
codexbar usage --provider <name>
Check logs (GUI app)
查看日志(GUI应用)
Console.app → search for "CodexBar"
打开「控制台.app」→ 搜索"CodexBar"
Verify authentication
验证认证状态
codexbar config providers
codexbar config providers
CLI not found after Homebrew install
Homebrew安装后找不到CLI命令
Ensure Homebrew bin is in PATH
确保Homebrew的bin目录在PATH中
echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
which codexbar
codexbar version
which codexbar
codexbar version
"Permission denied" on config file
配置文件提示「权限被拒绝」
chmod 600 ~/.codexbar/config.json
chmod 600 ~/.codexbar/config.json
Provider authentication issues
服务商认证问题
Codex/OpenAI:
- Ensure CLI is installed and authenticated:
- Or configure API key in Settings
Claude:
- Install Claude CLI:
brew install anthropics/claude/claude
- Authenticate:
Cursor:
- Sign in to cursor.sh in browser
- CodexBar will read session cookies
Gemini:
- Install CLI
- Authenticate:
Codex/OpenAI:
- 确保已安装并认证 CLI:
- 或在设置中配置API密钥
Claude:
- 安装Claude CLI:
brew install anthropics/claude/claude
- 完成认证:
Cursor:
- 在浏览器中登录cursor.sh
- CodexBar会自动读取会话Cookie
Gemini:
Local Cost Scanning
本地成本扫描
CodexBar can scan local JSONL logs for Codex and Claude usage over the last 30 days:
CodexBar可扫描本地JSONL日志,查看过去30天内Codex和Claude的使用情况:
Scan Codex local logs
扫描Codex本地日志
codexbar cost --provider codex
codexbar cost --provider codex
Scan Claude local logs
扫描Claude本地日志
codexbar cost --provider claude
codexbar cost --provider claude
codexbar cost --provider both
Logs locations:
- **Codex**: `~/Library/Application Support/Code/User/globalStorage/openai.codex/logs/`
- **Claude**: `~/Library/Application Support/Claude/claude_desktop_config.json` (log path)
codexbar cost --provider both
日志位置:
- **Codex**: `~/Library/Application Support/Code/User/globalStorage/openai.codex/logs/`
- **Claude**: `~/Library/Application Support/Claude/claude_desktop_config.json`(日志路径)
Provider Status Polling
服务商状态轮询
CodexBar polls provider status pages and shows incident badges:
- Green: Operational
- Yellow: Degraded performance
- Red: Outage
- Overlay indicator on menu bar icon
Configure in Settings → Status Polling.
CodexBar会轮询服务商状态页面,并显示事件标识:
- 绿色:正常运行
- 黄色:性能下降
- 红色:服务中断
- 菜单栏图标上会显示叠加标识
在「设置」→「状态轮询」中配置。
Widgets (macOS)
Widgets(macOS)
CodexBar includes WidgetKit widgets for supported providers:
- Right-click Desktop → Edit Widgets
- Search "CodexBar"
- Add provider widgets to desktop or Notification Center
Supported: Codex, Claude, Cursor, Copilot, OpenRouter
CodexBar包含支持部分服务商的WidgetKit组件:
- 右键点击桌面→「编辑小组件」
- 搜索「CodexBar」
- 将服务商组件添加到桌面或通知中心
支持的服务商:Codex、Claude、Cursor、Copilot、OpenRouter
Enable quota notifications in Settings:
- Session quota warnings
- Weekly reset notifications
- Optional confetti effect on reset 🎉
在设置中启用配额通知:
- 会话配额警告
- 每周重置通知
- 重置时可选开启庆祝特效 🎉
Environment Variables
环境变量
Provider API keys (examples)
服务商API密钥示例
export OPENAI_API_KEY="sk-proj-xxxxx"
export ANTHROPIC_API_KEY="sk-ant-xxxxx"
export OPENROUTER_API_KEY="sk-or-xxxxx"
export DEEPSEEK_API_KEY="sk-xxxxx"
export VENICE_API_KEY="xxxxx"
export MOONSHOT_API_KEY="sk-xxxxx"
export ZAI_API_TOKEN="xxxxx"
export WARP_API_TOKEN="xxxxx"
export OPENAI_API_KEY="sk-proj-xxxxx"
export ANTHROPIC_API_KEY="sk-ant-xxxxx"
export OPENROUTER_API_KEY="sk-or-xxxxx"
export DEEPSEEK_API_KEY="sk-xxxxx"
export VENICE_API_KEY="xxxxx"
export MOONSHOT_API_KEY="sk-xxxxx"
export ZAI_API_TOKEN="xxxxx"
export WARP_API_TOKEN="xxxxx"
cat > ~/.codexbar.env << 'EOF'
export OPENROUTER_API_KEY="sk-or-xxxxx"
export DEEPSEEK_API_KEY="sk-xxxxx"
EOF
source ~/.codexbar.env
cat > ~/.codexbar.env << 'EOF'
export OPENROUTER_API_KEY="sk-or-xxxxx"
export DEEPSEEK_API_KEY="sk-xxxxx"
EOF
source ~/.codexbar.env
- Documentation: directory in repository
- Provider details:
- CLI reference:
- Development guide:
- Architecture:
- Issue tracker: GitHub Issues with labels (see )
- 文档: 仓库中的目录
- 服务商详情:
- CLI参考:
- 开发指南:
- 架构说明:
- 问题追踪: GitHub Issues(标签规则见)
- No password storage: CodexBar reuses browser sessions, OAuth tokens, and API keys
- On-device parsing: Usage data stays local
- Restrictive permissions: Config file has permissions
- Known locations only: Reads specific config files, not filesystem crawling
- Open source: Full audit available at
github.com/steipete/CodexBar
See privacy discussion:
Issue #12
- 不存储密码: CodexBar复用浏览器会话、OAuth令牌和API密钥
- 本地解析: 使用数据全程保存在本地设备
- 严格权限: 配置文件使用权限
- 仅访问指定位置: 仅读取特定配置文件,不会遍历文件系统
- 开源: 完整代码可在
github.com/steipete/CodexBar
查看审计