Всем привет, с вами Низамов Илья. Два месяца я делал для себя сервис Voisee (voisee.pro), и теперь его можно показать. Он решает две мои ежедневные задачи. Первая — голосовой ввод: жмёшь горячую клавишу, говоришь, и текст появляется там, где стоит курсор, хоть в Claude, хоть в конфигураторе 1С. Вторая — Claude Code с телефона: агент работает на моём компьютере, а я с телефона даю ему задания, читаю его вопросы и нажимаю «Разрешить». В России это работает без VPN, потому что сам Claude Code крутится на вашем компьютере, а телефон только передаёт команды.
Ниже разберу, как устроены диктовка, доводка текста нейросетью, сопряжение устройств с подписью команд и удалённое управление агентом. Отдельно расскажу, почему такой сервис один разработчик смог собрать за два месяца и что для этого нужно, кроме подписки на Claude.
Зачем ещё один сервис голосового ввода?
Вопрос «зачем очередной велосипед» я жду первым, поэтому отвечу сразу. Сервисов транскрибации много, но у меня сошлись три обстоятельства.
Во-первых, я устал набирать промпты. Хорошее задание для Claude Code — это несколько абзацев: контекст, ограничения, что проверить в конце. Надиктовать такое быстрее, чем напечатать. Первая версия диктовки работала плохо, и только внутри Claude, а мне хотелось говорить в любое окно.
Во-вторых, у меня есть GPU-сервер, и большую часть времени он простаивал. Поднять на нём распознавание речи было делом пары вечеров.
В-третьих, хотелки начали обрастать друг другом. Сначала диктовка только в Claude, потом в любое окно, потом заметки, потом протоколы встреч, потом управление агентом с телефона. В итоге получился один сервис с приложениями для Windows, macOS, Android и iOS (iOS сейчас на проверке в App Store), плагином для Obsidian и веб-кабинетом.
Как текст попадает из микрофона в курсор?
Схема на компьютере простая:
- Нажимаете горячую клавишу (по умолчанию
Ctrl+Shift+A,Escотменяет запись). Запись можно включать удержанием или нажатием — мне удобнее нажатием. - Поверх окон появляется плашка записи. Говорите сколько нужно, паузы не мешают.
- Повторное нажатие — запись уходит на сервер, распознаётся, при желании проходит доводку нейросетью.
- Текст вставляется в активное окно и одновременно кладётся в буфер обмена. Если вставка не сработала, просто жмёте
Ctrl+V.
Есть и второй хоткей: он вставляет текст и сразу отправляет его. Для чата с агентом это удобно — надиктовал и ушёл, нажимать Enter не нужно.
Одна оговорка, на которую я сам наступил. Автовставка не работает в окнах, запущенных от администратора: в терминале под админом или в программе с повышенными правами текст не вставится. Это ограничение Windows, а не сервиса — текст в таком случае лежит в буфере.
Если связи нет, запись не пропадает: приложение сохраняет её и отправляет на расшифровку, когда сеть вернётся.
Модели распознавания и доводка через LLM
Под капотом несколько моделей распознавания на отдельных инстансах, перед ними балансировщик: при росте нагрузки он поднимает дополнительные копии сервиса. В приложении это выглядит как выбор режима:
| Режим | Что делает | Скорость на минуту записи |
|---|---|---|
| Русский — быстро | Отдельная модель только для русского | ≈ 0,1 с |
| Русский — медленнее | Многоязычная модель с заранее заданным русским | ≈ 3 с |
| Другие языки | Многоязычная модель, язык выбираете из списка | ≈ 3 с |
| Авто | Язык определяется сам | ≈ 3 с |
Для примера: 106 минут русской речи быстрый режим расшифровывает за 11 секунд, 14 минут английской многоязычный — за 36 секунд. К этому добавляется время на отправку файла и очередь.
У режима «Другие языки» есть приятный побочный эффект. Выбираете английский, говорите по-русски, а на выходе получаете текст на английском. Быстрая русская модель так не умеет: английские слова она записывает латиницей, но перевода не делает.
Пунктуацию и заглавные буквы ставит сама модель распознавания. Доводка — отдельный шаг через LLM: на сервере работает Qwen3.6-35B-A3B в 4-битном формате NVFP4 на двух видеокартах (как я запускал эту модель и что она выдаёт по скорости, разбирал в статье про Qwen 3.6 в NVFP4 на vLLM и SGLang). Она исправляет ошибки распознавания, пишет термины как положено (1С, Excel, Docker), убирает «ну», «короче», «это самое» и оговорки. На «вы» она вас не переведёт: если вы говорите «ты», в тексте останется «ты». Доводка включается в настройках и тратит токены, поэтому доступна на платных тарифах.
Как управлять Claude Code с телефона?
Ради этой функции я, честно говоря, и довёл сервис до релиза. У Anthropic есть свой способ управлять Claude с телефона, но у нас он упирается в санкции: на iPhone официальное приложение не поставить, а терминальные сессии с телефона — удовольствие ниже среднего.
Я сделал иначе. Claude Code стоит и работает на вашем компьютере, под вашей учётной записью Claude. В Voisee эта учётная запись нигде не фигурирует: вы сначала настраиваете Claude Code на компьютере как обычно, а приложение лишь даёт к нему доступ с телефона. Поэтому VPN на телефоне не нужен — до серверов Anthropic ходит компьютер, а не телефон.
Включается всё вкладкой «Агенты» в настройках десктопного приложения. Добавляете проекты — это просто папки, в которых запускаются сессии Claude Code. Дальше сопрягаете устройства.
Сопряжение и подпись команд
Телефон подключается к компьютеру по QR-коду: «Добавить устройство» → сканируете код → готово. Второй компьютер (у меня MacBook) подключается через «Подключиться к другому ПК»: на обоих экранах появляется код, вы сверяете, что он одинаковый, и подтверждаете.
Здесь главный вопрос безопасности: сервер пересылает команды агенту, который исполняет код на вашем ПК. Значит, взлом сервера не должен давать доступ к вашему компьютеру. Поэтому раннер на ПК серверу не верит:
- в QR-коде лежит одноразовый секрет сопряжения на 10 минут, и до компьютера он доходит мимо сервера;
- каждое устройство держит свою пару ключей Ed25519, закрытый ключ никуда не уходит;
- каждая команда — промпт, ответ на запрос разрешения, смена режима — подписана ключом сопряжённого устройства, с меткой времени и одноразовым номером. Чужую подпись раннер отклонит, повтор старой команды тоже;
- агент запускается только в папках проектов, которые вы добавили на самом ПК. Режим без проверок разрешений удалённо не включить, а
autoи «Принимать правки» с телефона работают, только если вы разрешили это для проекта на компьютере.
Итог: взломанный сервер не может ни запустить агента, ни одобрить действие. Честно скажу, чего пока нет: шифрования содержимого. Промпты и вывод инструментов сервер видит. Это следующий шаг, ключи под него у раннера уже заведены.
Разрешения и push-уведомления
Типичная сцена: вы дали агенту задание и ушли. Через десять минут он упирается в действие, на которое нужно разрешение — запустить команду, записать файл. Раньше такой агент стоял до моего возвращения. Теперь на телефон приходит push-уведомление: открываю, читаю, о чём он спрашивает, жму «Разрешить». Если задача понятная, жму «Разрешить в сессии», и до конца сессии он больше не переспрашивает.
С телефона же можно:
- надиктовать новый промпт — текст распознаётся на телефоне, а выполняется на компьютере;
- переключить режим, например на «Принимать правки»;
- очистить контекст сессии;
- открыть любую сессию и посмотреть, что агент делает прямо сейчас.
Команды внедрены не все, а те, что нужны мне в работе. Чего-то не хватает — пишите, добавлю.
Два агента одновременно: ПК и Mac
На видео я запускаю два агента: на домашнем ПК — разработку сайта по техзаданию, на Mac — мобильное приложение по другому ТЗ. Оба задания надиктованы с телефона. Разрешения для Mac можно давать не только с телефона, но и с ПК, раз они сопряжены.
Зачем мне это? Я перешёл на Claude Max за 200 долларов, и мне жалко, когда агент полдня стоит, потому что спросил разрешение, а меня нет рядом. Mac может работать дома: утром дал ему задание и уехал на полдня, а на его вопросы отвечаю с телефона. Надиктовал «делай следующий план» — и он работает дальше, пока меня нет.
Что пока работает не идеально
Есть команда voisee claude code, которая должна переносить терминальную сессию в приложение и обратно. Она уже есть, но стабильной я её назвать не могу: например, если Claude Code запущен в терминале под администратором, команда не отработает. Пока надёжнее запускать сессии из самого приложения.
Голосовые заметки, шаблоны и Obsidian
Всё надиктованное попадает в историю и синхронизируется между устройствами. Из истории удобно делать заметки. Сценарий из жизни: иду с телефоном, надиктовываю одну мысль, через пять минут вторую, потом список покупок. В приложении выделяю три записи, объединяю их в одну и сразу удаляю исходники — получилась заметка.
Заметку можно прогнать через шаблон. Встроенные шаблоны: протокол встречи, список задач, письмо, пост. Свои шаблоны — это просто промпт. Например, мой «План урока»: «Сделай из текста план урока: цель, этапы, домашнее задание». Шаблоны заводятся в личном кабинете и сразу появляются в приложении. Результат можно записать поверх текущей заметки или в новую.
На видео я наговариваю результаты тестирования («вход работает, лимиты вижу, тема переключается») и прошу «сделай структуру». На выходе — отформатированная заметка в Markdown с разделами «Результат тестирования» и «Что работает».
Для Obsidian есть плагин. После установки в хранилище появляется папка Voisee, куда падают все заметки. Синхронизация двусторонняя: правите заметку в Obsidian — изменение прилетает в приложение на телефон и Mac, правите в приложении — меняется файл в хранилище. В Obsidian появляется кнопка микрофона, горячую клавишу на неё можно назначить в настройках.
Одна честная деталь с видео: модель не знает слово «Obsidian» и пишет его латиницей, как и другие англоязычные названия.
Протокол встречи из записи
Готовую запись можно отправить на расшифровку из приложения или прямо с сайта: до 500 МБ и до 3 часов. Файл обрабатывается в очереди. Расшифровка хранится 7 дней.
Галочкой включается диаризация — разделение по спикерам: в тексте появляются метки «Спикер 1», «Спикер 2». Вторая галочка — «Получить протокол»: LLM собирает из расшифровки протокол встречи по шаблону. Результат можно скопировать, сохранить текстом, текстом с таймингами или протокол в Markdown.
Протокол тратит токены, поэтому на бесплатном тарифе его нет. Голый текст без протокола тратит только минуты, и для многих задач его достаточно. Диаризация сервер почти не нагружает, но если спикеры не нужны, её можно не включать.
Если вам интересно, как диаризация устроена внутри, я разбирал её на примере звонков в статье про анализ звонков ИИ-агентом.
Правка выделенного текста голосом
Функция называется Command Mode. Работаете в Word, выделяете абзац, жмёте Ctrl+Alt+E и говорите: «Переведи на английский». LLM обрабатывает выделенный кусок, и на его месте появляется перевод. Команду вы формулируете своими словами, как в чате с нейросетью.
Command Mode есть только в приложении для компьютера и только на платных тарифах: это вызов LLM, а значит, расход моих видеокарт и электричества.
API для разработчиков и 1С
Сервис можно встроить в своё приложение. В личном кабинете выпускается API-ключ, а на странице для разработчиков описаны методы и даны примеры на curl, Python, Node.js, C#, Go, PHP и 1С. Схема асинхронная: отправляете файл на POST /api/v1/transcribe, получаете task_id и опрашиваете GET /api/v1/tasks/<task_id>, пока статус не станет success. Для больших файлов и нестабильной связи есть второй путь — загрузка частями с докачкой. Оба пути принимают до 500 МБ и 3 часов записи.
Вот суть примера на 1С (полная версия с сборкой multipart-тела, обработкой 429 и Retry-After — на странице для разработчиков):
// Общий модуль ВойсиAPI (флаг «Сервер»). Фрагмент примера с voisee.pro/developers.
Функция РаспознатьФайл(ПутьКФайлу, КлючAPI, Формат = "text") Экспорт
Соединение = Новый HTTPСоединение("voisee.pro", 443, , , , 300, Новый ЗащищенноеСоединениеOpenSSL);
// 1. Тело multipart/form-data с полями audio, format, mode собираем вручную
// (ПотокВПамяти + ЗаписьДанных, разделитель CRLF, без BOM) — см. полный пример.
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Bearer " + КлючAPI);
Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Граница);
Запрос = Новый HTTPЗапрос("/api/v1/transcribe", Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(ТелоЗапроса);
// Ответ 202: в теле task_id.
Задача = РазобратьJSON(ВызватьМетод(Соединение, "POST", Запрос));
// 2. Опрос задачи: паузы 1, 2 и 3 секунды, затем каждые 5 секунд.
Пока Истина Цикл
Пауза(...);
ЗапросЗадачи = Новый HTTPЗапрос("/api/v1/tasks/" + Задача["task_id"], Заголовки);
Состояние = РазобратьJSON(ВызватьМетод(Соединение, "GET", ЗапросЗадачи));
Если Состояние["status"] = "success" Тогда
Возврат Состояние["result"]["text"];
ИначеЕсли Состояние["status"] = "error" Тогда
ВызватьИсключение Строка(Состояние["error_code"]) + ": " + Строка(Состояние["error"]);
КонецЕсли;
КонецЦикла;
КонецФункции
Обратите внимание на паузу: в серверном коде 1С нет Sleep, поэтому ожидание в примере сделано циклом по часам и занимает ядро. Запускайте такой вызов из фонового или регламентного задания, а не из формы. Следующим шагом я сделаю для 1С готовую обработку: вставили свой API-ключ — и расшифровка работает из вашей базы.
Для агентов есть MCP-сервер: подключаете Voisee к Claude Code или Cursor по ключу API, и агент сам находит нужную заметку или расшифровку, читает её и сохраняет новую. Например: «найди в моих заметках, что решили про сроки, и составь план». Если вы только начинаете с MCP, вот моя статья о том, как устроен MCP-сервер для 1С.
Сколько стоит: что бесплатно, а что нет?
Тарифов три, и цифры в них подобраны под реальную мощность сервера.
| Free | Pro | Pro+ | |
|---|---|---|---|
| Цена | 0 ₽, без карты | 690 ₽/мес или 6 590 ₽/год | 1 380 ₽/мес или 13 180 ₽/год |
| Распознавание | 60 мин в неделю | 30 ч в месяц | 90 ч в месяц |
| Синхронизация устройств | нет, одно устройство | до 5 | до 10 |
| LLM-функции (доводка, шаблоны, протокол, Command Mode) | нет | есть | есть |
| LLM-токены: 5 часов / неделя / месяц | — | 60 000 / 250 000 / 1 млн | 240 000 / 1 млн / 4 млн |
| Claude Code с телефона | нет | есть | есть |
| API | нет | 1 ключ, 100 расшифровок и 1 000 вызовов MCP в сутки | 3 ключа, 400 расшифровок и 4 000 вызовов MCP в сутки |
Новый пользователь при регистрации получает неделю Pro бесплатно, так что платные функции можно попробовать раньше, чем кончится лимит Free. Недельная квота Free обновляется в понедельник в 00:00 по Москве.
Лимиты на LLM считаются в токенах, а не в минутах. Причина простая: LLM у меня крутится на двух видеокартах, и пятичасовые окна нужны, чтобы один пользователь не загрузил «Войну и мир» и не занял их на полдня. Очереди тоже есть. Больше всего токенов съедает протокол встречи — около 40 000 на час записи; если остатка не хватает, запись отклоняется сразу, и минуты не списываются. Не хватает токенов — в кабинете можно докупить пакет: 1 млн за 250 ₽ или 3 млн за 650 ₽, без срока действия и без смены тарифа.
Где стоит сервер и где хранятся данные?
Данные хранятся в России: сервер стоит у меня дома, на подоконнике, на водяном охлаждении. Распознавание крутится на одной RTX 3090, LLM — ещё на двух картах. Про то, как я собирал этот сервер и охлаждение, я писал отдельно: водоблок на RTX 3090 и сборка кастомной СЖО.
К сервису подключены мониторинг, балансировщик и очереди. Если нагрузка вырастет, буду думать о более серьёзном железе — и это будет хорошая проблема.
Как один разработчик собрал SaaS за два месяца?
Voisee — это не «одна страница с кнопкой». Там бэкенд с оплатой и лимитами, четыре клиентских приложения, плагин, сопряжение устройств с подписью команд, очереди, мониторинг, балансировщик. Два месяца на всё это силами одного человека — для меня самое наглядное доказательство того, как вырос ИИ в разработке.
Но сделать такое «на чистом Claude» нельзя. Видео, где Claude запускают в пустой папке со словами «разработай мне сервис», показывают демо, а не продукт. Чтобы агент выдавал рабочую систему, нужна обвязка — то, что называют харнесом:
- вы понимаете архитектуру и ставите агенту задачи по ней, а не просите «сделай красиво»;
- на машине стоит нормальный стек: Docker, Git, Bash, тесты;
- у проекта есть документация, планы и память агента, которые живут вместе с кодом;
- к агенту подключены нужные MCP-серверы и скиллы.
Про такой подход в 1С я писал в статье о вайбкодинге в 1С и в разборе Claude Code для 1С. Сейчас я доделал свой харнес для 1С с установщиком: «Install», далее, далее — указали папку, платформу и базу, и у вас подключены MCP, проиндексированы базы и подключены скиллы. По нему выйдет отдельное видео.
Этой обвязке я учу на курсе по ИИ для 1С, где мы собираем ИИ-агента к своей базе. Главное там — как выстроить работу с агентом так, чтобы он делал реальные проекты, а не демки.
Как попробовать Voisee?
- Зарегистрируйтесь на voisee.pro — 60 минут в неделю бесплатно, карта не нужна.
- Скачайте приложение для Windows, macOS или Android на странице загрузки, для Obsidian — плагин.
- iOS-версия проходит проверку в App Store. Хотите раньше — напишите мне в Telegram, пришлю ссылку на TestFlight.
- Для Claude Code с телефона нужен тариф Pro и настроенный Claude Code на компьютере.
Сервис я делал прежде всего для себя, поэтому любой баг и любая идея для меня ценны. Пишите в Telegram, что не работает и чего не хватает, — буду дорабатывать. Если хотите научиться собирать такие проекты с агентом сами, приходите на курс по ИИ для 1С.