Каждый день я делал одно и то же: открывал Spotlight, чтобы найти файл или запустить программу, а потом лез в браузер, открывал вкладку с ИИ и вставлял туда вопрос. Два разных места для одного действия — «мне нужно что-то быстро». Захотелось, чтобы это была одна строка: нажал клавишу, напечатал — и если это файл, он открывается, а если вопрос, отвечает нейросеть.
Так появилась Lumi — бесплатная программа с открытым кодом для macOS и Windows. Сделал я её не один, а вместе с ИИ-ассистентом Claude Code: о том, как это было, — в конце статьи.
Что умеет
Одна клавиша на всё. Строка открывается по ⌥ Ё на Mac и Alt+Ё на Windows — клавише слева от единицы. Она не занята ни системой, ни популярными программами, и до неё легко дотянуться левой рукой.
Сама понимает, поиск это или вопрос. Набираете «отчёт» — видите файлы и программы. Набираете «как перевести дюймы в сантиметры» — внизу появляется строка «Спросить Claude», и по Enter ответ печатается прямо в окне. Если надо спросить модель, даже когда нашлись файлы, — ⌘↩ / Ctrl+Enter. Уточняющие вопросы продолжают разговор, Esc — назад.
Поиск — системный. На Mac Lumi использует индекс Spotlight, на Windows — меню «Пуск» и Windows Search. Своего индексатора нет, ничего не сканируется заново и не грузит диск.
Любая нейросеть на выбор:
Подписки без API-ключей. Если у вас уже есть подписка Claude, ChatGPT или Google-аккаунт для Gemini, Lumi работает через их официальные консольные программы: Claude Code, Codex CLI и Gemini CLI. Вы один раз входите в свой аккаунт в самой программе сервиса, а Lumi просто передаёт ей вопрос. Ключи и пароли Lumi не видит.
Любой OpenAI-совместимый сервис: OpenRouter, OpenAI, DeepSeek, Groq, Mistral, а также YandexGPT и GigaChat. Достаточно вставить адрес, ключ и название модели.
Локальные модели через Ollama или LM Studio — бесплатно, без интернета и без ограничений по странам.
Пять языков интерфейса: русский, английский, немецкий, испанский и французский.
Как пользоваться бесплатно
Платить за подписку не обязательно. Два самых простых варианта:
OpenRouter. Регистрируетесь на openrouter.ai, создаёте ключ и в Lumi выбираете «Подключить модель» → OpenRouter. Модели с пометкой
:freeбесплатны, напримерgoogle/gemma-4-31b-it:free(хорошо знает русский) илиnvidia/nemotron-3-super-120b-a12b:free. У бесплатных моделей бывают очереди: если пришёл пустой ответ, подождите или возьмите другую.Ollama. Ставите Ollama, скачиваете модель командой
ollama pull <модель>, в Lumi выбираете «Подключить модель» → Ollama. Всё работает на вашем компьютере, вопросы никуда не уходят. Для слабых машин берите модели поменьше — на 3–8 миллиардов параметров.
Если вы в России: Claude, ChatGPT и Gemini официально здесь недоступны, а сервисы иногда отвечают ошибкой 403. Lumi в этом случае так и объясняет: сервис не принимает запросы из вашей страны или сети, а ключ, скорее всего, в порядке. Без ограничений работают Ollama, GigaChat и YandexGPT.
Как это устроено
Для тех, кому интересно заглянуть внутрь.
Две отдельные программы, без кроссплатформенных фреймворков. Версия для Mac написана на Swift (AppKit + SwiftUI), для Windows — на C# (WPF, .NET 8). Electron не хотелось: программа, которая висит в фоне целый день и открывается по клавише, должна стартовать мгновенно и почти не занимать память. Mac-версия собирается одним вызовом swiftc без проекта Xcode — весь процесс сборки умещается в короткий shell-скрипт.
Окно поиска. На Mac это NSPanel, который не отбирает фокус у текущего приложения и появляется поверх полноэкранных окон, а SwiftUI внутри подстраивает его высоту под результаты. Поиск — через NSMetadataQuery, тот же движок, что у Spotlight.
Горячая клавиша на любой раскладке. На Mac клавиша регистрируется через Carbon RegisterEventHotKey сразу под двумя кодами: ANSI-клавиатуры сообщают её как Grave, европейские ISO — как Section. На Windows было интереснее: RegisterHotKey принимает виртуальный код клавиши, а он зависит от раскладки (` на английской, ^ на немецкой, ² на французской). Поэтому Lumi ставит низкоуровневый хук клавиатуры и узнаёт клавишу по скан-коду 0x29 — её физическому месту. Попутно пришлось учесть, что Ctrl+Alt на европейских раскладках — это AltGr, которым печатают символы, и такие нажатия Lumi пропускает.
Ответы потоком. С консольными программами Lumi общается через их JSON-потоки: claude -p --output-format stream-json, codex exec --json, gemini --output-format stream-json. Каждая строка — событие, из которого берётся новый кусок текста. Codex и Gemini запускаются в режиме «только чтение» в пустой папке: Lumi задаёт вопросы, а не даёт нейросети управлять компьютером. С OpenAI-совместимыми сервисами — обычный Server-Sent Events. Подвох: некоторые сервисы возвращают ошибку не HTTP-кодом, а событием error внутри успешного потока, и без отдельной обработки пользователь видел бы просто пустой ответ.
Ключи хранятся в Связке ключей на Mac и шифруются через DPAPI на Windows — в настройках на диске их нет.
Сборка и выпуск — целиком на GitHub Actions. Тег v* запускает сборку обеих версий: .dmg для Mac, установщик Inno Setup и portable-.exe для Windows. Windows-версию перед публикацией прогоняет автотест: запускает программу на виртуальной машине, нажимает горячую клавишу, ищет, задаёт вопрос и сохраняет скриншот после каждого шага. Затем публикуется релиз, а заметка о версии сама уходит постом в Telegram-канал.
Как мы это делали: я и Claude Code
Скрывать не буду: код Lumi писал не я руками, а Claude Code — ИИ-ассистент для программирования, который работает прямо в терминале. Но и «нажал кнопку — получил приложение» тоже не про это. Получилась настоящая совместная работа, где у каждого своя роль.
Что делал я. Придумывал, что должна уметь программа, и объяснял это обычными словами: «объедини Spotlight и свою строку в одно приложение», «сделай так, чтобы можно было подключать разные модели», «добавь Windows», «поддержи разные языки». Пользовался каждой сборкой сам и решал, что оставить, а что переделать: какая горячая клавиша удобнее, какая иконка лучше, не слишком ли острые углы у маскота. Выбрал название и маскота из десятков вариантов, записал видео для демонстрации. И, что оказалось очень важным, раздал программу друзьям и приносил их проблемы.
README и тексты я не писал с нуля, но решал, что в них должно быть: на каких языках, с какой гифкой, как разделить инструкции для Mac и Windows. Потом читал и просил поправить, пока не становилось понятно человеку, который видит проект впервые.
Что делал Claude. Писал код на Swift и C#, разбирался с системными API, настроил сборку и автотесты на GitHub, писал README и тексты к обновлениям. Когда я присылал скриншот с ошибкой, он находил причину и чинил.
Что я понял по ходу:
Реальные пользователи важнее всего. Самые полезные исправления появились из жалоб друзей. У одного Lumi писала «Claude Code не найден», хотя он вообще не хотел пользоваться Claude, а хотел другую модель. А когда сервис отвечал ошибкой 403, Lumi называла её «неверным ключом», хотя на деле запросы блокировались по стране. Сам я бы этого не заметил: у меня всё работало.
Нужно проверять, а не верить на слово. Windows-компьютера у меня нет, поэтому Windows-версию проверяет автотест на виртуальной машине GitHub: он запускает программу, нажимает клавиши и делает скриншоты. Он не раз ловил ошибки, которые иначе ушли бы к пользователям.
Решения остаются за человеком. ИИ быстро пишет код, но что делать, как назвать, когда выпускать и что публиковать — решал я. Каждый пост в канал и каждый релиз выходил только после моего «да».
Если давно хотели сделать свою программу, но не умеете программировать или не хватает времени, — попробуйте так. Главное — чётко понимать, что вы хотите получить, и много пользоваться тем, что получается.
Что дальше
В планах — история вопросов, вопрос по снимку экрана («что на этой картинке?») и свои быстрые команды вроде «переведи» или «объясни код». Буду рад идеям в комментариях: чего вам не хватает в Spotlight или в «Поиске» Windows?
Ссылки
Скачать и исходники: github.com/AlbertS15/Lumi — лицензия MIT
Новости и гайды по подключению моделей: Telegram-канал
Программа пока не подписана сертификатами Apple и Microsoft, поэтому при первом запуске система предупредит о неизвестном разработчике. На Mac: правый клик → «Открыть» → «Открыть». На Windows: «Подробнее» → «Выполнить в любом случае». Весь код открыт — можно проверить, что программа делает, или собрать её самому.
Lumi — независимый проект, не связан с Anthropic, OpenAI или Google.

