Claude Code с телефона без VPN: мой сервис Voisee

Всем привет, с вами Низамов Илья. Два месяца я делал для себя сервис Voisee (voisee.pro), и теперь его можно показать. Он решает две мои ежедневные задачи. Первая — голосовой ввод: жмёшь горячую клавишу, говоришь, и текст появляется там, где стоит курсор, хоть в Claude, хоть в конфигураторе 1С. Вторая — Claude Code с телефона: агент работает на моём компьютере, а я с телефона даю ему задания, читаю его вопросы и нажимаю «Разрешить». В России это работает без VPN, потому что сам Claude Code крутится на вашем компьютере, а телефон только передаёт команды.

Ниже разберу, как устроены диктовка, доводка текста нейросетью, сопряжение устройств с подписью команд и удалённое управление агентом. Отдельно расскажу, почему такой сервис один разработчик смог собрать за два месяца и что для этого нужно, кроме подписки на Claude.

Зачем ещё один сервис голосового ввода?

Вопрос «зачем очередной велосипед» я жду первым, поэтому отвечу сразу. Сервисов транскрибации много, но у меня сошлись три обстоятельства.

Во-первых, я устал набирать промпты. Хорошее задание для Claude Code — это несколько абзацев: контекст, ограничения, что проверить в конце. Надиктовать такое быстрее, чем напечатать. Первая версия диктовки работала плохо, и только внутри Claude, а мне хотелось говорить в любое окно.

Во-вторых, у меня есть GPU-сервер, и большую часть времени он простаивал. Поднять на нём распознавание речи было делом пары вечеров.

В-третьих, хотелки начали обрастать друг другом. Сначала диктовка только в Claude, потом в любое окно, потом заметки, потом протоколы встреч, потом управление агентом с телефона. В итоге получился один сервис с приложениями для Windows, macOS, Android и iOS (iOS сейчас на проверке в App Store), плагином для Obsidian и веб-кабинетом.

Как текст попадает из микрофона в курсор?

Схема на компьютере простая:

  1. Нажимаете горячую клавишу (по умолчанию Ctrl+Shift+A, Esc отменяет запись). Запись можно включать удержанием или нажатием — мне удобнее нажатием.
  2. Поверх окон появляется плашка записи. Говорите сколько нужно, паузы не мешают.
  3. Повторное нажатие — запись уходит на сервер, распознаётся, при желании проходит доводку нейросетью.
  4. Текст вставляется в активное окно и одновременно кладётся в буфер обмена. Если вставка не сработала, просто жмёте 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С.

Сколько стоит: что бесплатно, а что нет?

Тарифов три, и цифры в них подобраны под реальную мощность сервера.

FreeProPro+
Цена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?

  1. Зарегистрируйтесь на voisee.pro — 60 минут в неделю бесплатно, карта не нужна.
  2. Скачайте приложение для Windows, macOS или Android на странице загрузки, для Obsidian — плагин.
  3. iOS-версия проходит проверку в App Store. Хотите раньше — напишите мне в Telegram, пришлю ссылку на TestFlight.
  4. Для Claude Code с телефона нужен тариф Pro и настроенный Claude Code на компьютере.

Сервис я делал прежде всего для себя, поэтому любой баг и любая идея для меня ценны. Пишите в Telegram, что не работает и чего не хватает, — буду дорабатывать. Если хотите научиться собирать такие проекты с агентом сами, приходите на курс по ИИ для 1С.

Курс по теме статьи

Курс ИИ для 1С — разработка ИИ-агентов, RAG и MCP-серверов

Для программистов и аналитиков 1С: на курсе пишете код и собираете 4 проекта — ИИ-агента, RAG по базе знаний и MCP-сервер к своей 1С. Рассрочка, бесплатный вебинар.

150 000 ₽

Перейти к курсу «Курс ИИ для 1С — разработка ИИ-агентов, RAG и MCP-серверов»

Частые вопросы