A tiny macOS menu bar app that shows Claude Code and Codex live status: animated icons while agents are thinking or running tools, a yellow permission state when they need you, elapsed timers for active turns, completion feedback, and Codex quota details. Lightweight, no window, no dock icon, no dashboards.
Built so you can tab away during a long run and still see, at a glance, whether Claude or Codex is working, waiting on you, or done.
Status bar
| Idle | Thinking | Tool |
|---|---|---|
![]() |
![]() |
![]() |
| Permission | Claude + Codex |
|---|---|
![]() |
![]() |
Task complete
System notification
- Thinking / working — the status icon animates with a live
1m 12stimer. - Running a tool — a short label such as
Editing,Reading,Running command, orUsing tool. - Awaiting permission — a paused yellow state when Claude Code or Codex needs approval.
- Task complete — returns to the resting VibeGo icon, with optional completion sound and system notification.
- Claude + Codex together — tracks both agents from their hook state files and combines active sessions into one menu-bar readout when needed.
- Session menu — shows recent Claude and Codex sessions, including project/title and status, with overflow when there are many sessions.
- Open the right place — clicking a session opens its conversation, or jumps to the exact terminal tab it runs in (Terminal, iTerm, Ghostty, or a VS Code / Cursor / Qoder pane). See Clicking a session.
- Codex limits — shows two vertical 5-block meters: the left column is the 5-hour window remaining, the right column is the 7-day window remaining. Click it for plan, context, reset, and update details.
Everything is controlled from the menu:
- Show timer: toggle the elapsed
1m 1sclock. - Play completion sound: a soft chime when a turn longer than a minute finishes.
- Show Completion Notification: a macOS system notification when a turn finishes. Click it to open the matching session.
- Version and update: the menu shows your current version, with a one-click "Update available" when a newer release exists.
| Surface | Tracked? |
|---|---|
| Claude Code CLI (terminal) | ✅ |
| Claude Code Desktop — Code tab | ✅ |
| Cursor (Claude Code extension) | ✅ |
| Claude Desktop — Chat tab | ❌ |
| Cowork | ❌ |
| Codex CLI / app hooks | ✅ |
Click any session in the menu to jump back to where it runs. What opens depends on where the session lives:
| Session runs in | Tracked? | Click opens |
|---|---|---|
| Claude Code / Codex CLI in Terminal.app | ✅ | The exact Terminal tab |
| Claude Code / Codex CLI in iTerm2 | ✅ | The exact iTerm tab |
| Claude Code / Codex CLI in Ghostty | ✅ | The exact Ghostty tab |
| CLI in VS Code / Cursor / Qoder integrated terminal | ✅ | The exact editor pane ¹ |
| CLI in Warp / WezTerm / kitty / Alacritty | ✅ | Resume the exact completed session, or use the app/transcript fallback |
| Claude Code Desktop — Code tab | ✅ | The conversation in Claude Desktop |
| Codex app | ✅ | The conversation in Codex |
| Claude Desktop — Chat tab | ❌ | — |
| Cowork | ❌ | — |
¹ Needs the bundled VibeGo Bridge extension in that editor. It's installed into VS Code, Cursor, and Qoder automatically on first launch. Covered or minimized editor windows are also raised to the front — grant VibeGo Accessibility once when prompted. If an exact live terminal target can't be verified, VibeGo resumes a completed CLI session by ID or opens the matching app conversation, then falls back to the transcript.
- macOS 12+
- Claude Code (CLI or the Desktop app)
- Node.js
Extract it, drag the app to Applications, launch once. Builds made without an Apple Developer ID may require right-click Open or approval in System Settings on first launch.
- Download the latest
VibeGo-<version>.zipfrom Releases. - Extract it and drag VibeGo into Applications.
- Launch it once. On first launch it wires up the Claude Code and Codex hooks for you automatically.
- Start a new Claude Code or Codex session, the icon updates whenever an agent is active.
VibeGo uses Sparkle for automatic updates. Open About from the menu bar item, then choose Check for Updates… to check, download, and replace the app.
Updates are verified with Sparkle EdDSA signatures even when the app is not Developer ID signed. macOS may still show unsigned/unnotarized-app warnings for fresh installs. Launch the new version once, it refreshes its hooks on a version change, then restart Claude Code to pick them up.
Installs the hooks (status + open/close lifecycle) automatically from inside Claude Code:
/plugin marketplace add woolson/VibeGo
/plugin install vibego@VibeGo
The plugin installs the hooks but not the app itself, so drag VibeGo into Applications once (from the DMG). The plugin launches it automatically on session start unless you explicitly quit the app.
Claude and Codex hooks write immutable v2 lifecycle events under each agent's statusbar/v2/events.d directory. VibeGo is the only state reducer: it keys records by agent + session ID, tracks completion by turn ID, and polls the event inbox every 0.4s. The legacy state.json and states.d snapshots remain compatibility output for older app versions, but v2 routing never inherits from them.
Codex rate-limit data is read from the latest token_count event under ~/.codex/sessions/, using the 300-minute primary window and 10080-minute secondary window. A terminal destination is attached only when the hook finds a real interactive Claude/Codex CLI owner process. VibeGo validates that process, its start time, and TTY again before focusing a Terminal/iTerm/Ghostty tab or a VS Code/Cursor/Qoder pane.
The installer merges its hooks into ~/.claude/settings.json (backing it up first), and the app's only network call is a once-a-day GitHub release check (details).
VibeGo is built on top of the ideas and groundwork from the original claude-statusbar project. Thank you to the original author for making a small, useful menu-bar status idea open and hackable.
node "/Applications/VibeGo.app/Contents/Resources/uninstall.js" # removes only our hooksThen drag the app to the Trash.
This is an unofficial, open-source side project. It is not affiliated with, endorsed by, or sponsored by Anthropic. "Claude" and the Claude spark logo are trademarks of Anthropic, used here nominatively. This project is MIT licensed, but that covers the source code only and conveys no rights to Anthropic's trademarks or brand.
If I'm violating or impeding your trademark, Contact me on X Chat (@mickces) This is a free side project; I'm not monetizing it.
MIT








