Harbor Light

Download: GitHub Releases

A status light for coding agents. You can see whether Codex or Cursor is working, waiting for confirmation, or already finished, without switching back to that window.

Harbor Light turns live Codex and Cursor activity into a red, yellow, and green overlay you can drag across screens. It keeps a separate record for each app, project, and conversation, so several tasks can light up at once. The current version is 0.1.0. It supports macOS 12+ and Windows 10/11 (x64 and ARM64). The core is Rust, with no Python or Swift runtime. Source: harbor-light.

Harbor Light logo

What it does

  • Read the state at a glance: yellow while working, red while waiting, green when finished.
  • Keep tasks separate: watch several Codex and Cursor projects and chats at the same time. One finished task does not hide another that is still running.
  • Stay out of the way: the window stays on top, does not steal focus, and remembers where you dragged it.
  • Ready after install: it merges user-level Codex and Cursor hooks and sets itself to start at login.

How to read the lights

StateMeaningOverlay
YellowThe agent is thinking or running a taskBreathing
GreenThe current task is finishedPops in, then returns to idle after about 3 seconds
RedApproval is needed, or an error needs attentionFast blink
Red and yellowOne task is waiting while another is still runningBlink together
IdleNothing is activeAll three lights stay dim

Drag the black capsule to place it on another screen. The window remembers that position. If a display is unplugged and the window is left off-screen, it returns to the top-right of the main display. Open the menu from the macOS menu bar, or right-click the Windows tray icon, to see the current state, reinstall hooks, or quit. The macOS menu can also toggle launch at login.

How it works

Codex and Cursor hooks send events to a provider adapter, which writes activity files under ~/.harbor-light/activities/. Codex rollout JSONL is a fallback. The overlay reads those files and combines them into one light.

What is happeningWhat you see
Waiting, while another chat is still workingRed and yellow blink together
Waiting onlyRed blinks
No waiting, but something is still workingYellow breathes
Nothing active, but a completion has not timed outGreen pops in
Everything is idle, or completion has timed outAll three lights stay dim

A green completion stays out of the mix while anything is still waiting or working. The same Codex session can show up in a hook, an old status file, and a rollout log. Those records are deduped by provider and session, and hooks win, so a fallback rollout does not turn the yellow light on during an approval.

When one app quits, only that app's activities are cleared. An activity with no new events for 30 minutes returns to idle.

Download and install

Installers are on GitHub Releases.

PlatformNotes
macOS 12+Double-click the .pkg. It installs into Applications and configures hooks and launch at login. If it is unsigned, Control-click the package and choose Open
Windows 10/11 x64 / ARM64Double-click the setup.exe for your architecture. It installs for the current user under %LOCALAPPDATA%\HarborLight and does not need an administrator. If SmartScreen blocks it, choose More info, then Run anyway

A Windows portable zip needs one install step after you unpack it: HarborLight.exe install. That writes the hooks and the login startup entry.

To build from source you need Rust. On macOS, install the Xcode Command Line Tools and run make install in the repository. On Windows, install the MSVC Build Tools with Desktop development with C++, then run harbor-light.exe install after the release build.

Hooks

The installer merges user-level Codex and Cursor hooks and does not replace entries you already have. If you configure them by hand, the command must be an absolute path.

AppWhat turns the light on
CodexStarting a session, submitting a prompt, or using a tool is yellow. A permission request is red. Stop or session end is green
CursorSubmitting a prompt is yellow. An explicit approval request, or an execution error, is red. A normal stop is green

Cursor does not yet expose a separate approval event. Ordinary commands are not treated as "waiting", so a running install does not flash red by mistake. User-level hooks watch the local agent only. This version does not configure Cloud Agent hooks.

Uninstall

On macOS, run make uninstall in the repository. On Windows, remove it from Settings, or run:

& "$env:LOCALAPPDATA\HarborLight\HarborLight.exe" uninstall

Uninstall stops the app, removes launch at login, and deletes only the hook entries this tool wrote. Your other hooks stay in place.