Loading...
Loading...
Monitor AI coding assistant usage limits and token resets in the macOS menu bar with CodexBar
npx skill4agent add aradotso/codex-skills codexbar-menubar-ai-usage-trackerSkill by ara.so — Codex Skills collection.
brew install --cask steipete/tap/codexbar.dmghttps://github.com/steipete/CodexBar/releases/latest# macOS/Linux CLI via Homebrew
brew install steipete/tap/codexbar
# Or download tarballs from releases:
# CodexBarCLI-v<version>-macos-arm64.tar.gz
# CodexBarCLI-v<version>-linux-x86_64.tar.gz~/.codexbar/config.json# List all providers
codexbar config providers
# Enable a provider
codexbar config enable --provider grok
# Disable a provider
codexbar config disable --provider cursor
# Set API key from environment variable
printf '%s' "$OPENROUTER_API_KEY" | codexbar config set-api-key --provider openrouter --stdin
# Set API key directly (not recommended for scripts)
codexbar config set-api-key --provider deepseek --api-key "sk-xxxxx"
# Set API key without enabling
printf '%s' "$VENICE_API_KEY" | codexbar config set-api-key --provider venice --stdin --no-enableset-api-key--no-enable# Show usage for a specific provider
codexbar usage --provider codex
# Check cost/usage for last 30 days (local scan)
codexbar cost --provider codex
codexbar cost --provider claude
codexbar cost --provider both
# Refresh all enabled providers
codexbar refresh
# Show app version
codexbar version
# Configuration commands
codexbar config providers
codexbar config enable --provider <name>
codexbar config disable --provider <name>
codexbar config set-api-key --provider <name> --stdin0123# Enable Codex provider
codexbar config enable --provider codex
# Optional: Add OpenAI web dashboard cookies for extras
# (code review remaining, usage breakdown, credits history)
# Configure via Settings → Providers → Codex → OpenAI cookies# Enable Claude
codexbar config enable --provider claude
# Uses OAuth by default
# Falls back to browser cookies or Claude CLI if neededcodexbar config enable --provider cursor
# Requires browser cookies from cursor.sh
# Shows plan, usage, and billing resets# Set API key from environment
printf '%s' "$OPENROUTER_API_KEY" | codexbar config set-api-key --provider openrouter --stdin
# Or configure in GUI: Settings → Providers → OpenRouter# Set API key securely
printf '%s' "$DEEPSEEK_API_KEY" | codexbar config set-api-key --provider deepseek --stdincodexbar config enable --provider gemini
# Uses gcloud OAuth, no browser cookies requiredcodexbar config enable --provider copilot
# Uses GitHub device flow + Copilot internal usage APIimport 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)")
}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)")
}#!/bin/bash
# Track AI coding costs daily
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#!/bin/bash
# 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# Set refresh interval via GUI: Settings → Refresh
# Options: manual, 1m, 2m, 5m, 15m
# Or edit ~/.codexbar/config.json:
{
"refreshInterval": 300 // 5 minutes in seconds
}CodexBar.appCodexBar.appCodexBar.app# Check provider status via CLI
codexbar usage --provider <name>
# Force refresh
codexbar refresh
# Check logs (GUI app)
# Console.app → search for "CodexBar"
# Verify authentication
codexbar config providers# Ensure Homebrew bin is in PATH
echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# Verify installation
which codexbar
codexbar version# Fix permissions
chmod 600 ~/.codexbar/config.jsonopenaiopenai auth loginbrew install anthropics/claude/claudeclaude auth logingcloudgcloud auth login# Scan Codex local logs
codexbar cost --provider codex
# Scan Claude local logs
codexbar cost --provider claude
# Scan both
codexbar cost --provider both~/Library/Application Support/Code/User/globalStorage/openai.codex/logs/~/Library/Application Support/Claude/claude_desktop_config.json# Provider API keys (examples)
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"
# Set all at once
cat > ~/.codexbar.env << 'EOF'
export OPENROUTER_API_KEY="sk-or-xxxxx"
export DEEPSEEK_API_KEY="sk-xxxxx"
EOF
source ~/.codexbar.envdocs/docs/providers.mddocs/cli.mddocs/DEVELOPMENT.mddocs/architecture.mddocs/ISSUE_LABELING.md600github.com/steipete/CodexBar