This project is a fork of claude-status-bar by Mick Cesanek, adapted for OpenCode.
A tiny macOS menu bar app that shows OpenCode's live status: a spinner while it's thinking or running a tool, a yellow dot when it's awaiting your permission, and the elapsed time of the current turn. Lightweight, no window, no dock icon, no usage dashboards.
Built so you can tab away during a long "thinking" stretch and still see, at a glance, whether OpenCode is working, waiting on you, or done.
Important
Multi-session support. When several OpenCode sessions run at once (multiple terminals), the menu bar surfaces the highest-priority one: a session awaiting your permission is never hidden behind one that's thinking. The dropdown lists every live session. Click a session to bring its terminal app to the front.
- Thinking / working — the icon animates, with a live
1m 1stimer. - Running a tool — a short label (
Editing,Reading,Writing,Running command, …). - Awaiting permission — a paused yellow dot.
- Idle / done — shows
Doneand rests on a prompt caret.
Everything is controlled from the menu:
- Show timer: toggle the elapsed
1m 1sclock. - Play completion sound: a soft chime whenever a working session finishes (on by default).
- Color theme: Orange or System (adaptive black/white).
- Version and update: the menu shows your current version, with a one-click "Update available" when a newer release exists.
- macOS 12+
- OpenCode CLI
- Node.js (for building from source)
-
Download the latest
OpenCodeStatusBar.dmgfrom Releases. -
Open it and drag OpenCode Status Bar into Applications.
-
Because the DMG is not signed with an Apple Developer ID, macOS will show a Gatekeeper warning. Remove the quarantine flag:
xattr -dr com.apple.quarantine /Applications/OpenCodeStatusBar.app
-
Launch OpenCode Status Bar once. On first launch it installs the OpenCode plugin for you automatically.
-
Start a new OpenCode session, the icon appears whenever OpenCode is running.
Download the latest DMG and drag it into Applications (choose Replace). The app refreshes its plugin the next time it starts up, so you don't need to run anything by hand. Your next OpenCode session picks it up.
Important
Updated mid-session? Sessions already open won't show up until they do something (send a prompt) or you start a new opencode session.
The plugin is built from source and not committed to the repo. First build it:
pnpm install
pnpm build:pluginThen copy the built plugin into OpenCode's plugin directory:
cp .opencode/plugins/opencode-status-bar.js ~/.config/opencode/plugins/opencode-status-bar.jsFinally build the app from source (see CONTRIBUTING.md).
The app is stateless. OpenCode fires events as it works; the plugin writes those updates to ~/.local/state/opencode/statusbar/state.d/. The app polls that directory and aggregates every live session into a single icon, a permission dot if one needs you, animating if any session is working, resting when all are idle. It launches itself when OpenCode opens and quits when nothing's running, so there's nothing to manage.
The app's only network call is a once-a-day GitHub release check (details).
Icon quitting right after you open it or not showing? See Troubleshooting, most of it is expected behavior, not a bug.
rm ~/.config/opencode/plugins/opencode-status-bar.js
rm -rf ~/.local/state/opencode/statusbarThen drag OpenCode Status Bar from Applications to the Trash.
This project was originally built as claude-status-bar by Mick Cesanek and then adapted for OpenCode. Thank you to everyone who contributed code, fixes, and ideas along the way.
See CONTRIBUTING.md for what fits, what doesn't, and how to build.
MIT

