{"id":45803466,"url":"https://github.com/yelog/vibebar","last_synced_at":"2026-03-15T16:59:15.107Z","repository":{"id":340747260,"uuid":"1166208121","full_name":"yelog/vibebar","owner":"yelog","description":"VibeBar is a lightweight macOS menu bar app that monitors live TUI session activity for Claude Code, Codex, and OpenCode.","archived":false,"fork":false,"pushed_at":"2026-03-02T03:33:35.000Z","size":4774,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-02T18:36:59.911Z","etag":null,"topics":["bar","claude-code","codex","macos","menubar","menubar-app","monitor","opencode","status","vibe-coding","wrapper"],"latest_commit_sha":null,"homepage":"http://vibebar.yelog.org/","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yelog.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-25T01:35:16.000Z","updated_at":"2026-03-02T03:33:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yelog/vibebar","commit_stats":null,"previous_names":["yelog/vibebar"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/yelog/vibebar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yelog%2Fvibebar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yelog%2Fvibebar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yelog%2Fvibebar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yelog%2Fvibebar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yelog","download_url":"https://codeload.github.com/yelog/vibebar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yelog%2Fvibebar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30053977,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T17:46:22.538Z","status":"ssl_error","status_checked_at":"2026-03-03T17:46:22.036Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bar","claude-code","codex","macos","menubar","menubar-app","monitor","opencode","status","vibe-coding","wrapper"],"created_at":"2026-02-26T13:02:44.246Z","updated_at":"2026-03-15T16:59:15.096Z","avatar_url":"https://github.com/yelog.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VibeBar\n\n**[English](README.md)** · [中文](README_zh.md) · [日本語](README_ja.md) · [한국어](README_ko.md)\n\nVibeBar is a lightweight macOS menu bar app that monitors live TUI session activity for **Claude Code**, **Codex**, **OpenCode**, **Aider**, **Gemini CLI**, and **GitHub Copilot**.\n\n\u003cimg src=\"docs/images/vibebar.png\" alt=\"VibeBar screenshot\" width=\"600\" /\u003e\n\nMultiple icon styles and color schemes are provided, which can be configured in the settings.\n\n\u003cimg src=\"docs/images/vibebar-setting.png\" alt=\"VibeBar setting screenshot\" width=\"600\" /\u003e\n\n## Recommended Integration (Important)\n\n- **Claude Code**: use the VibeBar plugin (recommended).\n- **OpenCode**: use the VibeBar plugin (recommended).\n- **Aider**: use `vibebar` wrapper (recommended), and optionally `vibebar notify` for better awaiting-input signals.\n- **Gemini CLI**: use `vibebar` wrapper (recommended). In headless/prompt mode, wrapper auto-enables `--output-format stream-json` unless already set.\n- **GitHub Copilot**: use the VibeBar hooks plugin (recommended). Install from **Settings → Plugins → GitHub Copilot**; VibeBar auto-deploys `.github/hooks/hooks.json` to all running Copilot sessions' project directories. For projects opened after installation, click **Install** again or copy the hooks file manually.\n- **Codex**: use `vibebar` wrapper (recommended), because Codex currently has no plugin system in this repo.\n- `vibebar` wrapper supports `claude` / `codex` / `opencode` / `aider` / `gemini` / `copilot`, while plugin integration remains the preferred path where available.\n\n## Features\n\n- Real-time menu bar status for multiple sessions and tools.\n- Session states: `running`, `awaiting_input`, `idle`, `stopped`, `unknown`.\n- Three data channels for reliability:\n  - PTY wrapper (`vibebar`)\n  - Local plugin events via `vibebar-agent`\n  - `ps` process scanning fallback\n- In-app plugin management (install/uninstall/update) for Claude Code, OpenCode, and GitHub Copilot.\n- In-app wrapper command management for `vibebar`.\n- Multiple icon styles, color themes, launch at login, and update checks.\n- Multi-language UI (`English`, `中文`, `日本語`, `한국어`).\n\n## Project Layout\n\n- `VibeBarCore`: models, storage, aggregation, scanners, plugin/wrapper detection.\n- `VibeBarApp`: macOS menu bar app and settings UI.\n- `VibeBarCLI` (`vibebar`): PTY wrapper around target CLIs.\n- `VibeBarAgent` (`vibebar-agent`): local Unix socket server for plugin events.\n- `plugins/*`: Claude Code, OpenCode, and GitHub Copilot hook plugin packages.\n\n## How Session Detection Works\n\nVibeBar merges data from 3 channels:\n\n1. `vibebar` PTY wrapper: high-fidelity interaction states.\n2. `vibebar-agent` socket events: plugin lifecycle/status updates.\n3. `ps` scan fallback: process-based discovery when stronger sources are missing.\n\nState priority at tool level:\n\n`running \u003e awaiting_input \u003e idle \u003e stopped \u003e unknown`\n\nRuntime data paths:\n\n- Session files: `~/Library/Application Support/VibeBar/sessions/*.json`\n- Agent socket: `~/Library/Application Support/VibeBar/runtime/agent.sock`\n\n## Installation\n\n### Option A: Download app (recommended)\n\n1. Download latest `VibeBar-*-universal.dmg` from [GitHub Releases](https://github.com/yelog/VibeBar/releases).\n2. Drag `VibeBar.app` to `Applications`.\n3. First launch: right-click app and choose **Open** (Gatekeeper).\n\n### Option B: Homebrew\n\nAdd this repository as a tap and install:\n\n```bash\nbrew tap yelog/vibebar https://github.com/yelog/vibebar.git\nbrew install --cask yelog/vibebar/vibebar\n```\n\nOr install in one line:\n\n```bash\nbrew install --cask yelog/vibebar/vibebar --tap=yelog/vibebar\n```\n\n**Upgrade:**\n\n```bash\nbrew upgrade --cask yelog/vibebar/vibebar\n```\n\n### Option C: Build from source\n\nRequirements: macOS 13+, Xcode Command Line Tools, Swift 6.2.\n\n```bash\nswift build\n```\n\n## Quick Start (Source Build)\n\n1. Start app:\n\n```bash\nswift run VibeBarApp\n```\n\n2. Start agent (recommended for plugin events):\n\n```bash\nswift run vibebar-agent --verbose\n```\n\n3. Install local plugins for Claude/OpenCode:\n\n```bash\nbash scripts/install/setup-local-plugins.sh\n```\n\n4. Install the GitHub Copilot hooks plugin (if using Copilot):\n\nOpen **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.\n\n5. Run Codex with wrapper (recommended path):\n\n```bash\nswift run vibebar codex -- --model gpt-5-codex\n```\n\n6. Run Aider with wrapper (recommended path):\n\n```bash\nswift run vibebar aider -- --model sonnet\n```\n\n7. Optional: forward Aider notifications into VibeBar state updates:\n\n```bash\naider --notifications --notifications-command \"vibebar notify aider awaiting_input\"\n```\n\n8. Run Gemini CLI with wrapper:\n\n```bash\nswift run vibebar gemini -p \"explain this codebase\"\n```\n\nFor Gemini prompt/headless invocations (`-p`, `--prompt`, `--stdin`, or non-TTY stdin), `vibebar` automatically adds `--output-format stream-json` unless you already provide `--output-format`.\n\nGemini hooks integration example (`.gemini/settings.json`):\n\n```json\n{\n  \"hooks\": {\n    \"SessionStart\": [{\n      \"matcher\": \"*\",\n      \"hooks\": [{ \"type\": \"command\", \"command\": \"vibebar notify gemini session_start session_id=$GEMINI_SESSION_ID\" }]\n    }],\n    \"AfterAgent\": [{\n      \"matcher\": \"*\",\n      \"hooks\": [{ \"type\": \"command\", \"command\": \"vibebar notify gemini after_agent session_id=$GEMINI_SESSION_ID\" }]\n    }],\n    \"SessionEnd\": [{\n      \"matcher\": \"*\",\n      \"hooks\": [{ \"type\": \"command\", \"command\": \"vibebar notify gemini session_end session_id=$GEMINI_SESSION_ID\" }]\n    }]\n  }\n}\n```\n\n9. Optional fallback: run Claude/OpenCode via wrapper when plugin is unavailable:\n\n```bash\nswift run vibebar claude\nswift run vibebar opencode\n```\n\nPlugin docs:\n\n- `plugins/README.md`\n- `plugins/claude-vibebar-plugin/README.md`\n- `plugins/opencode-vibebar-plugin/README.md`\n- `plugins/copilot-vibebar-hooks/README.md`\n\n## Development Commands\n\n```bash\n# Build\nswift build\nswift build -c release\n\n# Run\nswift run VibeBarApp\nswift run vibebar-agent --verbose\nswift run vibebar codex\n\n# Test (placeholder)\nswift test\n```\n\nPackage universal `.dmg`:\n\n```bash\nbash scripts/build/package-app.sh\n```\n\n## Troubleshooting\n\n- No menu bar icon: ensure local macOS GUI session (not headless/SSH).\n- Stale sessions: use **Purge Stale** and verify session files path above.\n- Missing plugin events: ensure `vibebar-agent` is running and check socket path:\n\n```bash\nswift run vibebar-agent --print-socket-path\n```\n\n## Limitations\n\n- Without plugins, awaiting-input detection relies on heuristics.\n- Codex has no plugin event channel in this repo yet.\n- Aider has no native plugin event channel in this repo yet; use `vibebar notify` via `--notifications-command` for better awaiting-input detection.\n- Gemini CLI transcript parsing is auxiliary only; it augments hook/process detection and should not be treated as a primary real-time source.\n- 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).\n- Automated tests are still minimal.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyelog%2Fvibebar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyelog%2Fvibebar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyelog%2Fvibebar/lists"}