Лампа вместо уведомлений

Пока 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.

ℹ Почему не Wi-Fi?
BLE не требует подключения лампы к домашней сети. Достаточно, чтобы лампа находилась в радиусе действия Bluetooth компьютера — никаких роутеров и облачных аккаунтов.

Схема работы


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/ в каждый репозиторий.

💡 Зависимость Python
Для работы нужна библиотека bleak — BLE-клиент для Python. Хук автоматически ищет Python в python3, /opt/homebrew/bin/python3 и $CONDA_PREFIX/bin/python3 — убедитесь, что в одном из них установлен bleak.

Сравнение вариантов «железной» интеграции с Claude

РешениеПротоколЛампа/устройствоСложностьЗвёзды на GitHub
claude-lamp (Moonside)BLEMoonside LEDНизкая~108 ⭐
esp32-claude-lampUSB SerialЛюбая через ESP32Средняя
Claude Hardware BuddyBLE (Nordic UART)M5StickC PlusСредняяОфициальный
Philips Hue (в планах)Wi-Fi / ZigbeeHue bulbsНизкая

Контекст: тренд «физического» AI-UX

Anthropic также движется в эту сторону: Claude для macOS и Windows может подключать Claude Cowork и Claude Code к maker-устройствам по BLE, чтобы разработчики и мейкеры могли создавать железо, отображающее запросы на разрешение, последние сообщения и другие взаимодействия.

Референсное железо от Anthropic — M5StickC Plus: крошечная плата ESP32 с цветным дисплеем 135×240, двумя кнопками, акселерометром и зарядкой через USB-C. Стоит около $20–30 в большинстве магазинов электроники.

Умная лампа как индикатор ИИ — это не просто гик-проект, а намёк на то, как будет выглядеть рабочее место разработчика в эпоху агентских систем: физическая среда реагирует на цифровой контекст.

📝 Следующий шаг автора
Автор проекта планирует интегрировать те же хуки с лампочками Philips Hue — это откроет поддержку сотен совместимых устройств без необходимости BLE-соединения напрямую с компьютером.

Исходный код: github.com/bobek-balinek/claude-lamp