VibeBar is a lightweight macOS menu bar app that monitors live TUI session activity for Claude Code, Codex, OpenCode, Aider, Gemini CLI, and GitHub Copilot.
| Agent Sessions and Token Usage Trend | Agent Session and Token Usage Trend |
|---|---|
|
|
Multiple icon styles and color schemes are provided, which can be configured in the settings.
- Claude Code: use the VibeBar plugin (recommended).
- OpenCode: use the VibeBar plugin (recommended).
- Aider: use
vibebarwrapper (recommended), and optionallyvibebar notifyfor better awaiting-input signals. - Gemini CLI: use
vibebarwrapper (recommended). In headless/prompt mode, wrapper auto-enables--output-format stream-jsonunless already set. - GitHub Copilot: use the VibeBar hooks plugin (recommended). Install from Settings → Plugins → GitHub Copilot; VibeBar auto-deploys
.github/hooks/hooks.jsonto all running Copilot sessions' project directories. For projects opened after installation, click Install again or copy the hooks file manually. - Codex: use
vibebarwrapper (recommended), because Codex currently has no plugin system in this repo. vibebarwrapper supportsclaude/codex/opencode/aider/gemini/copilot, while plugin integration remains the preferred path where available.
- Real-time menu bar status for multiple sessions and tools.
- Optional notch display mode on supported MacBook screens, extending a small black icon area from the right side of the notch and automatically falling back to the standard menu bar entry on unsupported primary displays.
- Session states:
running,awaiting_input,idle,stopped,unknown. - Three data channels for reliability:
- PTY wrapper (
vibebar) - Local plugin events via
vibebar-agent psprocess scanning fallback
- PTY wrapper (
- In-app plugin management (install/uninstall/update) for Claude Code, OpenCode, and GitHub Copilot.
- In-app wrapper command management for
vibebar. - Multiple icon styles, color themes, launch at login, and update checks.
- Multi-language UI (
English,中文,日本語,한국어).
VibeBar tracks token usage across supported AI tools with detailed analytics and visualization:
Supported Tools:
- Claude Code — reads from
~/.config/claude/projects/*/usage.jsonl - Codex — reads from
~/.codex/sessions/*/usage.jsonl - OpenCode — reads from
~/.local/share/opencode/opencode.db
Token Metrics:
- Input tokens, Output tokens
- Cache read tokens, Cache write tokens
- Total tokens and estimated cost in USD
Visualization Options:
- GitHub-style Heatmap — 39-week activity matrix with color-coded intensity
- Bar Chart — Stacked bars showing usage by time period
- Line Chart — Trend lines for usage over time
Configuration:
- Toggle between Tokens or Cost view
- Adjust granularity: Hour / Day / Week / Month
- Group by: Tool / Model / None
- Set refresh interval: 5min / 15min / 30min / 1hour
- Customize maximum series displayed
Access via the menu bar dropdown to view your AI usage patterns and costs at a glance.
VibeBarCore: models, storage, aggregation, scanners, plugin/wrapper detection.VibeBarApp: macOS menu bar app and settings UI.VibeBarCLI(vibebar): PTY wrapper around target CLIs.VibeBarAgent(vibebar-agent): local Unix socket server for plugin events.plugins/*: Claude Code, OpenCode, and GitHub Copilot hook plugin packages.
VibeBar merges data from 3 channels:
vibebarPTY wrapper: high-fidelity interaction states.vibebar-agentsocket events: plugin lifecycle/status updates.psscan fallback: process-based discovery when stronger sources are missing.
State priority at tool level:
running > awaiting_input > idle > stopped > unknown
Runtime data paths:
- Session files:
~/Library/Application Support/VibeBar/sessions/*.json - Agent socket:
~/Library/Application Support/VibeBar/runtime/agent.sock
- Download latest
VibeBar-*-universal.dmgfrom GitHub Releases. - Drag
VibeBar.apptoApplications. - First launch: right-click app and choose Open (Gatekeeper).
Add this repository as a tap and install:
brew tap yelog/vibebar https://github.com/yelog/vibebar.git
brew install --cask yelog/vibebar/vibebarUpgrade:
brew upgrade --cask yelog/vibebar/vibebarRequirements: macOS 13+, Xcode Command Line Tools, Swift 6.2.
swift build- Start app:
swift run VibeBarApp- Start agent (recommended for plugin events):
swift run vibebar-agent --verbose- Install local plugins for Claude/OpenCode:
bash scripts/install/setup-local-plugins.sh- Install the GitHub Copilot hooks plugin (if using Copilot):
Open VibeBar Settings → Plugins → GitHub Copilot → Install. VibeBar will copy the hook script and auto-deploy hooks.json to all currently running Copilot sessions' project directories.
- Run Codex with wrapper (recommended path):
swift run vibebar codex -- --model gpt-5-codex- Run Aider with wrapper (recommended path):
swift run vibebar aider -- --model sonnet- Optional: forward Aider notifications into VibeBar state updates:
aider --notifications --notifications-command "vibebar notify aider awaiting_input"- Run Gemini CLI with wrapper:
swift run vibebar gemini -p "explain this codebase"For Gemini prompt/headless invocations (-p, --prompt, --stdin, or non-TTY stdin), vibebar automatically adds --output-format stream-json unless you already provide --output-format.
Gemini hooks integration example (.gemini/settings.json):
{
"hooks": {
"SessionStart": [{
"matcher": "*",
"hooks": [{ "type": "command", "command": "vibebar notify gemini session_start session_id=$GEMINI_SESSION_ID" }]
}],
"AfterAgent": [{
"matcher": "*",
"hooks": [{ "type": "command", "command": "vibebar notify gemini after_agent session_id=$GEMINI_SESSION_ID" }]
}],
"SessionEnd": [{
"matcher": "*",
"hooks": [{ "type": "command", "command": "vibebar notify gemini session_end session_id=$GEMINI_SESSION_ID" }]
}]
}
}- Optional fallback: run Claude/OpenCode via wrapper when plugin is unavailable:
swift run vibebar claude
swift run vibebar opencodePlugin docs:
plugins/README.mdplugins/claude-vibebar-plugin/README.mdplugins/opencode-vibebar-plugin/README.mdplugins/copilot-vibebar-hooks/README.md
# Build
swift build
swift build -c release
# Run
swift run VibeBarApp
swift run vibebar-agent --verbose
swift run vibebar codex
# Test (placeholder)
swift testPackage universal .dmg:
bash scripts/build/package-app.sh- No menu bar icon: ensure local macOS GUI session (not headless/SSH).
- Stale sessions: use Purge Stale and verify session files path above.
- Missing plugin events: ensure
vibebar-agentis running and check socket path:
swift run vibebar-agent --print-socket-path- Without plugins, awaiting-input detection relies on heuristics.
- Codex has no plugin event channel in this repo yet.
- Aider has no native plugin event channel in this repo yet; use
vibebar notifyvia--notifications-commandfor better awaiting-input detection. - Gemini CLI transcript parsing is auxiliary only; it augments hook/process detection and should not be treated as a primary real-time source.
- GitHub Copilot hooks are per-repo: hooks.json must exist in each project's
.github/hooks/directory. VibeBar auto-deploys this file when you click Install, but projects opened after installation require a second Install click (or manual copy). - Automated tests are still minimal.
This project was inspired by ccusage. Thanks to @ryoppippi for the great idea and implementation.


