AC Bridge

AC Bridge docs: status lights for Claude Code and Codex

Last updated

AC Bridge, also written acbridge, is a desktop app that turns Claude Code and Codex session states into colours and effects on your smart lights and plugs. It runs on Windows, macOS and Linux.

What AC Bridge does

In one paragraph AC Bridge shows what Claude Code and Codex are doing on the lights you already own, so a glance at the room tells you when an agent needs you. A profile maps session states to what your devices do. Bind one to a project folder and its sessions drive those devices. LAN devices are driven straight from your machine and their keys never leave it; your account, settings, device list, usage counts and session states sync through our servers. Your prompts, code and session transcripts are never collected. (privacy policy)

Before you start
  • Price: £2.99 a month after a 7-day free trial. Add a card to start the trial; nothing is charged for 7 days, and you pay nothing if you cancel before then. Cancel any time from your account. Pricing · start the trial.
  • Computer: Windows, macOS or Linux, with Claude Code or Codex installed on the same machine. AC Bridge works through the agent you already run, so there is no API key to buy.
  • Installers are in your account after sign-in; the app needs an active trial or plan.

Getting started

Want screenshots? How to set up AC Bridge, step by step walks through each step below in the app.

  1. Install the app.

    Sign in, open your account and get your build from the Download tab: Windows 10 or 11 (64-bit), macOS (Apple silicon or Intel) or Linux (x64 .deb, .rpm or AppImage).

  2. Finish first-run setup.

    Sign in. The Set up AC Bridge on this machine screen checks for Claude Code or Codex; press Approve & set up to install the plugin that reports session state (see hook events). You can re-run setup later.

  3. Start the bridge.

    Press Start in the top bar. From then on the bridge starts by itself when the app opens. AC Bridge runs on one computer at a time; the last one you start takes over.

  4. Add your devices.

    Scan finds the lights, plugs and LED strips on your network from 16 brands, and offers to open the firewall port device discovery needs. Integrations links the rest: Home Assistant, a Hue Bridge (press its link button), SmartThings, Matter (a pairing code from the app that already controls the device, such as Google Home, Apple Home or SmartThings), Meross and eWeLink (one sign-in fetches the device keys), Tuya (a free Tuya developer key, about 5 minutes once), an MQTT broker, and a Govee API key for Govee plugs and appliances.

  5. Make a profile.

    On Profiles, press Add profile and choose Claude profile or Codex profile. A new profile starts blank: press + Device to add the lights it drives, then pick the states you care about and choose what each one does. Start with three: working, needs permission, finished.

  6. Bind it to a project folder.

    On Bridges, press New and add the folder, open its row and, under Agents and lights, pick the profile for Claude or Codex. Then open Claude Code or Codex there as usual. Your lights follow the session.

First launch

macOS

Updating on a Mac

In the app, choose Account & System settings from the account menu, open System and, beside App version, press Check for updates, then Install update: AC Bridge restarts on the new version. To update by hand instead:

  1. Quit AC Bridge before you replace it. If its icon is in the menu bar, click it and choose Quit AC Bridge. Closing the window is not always enough. If the app is still open, replacing it fails with “The operation can't be completed because the item AC Bridge is in use”.
  2. Download the new dmg from the Download tab of your account, open it and drag AC Bridge to Applications. If your Mac says an older item named “AC Bridge” already exists, choose Replace.
  3. Open AC Bridge from Applications. If your Mac says it is an app downloaded from the internet, choose Open.
  4. Your Mac may also ask for your login password for a Keychain item named AC Bridge Safe Storage. Enter it and choose Always Allow.

Hook events AC Bridge uses

AC Bridge reads each session's state through the agent's own hook system (the Claude Code hooks reference, the Codex hooks docs), and the app's first-run setup wires both agents. Nothing is scraped from your terminal.

Claude Code

Setup installs the AC Bridge plugin, and the plugin registers its own hooks.

Claude Code event State
SessionStartstarted, or resumed.
SessionEndended.
UserPromptSubmitworking.
PreToolUseneeds input (AskUserQuestion), plan ready (ExitPlanMode), workflow started.
PostToolUsekeeps the context reading fresh; working again once you answer.
PostToolUseFailureerror.
Notificationby type: permission_prompt is needs permission, agent_needs_input or elicitation_dialog needs input, agent_completed task completed, idle_prompt idle, rate_limit_warning rate limited and mcp_server_error error. Claude Code sends idle about a minute after Claude finished responding, if you have not typed since; AC Bridge usually sets it sooner.
Stopfinished, at the end of every turn.
StopFailureerror, or rate limited when the turn ended on a usage limit.
SubagentStartsubagent started.
SubagentStopsubagent finished.
PreCompactcompacting.
PostCompactcompaction done.
PermissionDeniedpermission denied.
TaskCompletedtask completed.

Codex

Setup adds its entries to ~/.codex/hooks.json beside your own hooks, and a marked AC Bridge block to ~/.codex/config.toml for the device tools. Codex runs a new hook only once trusted: after setup, or an update that adds an event, type /hooks and trust the AC Bridge hooks, or that event stays silent. Your notify setting is left alone.

Codex event State
SessionStartstarted, or resumed.
SessionEndended.
UserPromptSubmitworking.
PermissionRequestneeds permission, the moment Codex asks for approval.
PostToolUsekeeps the context reading fresh; error when a tool result comes back as an error.
PreCompactcompacting.
PostCompactcompaction done.
SubagentStartsubagent started.
SubagentStopsubagent finished.
Stopfinished.

Claude Code: what the hooks leave out

The plugin takes needs permission from the permission_prompt notification, not the PermissionRequest hook. Context, permission-mode and model changes have no hook; the bridge works them out from the session. Setup's own edits to ~/.claude/settings.json are a statusLine entry (it chains any status line you have, and feeds the context and usage readings) and a narrow permissions allow-list for its device tools; the hooks live in the plugin, not that file.

States and effects

A profile rule pairs the state that triggers it with the effect your device runs. A Claude Code profile offers 29 states and a Codex profile 19, because the two agents report different things; the editor lists only the states the agent you chose can produce. Twelve main states are listed first (eight on a Codex profile) and the rest fold under Advanced states. The Claude Code status light page gives an example colour and hook for six states.

Session state When it fires
started / resumedA session begins, or picks up an earlier one.
workingThe agent is actively doing something.
needs permissionWaiting for your approval. On Codex, as soon as Codex asks.
needs inputIt asked a question and is waiting for the answer. Claude Code only.
plan readyA plan is ready for your review. Claude Code only.
idleThe turn ended and nothing has happened since. Claude Code only: AC Bridge sets it a moment after the turn, unless you type or Claude asks something; Claude Code's own idle notification is a backstop.
finished / task completedThe turn, or the task, is done. Task completed is Claude Code only.
endedThe session closed.
errorSomething failed.
rate limitedA state for your Claude plan's usage limit (the 5-hour or weekly window). Claude Code profiles list it.
Session state When it fires
context low / context criticalThe session is running out of context window.
compacting / compaction doneThe context is being compacted, and has finished.
permission deniedYour permission rules blocked a tool call without asking. Claude Code only.
usage high / cost alarmPlan usage or session spend passed your threshold. Claude Code only.
long runWorking without a break past your minutes threshold.
subagent started / subagent finishedA sub-task was spawned, or completed.
plan mode / auto-accept mode / bypass permissions / normal modeThe permission mode changed.
model changedThe session switched model.
review changedYour pull request's review state changed (approved, changes requested). Claude Code only.
workflow startedA multi-agent workflow began. Claude Code only.

Effects

Nine effects, plus plain colour, brightness and on/off. The editor offers only what a device advertises, and filters the one-tap presets (Alert, Police, Party, Candle, Sunrise, Breathe) the same way. Breathe and Candle need no colour, so they work on a dimmable white bulb.

Device Effects it gets
Colour lightAll nine.
Dimmable white lightFour: Flash, Strobe, Pulse, Candle.
Light that cannot dimTwo: Flash, Strobe.
PlugNone.
Effect What it does
FlashA set number of on/off blinks, at an on and off time you pick.
StrobeRapid blinking at a set rate, for a set duration.
PulseBreathes between low and high brightness. Needs no colour.
FadeA glide between colours, over seconds or a five-minute sunrise.
LoopCycles a list of colours, holding and cross-fading each one.
CandleA warm, irregular flicker at a colour temperature you pick. Needs no colour.
RainbowSweeps the full hue circle.
SirenAlternates two colours at a set rate.
MeterMaps a live value (context used, plan usage or session cost) onto colour stops and keeps tracking it.

Lighting profiles

A profile is a named set of rules, state → what these devices do: colour, brightness, on/off, an effect or a scene.

The bridge will not start

In order, because each one rules out the next:

  1. Is your subscription active?

    Local device control needs an active plan or trial: check your account. A lapsed plan pauses automation and deletes nothing.

  2. Is this machine signed in?

    Sign in from the app.

  3. Is first-run setup finished?

    It is a one-time step for each account on each computer. Finish it in the app.

  4. Is the port in use?

    The bridge serves a local control API on 127.0.0.1, port 8790 by default. If another program holds that port, the app says so: close that program and press Start again, or set a different hubPort in AC Bridge's config.json and restart the app.

  5. Re-check setup.

    In the app, open the account menu (your name, top right), choose Account & System settings, then the System tab. Bridge setup has a Run setup button: it runs setup again and lists each step (Agent-state plugin, Codex hooks, Firewall rule, Statusline tee and the rest) with its state, the reason when one fails, and a command to run by hand when a step needs admin rights. After the first run the button reads Re-check setup.

Devices found but not controllable Ten of the 16 LAN brands need no account (newer Kasa models need your TP-Link login, and an encrypted ESPHome node asks for its API key once), though Govee, Yeelight and Roku need local control switched on first. The rest need a one-time step: a sign-in (Tapo, Meross, eWeLink), a free Tuya developer key, or a button press (Hue Bridge, Nanoleaf). Open Integrations and link the provider, then re-run Scan: the device moves from Needs a one-time setup to Ready to add.

Codex does not change the lights Codex skips a hook until you trust it. Type /hooks inside Codex, trust the AC Bridge hooks, then start a new session.

Still stuck? Email support@ac-bridge.com — a person reads it. Include what you tried and what the app's Bridge setup shows.

Guides