Turn your Luminella into a status light and an approval button for Claude Code.
Hold the stick, speak, and it becomes text.
macOS 26 or later / Apple Silicon only / requires a BRAIN MAGIC Luminella
Claude Code barely moves on screen while it is thinking. This puts that state on the ring under your hand.
Idle, working, waiting for approval, error, done — each has its own colour on the glow ring. You can track progress without watching the terminal.
Movement carries meaning too. Steady means a settled state, a slow breath means work in progress, a fast blink means it is waiting on you. Readable from the corner of your eye.
When a permission prompt appears the ring blinks amber. One button approves, another denies. Your hand never has to go back to the keyboard.
It talks to the device directly rather than through Luminella Core. No profiles, no key assignments — install it and the ring lights up.
You never need to know which switch is number what. Pick "assign" from the menu and press the button you want while the ring is lit.
The app writes the Claude Code hook configuration for you. It only appends, never touches your existing hooks, and backs the file up first. Removing it is one click as well.
Quit the app or unplug the device and Claude Code carries on as usual. If nothing answers, the on-screen prompt decides — the physical button is never a gate you can get stuck behind.
Pull the cable and it notices; plug it back in and it reconnects on its own. No need to restart the app.
Hold the stick over and it records; let it centre and the speech is transcribed straight into whatever field you are typing in, and onto the clipboard too. Dictate a long prompt instead of typing it. Audio never leaves this Mac.
No Dock icon. The menu bar icon itself shows the current state. Claude Code launches the app when a session starts, so you do not have to keep it running.
Colours are configurable. There are three ways the ring lights: steady, breathing, and blinking.
| Colour | Motion | State | What to do |
|---|---|---|---|
| Dim blue | Steady | Idle, waiting for input | Give it a task |
| Cyan | Breathing | Thinking or running a tool | Wait |
| Amber | Blinking | Waiting for approval. Stopped | Press approve or deny |
| Purple | Blinking | Notification | Look at the screen |
| Red | Steady | Denied, or an error | Depends |
| Green | Steady | Approved, or response finished | — |
| Pink | Slow blink | Microphone starting up | Do not speak yet |
| Pink | Steady | Recording | Keep holding and speak |
| Violet | Blinking | Transcribing | Wait about a second |
If nothing is pressed within 30 seconds, the ring returns to the working colour and the normal on-screen prompt takes over. The timeout is configurable.
For the status light and the approve/deny buttons, no special macOS permissions are needed — no Accessibility, no Input Monitoring.
| Item | Detail |
|---|---|
| OS | macOS 26 or later |
| CPU | Apple Silicon (M1 or later) only. Does not run on Intel Macs |
| Device | BRAIN MAGIC Luminella (USB) |
| Software | Claude Code |
| Permissions | Depends on what you use (below) |
The Luminella link is an Amazon affiliate link. As an Amazon Associate, the author earns from qualifying purchases. Using it does not change the price you pay.
Each is asked for only when you use the feature that needs it.
| What you use | Permission |
|---|---|
| Status light and approve/deny only | None |
| Push to talk (to the clipboard) | Microphone |
| Push to talk (into the focused field) | Microphone + automation |
Typing into the focused field sends a keystroke (Cmd+V), which macOS gates behind automation permission. It can be switched off from the menu at any time, and with it off no keystroke is ever sent — the text still reaches the clipboard, so pasting gets you the same result.
This one feature needs external tools. They are not bundled with the app.
| For | Install |
|---|---|
| Recording | brew install ffmpeg |
| Transcription | pip install mlx-whisper |
The transcriber is 180MB and its speech model is over a gigabyte — out of proportion to a 22MB app, so it is called as an external command instead of being bundled. The only time anything is downloaded is when that model is first fetched; nothing is sent after that.
Plug a USB microphone in directly. The difference in start-up time is large enough to feel.
| Connection | Time until recording starts |
|---|---|
| USB microphone, direct | about 0.5s |
| iPhone (Continuity) | 1.8 to 8.6s |
That is the gap between pushing the stick and the microphone actually delivering audio. Nothing before that is captured — it does not arrive as silence, it does not exist. A sleeping iPhone takes several seconds over Continuity, which swallows the start of a sentence. Waiting for the ring to go steady avoids it, but waiting several seconds every time is not practical.
Development used a FIFINE AmpliGame A8: 0.5s to start, and it caught proper nouns the other inputs missed. Nothing depends on that particular model — any microphone you can plug in over USB should be just as quick.
As an Amazon Associate, the author earns from qualifying purchases.
It cannot run alongside Luminella Core. Both compete for the same serial port, so only one of them works at a time. Quit Luminella Core while you are using the Luminella with Claude Code.
Audio is processed entirely on this Mac and never sent anywhere, and the app itself makes no network connections. See the privacy policy for details.
Free, with no feature limits and no ads. The source is published under GPLv3.
Free
The app is notarized by Apple, so it installs straight from the download. There is no warning to work around.
Once installed, choose "Install hooks" from the menu bar icon to connect it to Claude Code.
Only if you like it. It is entirely optional, and nothing about the app changes either way.
Report bugs or request features on GitHub Issues, or email admin@gigowat.com.
No. Both hold the device's serial port, so they cannot run at the same time. While Luminella Core is running this app will report "Device: not connected". Quit Luminella Core, then choose "Reconnect device" from the menu.
Unverified. The protocol appears to be shared across the family, but the Luminella is the only device this has been tested on. The Orbital2 has hardware the Luminella lacks — a vibration motor and a rotary encoder — and none of that has been exercised. If you try it, I would be glad to hear how it went.
No, it keeps working normally. If the hook cannot reach the app it exits without returning a decision, and approval falls back to the usual on-screen prompt. The same applies if you unplug the device or let the approval time out. You can never end up unable to proceed because a button was not pressed.
It leaves it alone. The app only appends to the settings file and preserves other tools' hooks. It writes a timestamped backup before making any change, so you can always go back. "Remove hooks" deletes only the entries it added.
Registering more than one approver for the same event is possible and they coexist in the configuration. What has not been verified is which one wins when both try to answer at once. If you need predictable behaviour, enable only one of them.
The Luminella presents itself as a USB serial device. The app sets the LED colour and receives button presses over a 9600 baud serial link. That protocol is not published, so it was worked out by studying how the vendor software communicates with the device, then verified against real hardware. What is known is documented in the repository.
Microphone permission, plus ffmpeg for recording and mlx-whisper for transcription — brew install ffmpeg and pip install mlx-whisper. Together the transcriber and its model exceed a gigabyte, which is why they are not bundled. None of it is needed if you do not use the feature.
No. Transcription happens entirely on this Mac. The only network access is fetching the speech model the first time. The recording is deleted once it has been turned into text.
Yes. Switch off "入力欄に直接入力" in the menu and the transcript only goes to the clipboard; no keystroke is sent and no automation permission is needed. It is on by default, but asks before it is first enabled.
No. It requests neither Accessibility nor Input Monitoring permission, and without those it cannot read your keyboard at all. The only input it reads is the Luminella's own buttons and stick. It makes no network connections either.
Yes. No feature limits, no trial period, no ads. The source is published under GPLv3, so you can build it yourself, modify it, and redistribute it (modified versions must also be released under GPLv3).