Skillok Meet#
Рабочее название. Продукт Skillok.
Программа для Windows и macOS. Один путь: записать → расшифровать → получить результат.
Звук встречи записывается по кнопке или добавляется готовым файлом, по кнопке
расшифровывается, а дальше ИИ делает конспект, задачи, ревью или то, что попросите.
Всё можно скопировать и поправить.
Программа ничего не делает сама. Не следит за Zoom, не висит в трее, не запускается
вместе с Windows. Открыли — сделали — закрыли.
Нашего сервера нет. Пользователь вводит свой ключ OpenRouter — и всё. Звук и
заметки лежат у него на диске; наружу уходят только запросы к моделям по его ключу.
Как пользоваться#
На главной — «Записать» и список записей. У каждой записи три шага, на экране только
текущий:
-
Аудио.
- «Записать» — пишется звук Zoom и микрофон, пока не нажмёте «Остановить»; есть пауза
и кнопка «Скопировать предупреждение для чата». Zoom нужно запустить до нажатия,
иначе запишется только микрофон. - Готовый файл — перетащить в окно или «выберите файл»: mp3, m4a, wav, aiff, flac, ogg.
- «Записать» — пишется звук Zoom и микрофон, пока не нажмёте «Остановить»; есть пауза
-
Расшифровка — кнопка «Расшифровать». Виден ход работы, можно «Отменить».
-
Результат — вкладки:
- «Расшифровка» — текст с временем и говорящими («Вы», «Собеседники» у записи);
- «Конспект», «Задачи», «Ревью» — у пустой вкладки одна кнопка «Сделать»;
- «+ Свой запрос» — «напиши письмо клиенту по итогам», «выпиши все цифры»; ответ
становится своей вкладкой.
У готовой вкладки: «Копировать» (Markdown), «Как текст», «Править», «Сделать заново»,
«Удалить». Галочки задач отмечаются прямо в тексте.
Пока запись идёт, в шапке на любом экране видна метка «Запись 12:34».
Как это устроено#
«Записать»: Zoom.exe ──┐
микрофон ──┴─► audio/others.wav, audio/me.wav
«Добавить аудио»: файл ──────────► audio/<файл>
«Расшифровать»: дорожки ─► 16 кГц моно ─► куски 6–28 с по паузам ─► OpenRouter: Whisper
(до 4 кусков сразу) │
▼
note.md: ## Расшифровка
Команда ИИ: note.md ─► OpenRouter: Claude ─► note.md: ## Задачи / ## Конспект / …
Запись звука Zoom (Windows)#
- Звук берём только от процесса Zoom (process loopback) и отдельно с микрофона.
Системные звуки и музыка в запись не попадают.
См. Application loopback sample
и ActivateAudioInterfaceAsync.
Нужна Windows 10 сборки 20438 или новее. - Какой процесс писать, определяется в момент нажатия «Записать»:
Zoom.exeс открытым
потоком звука, то есть идущей встречей. - API Zoom, аккаунт разработчика и одобрение в Marketplace не нужны. Работает на
любой встрече и на любом плане Zoom.
Запись звука Zoom (macOS 13+)#
- Звук Zoom — ScreenCaptureKit с фильтром по приложению
us.zoom.xos: в запись попадает
только то, что выводит Zoom, сразу в 16 кГц моно
(SCStreamConfiguration.capturesAudio).
Крейт —screencapturekit. - Микрофон — CoreAudio через
cpal. - При первой записи macOS спросит два разрешения: «Микрофон» и «Запись экрана и системного
звука». После второго программу нужно перезапустить — так устроена macOS. Без него
запишется только микрофон. - Для сборки нужны Command Line Tools (Swift): ScreenCaptureKit подключается Swift-мостом.
Расшифровка — Whisper через OpenRouter#
POST https://openrouter.ai/api/v1/audio/transcriptions, тот же ключ, что для текстовых
моделей. По умолчаниюopenai/whisper-large-v3-turbo.
См. документацию OpenRouter STT.- Файл любой длины режется на куски по паузам: у эндпоинта предел 25 МБ и около минуты
обработки на запрос. Куски без речи не отправляются — это дешевле, и Whisper не
выдумывает фраз на тишине. Такие фразы («Продолжение следует…») дополнительно отсеиваются. - Неудачный кусок повторяется один раз; не распознавшийся остаётся в расшифровке пометкой.
Результаты — Claude через OpenRouter#
- По умолчанию
anthropic/claude-opus-5.5; модель меняется в настройках. - Промпты — файлами в
prompts/: общийbase.mdи по одному на команду. - Все результаты хранятся одной заметкой
note.md, раздел на вкладку. Повтор команды
заменяет её раздел; прежний ответ модель при этом не видит.
Интерфейс — как у skillok.org#
- Бумажный фон, чернильный текст, терракотовый акцент.
- Шрифт iA Writer Quattro S; JetBrains Mono — для правки Markdown и времени.
- Квадратные углы; на экране одна главная кнопка, контурная, остальное — ссылками.
- Токены стиля —
src/styles/tokens.css, копия дизайн-системы Skillok. Новых цветов не
заводим.
Одна колонка. Главная — «Записать» и записи со статусом («Нужно расшифровать»,
«Конспект · Задачи»). Экран записи — шаги «Аудио → Расшифровка → Результат» и вкладки
результатов.
Согласие на запись#
Zoom не показывает участникам, что идёт такая запись. Предупреждать их обязан
пользователь: во время записи текст предупреждения копируется одной кнопкой в чат Zoom.
- РФ, 152-ФЗ. Голос — персональные данные, тайная запись запрещена. Если голос
используется для узнавания человека, это биометрия, и нужно письменное согласие
(Консультант).
Поэтому отпечатки голоса мы не строим: говорящий — только дорожка звука. - ЕС (GDPR) требует уведомления. В ряде штатов США нужно согласие всех сторон.
Почему не через API Zoom#
Проверено и отложено:
- RTMS (живой поток от Zoom): нужен сервер, который принимает поток, и кредиты
Zoom Developer Pack (RTMS). - Облачная запись: план Pro или выше, только встречи, где пользователь хост
(KB0065911).
Её файл можно скачать из Zoom и добавить через «Добавить аудио». - Бот на Meeting SDK: с 2 марта 2026 на встречах чужих аккаунтов нужен токен OBF,
плюс ревью в Marketplace (OBF FAQ).
Android — позже#
Звук Zoom на Android локально не захватить. Системный захват не берёт голосовую связь
(AudioPlaybackCaptureConfiguration),
а микрофон во время звонка отдаёт другим приложениям тишину
(Sharing audio input).
Для Android подходят очные встречи через микрофон и добавление файла.
Разработка#
Нужны Rust (stable) и Node.js. На Windows ещё WebView2 — он уже есть в Windows 10/11.
npm install
npm run tauri dev # приложение целиком: ядро + интерфейс
npm run dev # только интерфейс в браузере, http://localhost:1420, с заглушкой ядра
npm run typecheck # проверка типов интерфейса
cargo test --workspace # тесты ядра и звука
Запись работает в Windows и macOS; добавление аудио, расшифровка и команды ИИ — везде
(нужен ключ OpenRouter: распознавание и ИИ платные).
Собрать приложение для Mac — разрешения macOS выдаются самому приложению, а не терминалу:
npx tauri build --bundles app
open "src-tauri/target/release/bundle/macos/Skillok Meet.app"
Проба декодера и нарезки на любом файле:
cargo run -p meet-audio --example decode -- путь/к/файлу.m4a
Код под Windows проверяется с Mac так (нужен rustup target add x86_64-pc-windows-msvc):
cargo clippy -p meet-audio --target x86_64-pc-windows-msvc --all-targets
Всё приложение под Windows с Mac не собрать: встраиванию ресурсов Windows нужен
llvm-rc. Установщик собирать на Windows: npm run tauri build.
Раскладка:
crates/audio/ звук, без Tauri
pcm.rs формат 16 кГц моно 16 бит, WAV, уровень, приведение частоты
decode.rs чтение mp3, m4a, wav, aiff, flac, ogg (symphonia)
chunker.rs нарезка на куски по паузам, отсев тишины
source.rs источник звука; Replay — звук из памяти для тестов
win.rs Windows: захват процесса Zoom и микрофона, поиск Zoom
mac.rs macOS: звук Zoom (ScreenCaptureKit) и микрофон (cpal)
src-tauri/src/ ядро на Rust
meetings.rs встречи на диске: meeting.json, note.md, audio/
notes.rs разделы заметки: поставить на место, убрать
transcript.rs реплики и блок «Расшифровка» для заметки
transcribe.rs расшифровка: дорожки → куски → Whisper → реплики
ai.rs команды ИИ над заметкой
openrouter.rs клиент OpenRouter: ключ, распознавание, ответ модели
recorder.rs запись по кнопке: дорожки в WAV
settings.rs настройки; ключ — в хранилище паролей ОС (keyring)
commands.rs команды для интерфейса
src/ интерфейс: HTML/CSS/TS
views/ home — главная, meeting — шаги и вкладки, settings
recording.ts панель записи и метка «идёт запись» в шапке
markdown.ts отображение Markdown, разделы, галочки задач
dev-mock.ts заглушка ядра — только для просмотра в браузере
prompts/ промпты команд ИИ
fixtures/transcripts проверочные расшифровки
Данные: настройки — в папке конфигурации (%APPDATA%\org.skillok.meet), встречи — в
папке данных, подпапка meetings. Путь виден на экране «Настройки».
План работ#
Сделано#
- Каркас Tauri 2, стиль skillok.org, ключ OpenRouter в хранилище паролей ОС.
- «Записать» по кнопке: звук Zoom и микрофон двумя дорожками, пауза, стоп.
- Аудиофайл кнопкой и перетаскиванием.
- «Расшифровать» с ходом работы и отменой.
- Результаты вкладками: «Конспект», «Задачи», «Ревью», свой запрос; копировать,
править, сделать заново, удалить; живые галочки задач. - Состояния без ключа, во время работы и во время записи (задача #9).
Дальше#
- Проверить на Windows с настоящей встречей в Zoom — запись ни разу не запускалась.
- Проверить запись на Mac с настоящей встречей в Zoom.
- Прогнать команды ИИ на проверочных расшифровках настоящей моделью, поправить промпты.
- Прослушивание звука в заметке и переход по времени реплики к месту в записи.
- Добавить аудио к уже существующей встрече.
- Сохранить заметку в репозиторий Skillok (токен доступа, API файлов).
- Поиск по встречам.