Умная лампа как индикатор статуса Claude Code
Разработчик подключил настольную лампу Moonside к Claude Code через BLE и хуки — теперь лампа сигнализирует о состоянии ИИ цветом.
Лампа вместо уведомлений
Пока Claude Code работает над задачей, вы можете смотреть в окно — настольная лампа сама покажет, что происходит. Разработчик из сообщества Reddit/r/ClaudeAI подключил умную лампу Moonside к терминальному ИИ-агенту через Bluetooth и open-source скрипт. Теперь синяя анимация означает «Claude думает», розовый свет — «требуется ввод», а тёплый белый — «всё готово, жду».
Как это устроено
Проект контролирует лампу Moonside по BLE (Bluetooth Low Energy — Bluetooth с низким энергопотреблением) в зависимости от состояния Claude Code, превращая её в физический индикатор статуса.
Конфиг подключается к событиям SessionStart, UserPromptSubmit, Stop, PreToolUse, PostToolUse, PermissionRequest, Notification и SessionEnd.
Цепочка работает так: событие хука Claude Code → скрипт moonside_hook.sh (записывает состояние в /tmp/moonside_state, запускает демон при необходимости) → moonside_daemon.py (постоянное BLE-соединение, читает файл состояния каждые 200 мс) → лампа Moonside через BLE по протоколу Nordic UART Service.
Схема работы
graph LR
A[Событие Claude Code] --> B[moonside_hook.sh]
B --> C[Файл состояния /tmp/moonside_state]
C --> D[moonside_daemon.py]
D -->|BLE / Nordic UART| E[Лампа Moonside]
E --> F{Цвет}
F --> G[🔵 Синий — Claude работает]
F --> H[🩷 Розовый — нужен ввод]
F --> I[⬜ Белый — ожидание]
Технические детали
Цвета настраиваются в файле moonside_daemon.py. Лампы Moonside используют Nordic UART Service (NUS) поверх BLE.
Демон включает дебаунс (задержку сброса состояния) для предотвращения ложных переходов — например, когда внутренние подсказки промптов вызывают PreToolUse сразу после Stop.
Демон автоматически находит лампу по имени — настраивать адрес вручную не нужно.
Установка занимает несколько команд в терминале:
# Скопировать хуки в глобальную папку Claude
mkdir -p ~/.claude/moonside_hooks
cp claude_hooks/moonside_hook.sh claude_hooks/moonside_daemon.py ~/.claude/moonside_hooks/
chmod +x ~/.claude/moonside_hooks/moonside_hook.sh
# Проверить BLE-подключение
python3 moonside_ble.py scan
python3 moonside_ble.py on
Размещение файлов в ~/.claude/moonside_hooks/ означает, что хуки работают во всех проектах — не нужно копировать claude_hooks/ в каждый репозиторий.
bleak — BLE-клиент для Python. Хук автоматически ищет Python в python3, /opt/homebrew/bin/python3 и $CONDA_PREFIX/bin/python3 — убедитесь, что в одном из них установлен bleak.Сравнение вариантов «железной» интеграции с Claude
| Решение | Протокол | Лампа/устройство | Сложность | Звёзды на GitHub |
|---|---|---|---|---|
| claude-lamp (Moonside) | BLE | Moonside LED | Низкая | ~108 ⭐ |
| esp32-claude-lamp | USB Serial | Любая через ESP32 | Средняя | — |
| Claude Hardware Buddy | BLE (Nordic UART) | M5StickC Plus | Средняя | Официальный |
| Philips Hue (в планах) | Wi-Fi / Zigbee | Hue bulbs | Низкая | — |
Контекст: тренд «физического» AI-UX
Anthropic также движется в эту сторону: Claude для macOS и Windows может подключать Claude Cowork и Claude Code к maker-устройствам по BLE, чтобы разработчики и мейкеры могли создавать железо, отображающее запросы на разрешение, последние сообщения и другие взаимодействия.
Референсное железо от Anthropic — M5StickC Plus: крошечная плата ESP32 с цветным дисплеем 135×240, двумя кнопками, акселерометром и зарядкой через USB-C. Стоит около $20–30 в большинстве магазинов электроники.
Умная лампа как индикатор ИИ — это не просто гик-проект, а намёк на то, как будет выглядеть рабочее место разработчика в эпоху агентских систем: физическая среда реагирует на цифровой контекст.
Исходный код: github.com/bobek-balinek/claude-lamp