Как я создал Twiga Switcher — альтернативу Punto Switcher для Mac на Apple Silicon с помощью ИИ-агентов

Twiga Switcher — открытая утилита для переключения русской и английской раскладок на macOS. Разработчик проекта, представленный на GitHub как alwinn1977, рассказал о создании приложения с помощью ИИ-агентов. В его публикации отправной точкой стала потребность в бесплатной локальной альтернативе привычным переключателям на Mac с Apple Silicon. Это пересказ опыта автора проекта, а не собственная разработка редакции ITSNEW. Функции и условия установки следует сверять с README и выбранным релизом.
Почему готовые решения не подошли
У Punto Switcher и Caramba Switcher есть понятная ценность — они избавляют от постоянного контроля раскладки. Но вместе с готовым решением принимаешь и решения его авторов: какие функции включать, как настраивать исключения, по какой модели распространять программу. В справке Punto описаны встроенный поиск Яндекса и поиск по двойному клику, а в FAQ для Mac прямо указана автоматическая передача анонимной технической информации: типа ОС, версии и идентификатора программы. Для своей утилиты автор сформулировал требование: исправлять раскладку локально, без поиска, телеметрии и фоновых сетевых запросов.
Caramba Switcher решает задачу иначе, но тоже навязывает свои ограничения. Сервис предупреждает, что не знает всех аббревиатур и не работает абсолютно во всех программах. У разработчика к обычному тексту добавляются команды, имена переменных и смесь двух языков. Поэтому автору было важно самому определять, где автоматика помогает, а где должна остановиться. Так сложились требования к Twiga Switcher: русский и английский, автоматический и ручной режимы, отмена исправления, настройки для отдельных приложений, свои словари и открытый код.
Технологический выбор: Swift, SwiftUI, AppKit и TDD вместо привычного JS/TS
Основной профессиональный стек автора — JavaScript и TypeScript. Однако Electron здесь не подошёл бы: задача тесно связана с macOS — нужно получать события клавиатуры, определять активное поле, менять источник ввода и аккуратно исправлять уже набранный текст. Он выбрал нативный для macOS язык Swift, в котором не имел никакого опыта, и с помощью ИИ-агента Codex написал приложение с нуля, используя методологию TDD.
В итоге само приложение написано полностью на Swift, интерфейс использует SwiftUI и AppKit. В репозитории отдельно выделены логика переключения, работа со словарями и интеграция с системой; для каждого модуля есть тесты. Это удобное разделение: распознать слово и безопасно заменить его в чужом окне — две разные задачи. Для автора ценность ИИ-агентов здесь — возможность работать за пределами привычного стека. Опыт разработчика помогает сформулировать нужное поведение и заметить странный результат, а агенты помогают воплотить это в коде на другом языке. При этом критерий качества остаётся очень земным: что произойдёт, когда человек быстро печатает, меняет окно, ставит многоточие или отменяет ошибочную замену. Важная оговорка автора: ИИ участвовал только в разработке. Во время работы Twiga Switcher использует локальные словари и правила — набираемый текст не нужно отправлять нейросети или в облако.
Архитектура приложения: разделение логики, словарей и системной интеграции
Приложение построено по модульному принципу. Ядро переключения раскладки изолировано от работы со словарями и от кода, общающегося с macOS через Accessibility API. Такой подход упростил тестирование: юнит-тесты покрывают распознавание слов, формирование замены и обработку граничных случаев (пробелы, пунктуация, отмена). Интеграция с системой — получение событий клавиатуры, определение активного текстового поля, вставка исправленного фрагмента — вынесена в отдельный слой, что позволяет проверять логику без запуска полноценного GUI. Интерфейс на SwiftUI общается с ядром через чётко определённые протоколы, поэтому замену компонентов или рефакторинг можно делать локально.
Режимы работы: автоматический, ручной и пауза
Twiga Switcher живёт в строке меню macOS. Отдельного главного окна и значка в Dock нет — основные действия доступны через значок клавиатуры. В автоматическом режиме приложение исправляет слова в обе стороны: «ghbdtn» превращается в «привет», а «руддщ» — в «hello». Уверенно распознанное слово может начать исправляться ещё во время набора: например, «ghbd» становится «прив», а окончание вы допечатываете уже по-русски. Если начало неоднозначно, приложение ждёт пробела или другого разделителя. При исправлении учитываются фразы, пробелы и пунктуация.
Если автопереключение раздражает, в меню есть режим «Только горячие клавиши». Тогда исправление происходит по команде, без предложений сохранить правило. Выбранный режим запоминается после перезапуска. Отдельным пунктом можно временно поставить переключение на паузу. Для ручного исправления по умолчанию используется Control + Shift + Space — оно работает с текущим словом, в том числе сразу после пробела, и переключает язык для продолжения набора. Control + Shift + Z отменяет последнее исправление: сделать это можно в течение 10 секунд, пока вы не продолжили ввод и не переместили курсор. Оба сочетания можно переназначить в настройках.
Настройка под приложения: обычный режим, режим совместимости, исключения для терминала и RDP
В настройках можно задать поведение для каждого приложения отдельно. Например, оставить исправления в текстовом редакторе и выключить их в Terminal или программе удалённого доступа. На скриншоте из репозитория именно так настроены Terminal и Microsoft Remote Desktop; для Pages выбран режим совместимости. Обычный режим проверяет, что активно редактируемое поле. Режим совместимости помогает с приложениями, которые иначе сообщают сведения о своих элементах интерфейса. Есть вариант «Без проверки поля», но он допускает обработку даже парольных полей, поэтому начинать стоит с обычного режима. Универсальной совместимости со всеми окнами автор не обещает: результат зависит от того, что конкретное приложение сообщает macOS через Accessibility API.
Словарная база: частотные словари, IT-сленг и поддержка пользовательских .layoutdict
В основе распознавания — русский и английский частотные словари. Их дополняет отключаемый словарь компьютерных терминов: названия инструментов, профессиональные выражения и IT-сленг. В версии 0.2.0 он содержит 766 английских и 545 русских записей, включая привычные в рабочих обсуждениях «заапрувь», «юзаешь» и «дефолтную». Можно подключить собственный словарь в формате .layoutdict — например, с медицинскими терминами, юридической лексикой или названиями из вашего проекта. В него добавляются правильно написанные слова и выражения, а приложение само определяет их соответствие другой раскладке. Импорт и включение словарей применяются без перезапуска; в README есть инструкция и готовый пример.
Система правил «Всегда/Никогда»: контроль над автоматикой без навязывания
Для отдельной пары слов есть более точный инструмент — правила. В автоматическом режиме после ручного исправления можно выбрать «Всегда» или «Никогда». В первом случае Twiga Switcher будет автоматически исправлять эту пару, во втором — перестанет её менять. Сохранённые решения видны в отдельном окне: исходное слово, результат и действие. Любое правило можно удалить, а при необходимости — очистить весь список. Сама по себе автоматическая замена не создаёт постоянного правила: решение остаётся за пользователем.
Приватность и безопасность: локальная обработка, отсутствие телеметрии, GPLv3
Twiga Switcher обрабатывает текст на Mac, не ведёт историю нажатий клавиш и не отправляет информацию в сеть. Фрагмент для исправления и отмены временно хранится в памяти. На диск сохраняются настройки, импортированные словари и те пары слов, для которых пользователь явно выбрал «Всегда» или «Никогда». Исходный код открыт под GNU GPLv3. Для утилиты, которая получает доступ к вводу, автор считает важным дать возможность посмотреть, как она устроена, собрать её самостоятельно и предложить исправления.
У приложения есть ограничения: сейчас это переключатель русской и английской раскладок. Он не переводит текст, не заменяет проверку орфографии и не преобразует автоматически то, что вы вставили из буфера обмена. Ошибки распознавания возможны — поэтому предусмотрены отмена, ручной режим и правила.
Где скачать и как попробовать
Twiga Switcher доступен в официальном репозитории на GitHub: там размещены исходный код, описание функций, скриншоты и инструкция. Готовая сборка для Apple Silicon (DMG) требует Mac с M1 или новее и macOS 14+. Сборки для Intel в этом релизе нет. На странице релиза доступны описание версии и файл контрольной суммы. Откройте DMG, перенесите приложение в «Программы» и запустите. Для работы понадобятся разрешения «Универсальный доступ» и «Мониторинг ввода», а также включённые русская и английская раскладки. Сборка пока не подписана Developer ID и не нотарифицирована Apple: особенности первого запуска описаны в README. Готовые сборки публикуются только в официальном репозитории.
Вопросы и ответы
Какие системные требования у Twiga Switcher 0.2.0?
Нужен Mac с процессором Apple Silicon (M1 или новее) и macOS 14 или выше. Готовой сборки для Intel-процессоров в этом релизе нет.
Нужно ли платить за Twiga Switcher или оформлять подписку?
Нет. Приложение бесплатное, исходный код открыт под лицензией GNU GPLv3. Никаких подписок, пробных периодов или платных функций нет.
Отправляет ли Twiga Switcher набираемый текст в интернет или облако?
Нет. Вся обработка происходит локально на устройстве. Приложение не ведёт историю нажатий, не отправляет телеметрию и не обращается к внешним сервисам. Во время работы используются только локальные словари и правила.


