Stop checking on your agents.

LampBoard is a column of lamps that floats over your Mac, one lamp per project. It shows what every Claude Code and Codex session is doing, blinks when one is stuck waiting for your answer, and takes you to that window in one click.

You keep your eyes on the work in front of you. The panel does the checking.

Free, open source, and nothing leaves your Mac unless you ask it to.

New in 2.1: every session, in its own terminal, in one window.

Press ⌘⇧L until the panel opens into the Hub: the same rows on the left, the session you choose in the middle in its own terminal (Claude Code itself, with its commands, models, modes and questions), and the project's files, an open file or a shell on the right.

Attach a project, on this Mac or another machine, and start or resume its sessions in tmux from the Hub, with no other terminal and no VS Code. Talk to LampMaster in its own terminal: it reads your sessions and, when you say so and only after asking, writes to them, stops or starts them. How the Hub works

The Hub: the sessions and projects on the left, a session's terminal in the middle with Claude Code's command list open, the project's files on the right

Example sessions, on a test Mac.

Find the one that's stuck.

Twelve windows. One agent has stopped and is waiting for you. From the outside it looks exactly like the eleven that are still working. Open windows until you find it.

This is the tax. After a few rounds of it you stop checking, so finished work sits unread while a blocked agent stays blocked. LampBoard turns it around: the sessions call you. You never poll them.

Windows opened: 0 of 12

Every window you open and close is a context switch you did not choose. The panel below is the same twelve, once they can speak.

Try it. This is the whole product.

A desk with five windows and the panel over them. Click a lamp to raise its window. Drag a handle to reorder. Right-click a row for its menu. Rest on a row for its card. Click the count in the bar above the rows to see only what waits. Press 1 to 5 to jump by keyboard.

Two sessions in mobile-client, one Claude Code and one Codex, share a row. The handle colour tells them apart. The Q3 report runs in the Claude desktop app, so its colour is read from the transcript: working, ready or resting, and the card says so.

The button beside the width control, under the rows, sends the panel into the menu bar, where it opens and closes from one lamp that blinks only when something wants you. Try it on the desk: the panel goes away, the lamp appears beside the clock, and clicking anything else puts the drop-down back. Coming out, the panel returns to the corner you left it in. How the lamp works

1…5 raise a slot

A hidden row is folded into a summary line that lights up when something in it needs you. A row at rest for twelve hours folds into one Resting line at the foot of the column, and comes back to its place the moment it does something.

The first minute, on your own sessions.

The first launch opens a small window of seven screens, one idea and one button each. The button does what is still missing on your Mac — connect Claude Code, ask for Accessibility, install the helper, turn on alerts — and says Next once it is done.

No session at hand? Practice with samples puts three invented rows at the top of the real panel, under a band that says so, with Remove beside it. They are drawn and nothing else: no notification, no count in the bar and no LampMaster round ever sees them. Here is what they do, in about twenty seconds. Click one to read it.

The first minute, in the guide

  1. See every agent at a glanceConnect Claude Code, and Codex where it is installed.
  2. Your first lampStart or restart a session, or practise with the samples.
  3. Three colours to knowYellow works, green has an answer, amber waits for you and is the only thing that blinks.
  4. One click and you are thereAccessibility, so a click raises the right window and not just the app.
  5. Answer without changing windowThe helper, so a permission opens under its row with Allow and Deny.
  6. ⌘K finds everythingA session, a past conversation, a message to send, a question for LampMaster.
  7. That’s itAlerts only when a session needs you or stops. Everything else is in Settings.
SAMPLES

Starting…

Six lamps. One of them blinks.

Blinking is spent on the one state where the work has stopped because of you. Everything else holds still.

Green means unread, not all clear. Clicking the lamp marks it seen.

Finished is not the same as done.

A turn can hand control back while three background agents keep working for another forty minutes. A list of sessions calls that green. Step through what actually happens.

The blue state comes from the payload itself. Claude Code reports background work in the Stop event, so nothing here is guessed from timestamps.

A list of sessions

LampBoard

How much room is left.

Every session has a context budget, and it decides where you start the next big task. The ring beside each lamp shows how much is spent. It stays grey on purpose: the lamp already owns the colour.

On a Codex row the window size comes from Codex itself. The card says declared, because that number rests on their figure, not ours.

And how long until it resets.

The ring is one conversation's budget. This is the account's: how much of the five-hour window is gone, and when it comes back. It is drawn here and in the panel above so you can see it; in the app it is off until you switch it on — Usage left, in Settings › Privacy & data — because it is the only thing that goes anywhere besides the version check and LampMaster. The desk’s ⋯ menu carries a copy of the switch, so you can try it there.

It asks with the credential Claude Code already keeps in your keychain — and, for sessions the Claude application runs, with the one it hands those sessions — and reads it without ever renewing it: spending the refresh token beside it could sign you out of Claude Code, so there is no code here that touches it. When the borrowed token ages out the strip goes quiet and says why — which is exactly the stretch when you are spending nothing.

One line per account.

A laptop and a build box can be signed in differently, on plans of different sizes. One unlabelled bar there would read as your remaining room while the sessions spending the other account’s plan sat a few rows above it. Two accounts that would read the same are told apart by their domain.

The node is asked on the node.

A machine behind the tunnel answers for itself. Three percentages cross the wire; the credential never does.

The free copy is a trap.

Claude Code caches the same figures on disk, free to read. Measured here, that cache said 0% and 6% while the account was at 9% and 15% — fifteen hours stale, with nothing on its face to say so. Every reading in the card carries its age.

Rows stay where you put them.

Sort by urgency and the row you need moves every time. Keep your order and it lights up where your eye already looks. The first nine rows are keyboard slots, so slot 3 is the same project tomorrow.

Sorted by urgency

Three events in, and nothing is where you left it.

Your order

The row lights up where it has always been.

A new project is added at the bottom and stays there until you move it.

What it cannot see.

Claude Code and Codex get the same row. What each row can promise differs, and the card says so rather than letting you find out later.

Codex has no error event, so a Codex row never turns red. Claude desktop sessions never read the hooks, so their colour comes from the transcript and never goes amber. Cloud sessions in the desktop app run in a VM this Mac cannot see, and they are not shown at all.

Claude CodeCodexClaude desktop, local
Where it looks~/.claude~/.codexthe app's own index
Context ringmeasureddeclared by Codexmeasured
Amber names the toolno, by choiceyesnever amber
Red when a turn failsyesnevernever red
Blue while agents workyesyesderived
A click raisesthe window or tabthe window or tabthe app

What it never does.

It never answers for you.

The hooks that decide a permission stay unregistered. With the helper and a switch you turn on, a permission can open under its own row with Allow and Deny — and only your click or key answers it.

Nothing leaves your Mac unless you ask.

The server listens on 127.0.0.1 only, and a test checks that with lsof against the live process. Three things go out, each yours to allow: the check for a new version, usage left once you switch it on, and — only once you switch it on — LampMaster's reading of your sessions, with your own account.

Nothing turns itself on.

Notifications, presence, writing to a session, answering its permissions from the panel, the deep link into a tab and opening a background session in LampBoard on a click are all off until you switch them on, each in one place: Settings.

Why you can let it near your sessions · How it compares

Install it.

macOS 14 or later. No Dock icon: the panel is the app. Its first launch opens a welcome window whose first button connects Claude Code, and Codex where it is installed. No terminal step.

LampBoard 2.3.1signed and notarized · 6.1 MB · .dmg
Download for macOS

Or with Homebrew. All four lines: since Homebrew 6 a cask from a third-party tap is refused until the tap is trusted.

$ brew tap marmyx77/tap
$ brew trust marmyx77/tap
$ brew install --cask lampboard
$ open -a LampBoard

macOS asks once. The first launch shows the "downloaded from the Internet" dialog while you are still looking at the terminal. Click Open. Until you do, the panel does not appear.

Codex only: open Codex, run /hooks, and approve the entry. Codex will not run a hook it has not been told to trust, and it says nothing when it declines.

Then read the guide. Thirty-three pages on what every lamp and ring means, what the menus and Settings do, and what LampBoard cannot see. Open the guide

1373 domain tests and 186 end-to-end tests run on every change. Two third-party packages, vendored with their licences: the SwiftTerm terminal behind the Hub, and part of Clarc behind the Hub's reading of a conversation. MIT licence.