Wiring Claude Code Hooks to a Desk Light
Three domed lenses, red above amber above green, form the face of the matte-black Status Light. Claude Code hooks can produce matching software states, although this product's current catalogue facts do not confirm how those lenses are controlled.
Which Claude Code hooks matter for notifications?
The documented Notification hook receives notification text, an optional title and a notification type. A permission prompt is one notification type, which makes it suitable for an amber needs-attention state. The Stop hook runs when the main agent finishes responding, except after a user interrupt, while StopFailure covers certain unsuccessful stops.
A Stop hook can influence whether Claude stops if it returns blocking output. A light notifier should be a side effect only: exit successfully, emit no control decision and never grant or deny permission.
What should the hook command actually do?
Read the JSON event from standard input, validate the event name and write a small record atomically. Include the Claude session identifier, working directory, state and update time. Use a temporary file followed by a rename so a reader never sees half-written JSON.
Return quickly. Put network calls, retries and hardware access in a separate local daemon that watches the state record. Log malformed input and choose unknown rather than green when parsing fails.
How do you map events to light states?
Use amber for a confirmed permission or input notification, red for a verified failure and green for a completed response that is ready for review. Green must not mean the code is correct, tests passed or a deployment succeeded. A completion hook reports conversation state, not project quality.
When several sessions share one signal, apply a documented priority rule such as failure before needs-attention before finished. Keep session-level detail in the terminal and expire records that have not been refreshed.
What can go wrong with hook-driven signals?
Hooks can run more than once, arrive after state has changed, fail because of permissions or point at a stale session. A Stop event can also occur while more human verification remains. Make updates idempotent, preserve timestamps and offer a manual all-off reset.
The Status Light has the visual vocabulary for this pattern, but do not buy it on the assumption that it has USB, network control or a public API. Confirm the actual interface first, then write the smallest adapter that can set a known state and report failure. Test the hook command with saved sample JSON before adding it to Claude settings. Then trigger one harmless notification and one ordinary completion while watching both the hook log and state file. Remove the configuration if hook failures clutter or delay normal sessions.