Содержание Показать
Мозг — не PostgreSQL
Почему современный человек физически не тянет собственную цифровую жизнь — и что я по этому поводу сделал.
Есть один момент, который я научился узнавать безошибочно.
Человек нажимает «Leave meeting». Экран схлопывается, и на его месте оказывается рабочий стол — тот самый, с двумя открытыми окнами терминала и папкой «Новая папка (3)». И вот эти полторы секунды, пока человек смотрит на свои обои, у него на лице написано ровно одно: «так, а что это сейчас было».
Он открывает трекер. Курсор мигает в пустом поле «Название задачи». Человек честно пытается вспомнить, что он только что пообещал сделать. Сорок минут разговора. Восемь участников. Три раза меняли требования.
И память выдаёт ему единственное, что сохранила надёжно: у кого-то на фоне лаяла собака.
Ещё, кажется, был Андрей. Или Антон. И вроде бы договорились.
«Ну окей, давайте тогда синхронизируемся на следующей неделе».
Через неделю они синхронизируются. Первые пятнадцать минут уйдут на восстановление контекста. Это будет называться «давайте быстро пройдёмся по статусу», и быстро не получится, потому что статуса ни у кого нет — есть только смутное ощущение, что что-то обсуждали и вроде даже решили.
Я потратил на эту проблему больше года жизни. Ниже — честный рассказ о том, зачем.
Мозг — не PostgreSQL
Первое, что нужно проговорить: дело не в том, что люди поглупели.
Наоборот. Человек, который держит в голове архитектуру трёх сервисов, помнит, у кого из команды отпуск, знает, что заказчику нельзя показывать графики без подписей осей, и при этом не забыл купить корм коту, — это, вообще-то, впечатляющая машина.
Просто эту машину подключили к каналу, на который она не рассчитана.
Посчитайте свой обычный вторник. Пять созвонов, если повезёт — три. Рабочий мессенджер, где вы состоите в двадцати трёх чатах и активно читаете четыре. Почта. Второй мессенджер, потому что подрядчик принципиально не переходит в первый. Таск-трекер. Документы, которые кто-то прислал «на посмотреть». Голосовое на четыре минуты — потому что человеку было удобнее наговорить, а вам теперь удобно слушать это четыре минуты. Браузер, в котором сорок вкладок, и вы точно знаете, что шесть из них нужны, но не знаете какие.
И поверх всего этого — тихое общественное ожидание, что вы всё запомните, ничего не забудете, правильно поймёте собеседника, быстро ответите, сформулируете мысль, сделаете выводы, превратите разговор в задачи — а через три недели ещё и вспомните, кто именно на той встрече сказал, что «с юридической стороны вопросов нет».
Это не задача для человеческой памяти. Это задача для системы хранения с индексами.
Мозг такое не умеет. В него нельзя написать:
SELECT * FROM today
WHERE important = true
ORDER BY who_will_be_angry DESC;
Мозг вместо этого выдаёт вам собаку на фоне и странное чувство вины.
И вот что забавно. Проблему хранения человечество решило лет тридцать назад: у нас есть диски, облака, гит, вики, бесконечные хранилища заметок. Записать можно всё что угодно. Стенограмма часовой встречи — это примерно двенадцать тысяч слов, и они прекрасно лягут в любой файл.
Никто. Никогда. Не будет. Это. Перечитывать.
Проблема не в хранении. Проблема в том, что запись — это ещё не контекст. Контекст — это когда через три недели на вопрос «а кто вообще придумал убрать эту кнопку» приходит ответ с указанием встречи, минуты и человека. А не двенадцать тысяч слов, в которых он где-то есть.
Мы отдали машинам память. Но связность — то, что превращает набор записей в понимание, — почему-то оставили себе. Хотя ломается первой именно она.
Небольшое отступление про найм, который сломался
Я обещал честный рассказ, поэтому вот наблюдение, из которого выросла половина продукта. Говорить буду про свою поляну — машинное обучение. Судя по чужим рассказам, в остальном IT происходит ровно то же самое, только слова другие.
Собеседование выглядит примерно так. Человека с восемью годами в ML — который выкатывал модели в прод, разгребал ночную деградацию метрик и умеет объяснить продукту, почему нельзя «просто дообучить», — спрашивают, чем бэггинг отличается от бустинга.
Он отвечает. Его спрашивают про bias-variance tradeoff. Отвечает. Чем L1-регуляризация отличается от L2. Отвечает. Потом просят вывести на бумаге градиент логистической регрессии — и он выводит, хотя последний раз делал это руками на курсе матстата, а с тех пор ту же работу выполняет одна строка loss.backward(), и выполняет лучше.
А потом приходит письмо:
«Спасибо за уделённое время. К сожалению, мы ищем кандидата уровня Middle+/Senior».
И остаётся один законный вопрос: а где, собственно, была проверка на Middle+/Senior?
Если сеньорность в ML определяется вопросом про бэггинг и бустинг, то проблема, кажется, не в кандидатах.
Дальше — шесть сюжетов, которые в ML-найме узнает почти каждый. Ни один из них не уникален. В этом и весь ужас.
Развернуть бинарное дерево
На позицию, где предстоит чинить пайплайны, писать SQL на триста строк и объяснять продукту, почему конверсия просела не из-за модели, дают развернуть бинарное дерево. За двадцать пять минут. В прямом эфире, с включённой камерой.
Я ничего не имею против алгоритмов. Я против того, что за годы работы структура данных, которую я разворачивал чаще всего, называлась «датафрейм», а операция, которая ломалась чаще всего, называлась «джойн».
Self-attention на голом numpy
Просят реализовать self-attention без фреймворков. Кандидат пишет — и это даже честная проверка, если человеку предстоит обучать модели с нуля.
Только потом он выходит на работу и следующие полгода не притрагивается к attention вообще. Потому что настоящая работа выглядит так: разметка разъехалась с тем, что приходит в прод; одна и та же фича считается в двух местах по-разному; и никто не может сказать, какая версия датасета лежала под моделью, которую выкатили в марте.
Вот об этом на интервью не спрашивают никогда. А работа — вот она.
Ответ, которого нет в бумажке
Вопрос: «какая метрика лучше — precision или recall?»
Профессиональный ответ ровно один: «зависит от цены ошибки, покажите мне задачу». Но у интервьюера в бумажке написано «recall, потому что медицина», и ваш ответ уходит в минус с формулировкой «не смог определиться».
В работе именно за это «зависит» вам и платят зарплату. На интервью — минус балл.
Пять лет коммерческого опыта с LLM
Строка из реальной вакансии. И не из одной.
ChatGPT показали публике в конце 2022 года. Дальше считайте сами.
Это не издёвка над эйчаром, который копировал шаблон. Это симптом: компания не знает, кого ищет. Она знает, что «нужен кто-то по нейросетям», и добирает уверенности числами.
Тестовое и тишина
Тестовое задание на выходные. Ноутбук, baseline, метрика, честные выводы, аккуратный README.
Дальше не отказ. Тишина. Через три недели вакансия просто исчезает с сайта.
И разрушительнее всего здесь даже не потраченный выходной, а то, что человек не получает о себе ни одного бита информации. Он не знает, что сделал не так, — и в следующий раз сделает ровно то же самое.
Сорок минут на рекомендательную систему
ML System Design. «Спроектируйте рекомендации для маркетплейса».
Честный ответ звучит так: «сначала посмотрю на данные и пойму, есть ли вообще история взаимодействий, а потом спрошу продукт, что мы оптимизируем — выручку, удержание или разнообразие выдачи, потому что от этого зависит вообще всё».
Такой ответ читается как уход от вопроса. Хотя это ровно то, за что в реальной работе платят: не построить рекомендации, а понять, какие именно и зачем.
Что у них общего
Корень один. Собеседование как формат построено на допущении, что ценность человека — это то, что он может выгрузить из памяти под давлением за сорок пять минут.
Допущение было спорным всегда. В ML оно абсурдно вдвойне, потому что область переизобретает себя примерно раз в полтора года. То, что вы вызубрили в 2021-м, сегодня музейный экспонат: тогда спрашивали про признаковое пространство и градиентный бустинг, сейчас — про RAG, эвалюацию и галлюцинации, а через год спросят про то, чего пока не существует.
Потому что реальная работа выглядит иначе. Вы гуглите. Читаете исходники, потому что документация врёт. Спрашиваете коллегу. Спрашиваете модель. Возвращаетесь к собственным ноутбукам двухлетней давности. Ценность специалиста давно не в том, сколько фактов он удерживает в голове, а в том, насколько быстро и точно он собирает нужный контекст и принимает на нём решение.
И вот здесь начинается самое интересное.
AI уже сидит рядом с нами. Просто мы делаем вид, что его нет
Посмотрите на честную картину одного собеседования.
Вакансию писала модель. Список вопросов интервьюер набросал моделью. Кандидат готовился с моделью — прогонял behavioral-ответы, разбирал ML System Design. Тестовое делал в редакторе, чьё автодополнение пишет boilerplate быстрее, чем человек вспоминает порядок аргументов у train_test_split. Baseline в этом тестовом — CatBoost с дефолтными параметрами, поставленный за три минуты, и это, между прочим, единственное разумное инженерное решение. Фидбэк после интервью тоже, скорее всего, причешет модель.
И только внутри этих сорока пяти минут звонка все дружно договариваются притвориться, что на дворе 2019 год и AI не изобрели.
Это не лицемерие даже. Это культурный лаг: мы ещё не придумали, как считать нормой то, что уже стало нормой.
Мне здесь важно не свалиться в морализаторство, поэтому скажу прямо, чтобы не осталось двусмысленности: продукт, задача которого — врать работодателю, это плохая сделка для обеих сторон. Человек, прошедший собеседование чужим умом, выйдет на работу, где придётся работать своим. Это не хак, это отложенный провал.
Меня занимает другое — парадокс, который никуда не денется.
AI уже присутствует почти в каждом интеллектуальном процессе. Он просто сидит в соседнем окне и ничего не слышит.
Вот в чём абсурд. У вас есть модель, которая накидает baseline рекомендательной системы аккуратнее, чем половина тех, кто про эту рекомендательную систему спрашивает. И она не знает, что вас про неё спрашивают прямо сейчас. Чтобы узнала, вы должны свернуть звонок, открыть вкладку, пересказать ей своими словами то, что только что услышали, дождаться ответа, вернуться и сделать вид, что три секунды молчали от глубины мысли.
А в понедельник, если вас возьмут, эта же самая модель станет вашим основным рабочим инструментом. Просто на интервью её полагалось не заметить.
Мы построили гениальных советчиков и посадили их в звукоизолированную комнату.
Именно отсюда родилась первая идея Whisperer: AI не должен быть генератором текста в отдельном окне. Он должен находиться рядом с человеком там, где происходит работа. Не «сервис, к которому вы приходите». Слой, в котором вы работаете.
Встреча — это не разговор. Это сорок минут необработанных данных
Современная рабочая встреча только на слух похожа на разговор. По содержанию это плотный поток разнородных объектов, летящих мимо со скоростью обычной речи.
Решения — «значит, экспорт делаем в первую очередь». Задачи — «я подниму стенд к четвергу». Обещания — «пришлю смету завтра». Идеи, которые никто не записал. Имена, которые вы услышали один раз. Цифры, которые больше нигде не повторятся. Ссылки, брошенные в чат звонка, который закроется вместе со звонком. Изменения требований, прозвучавшие как «ну и ещё желательно бы». И контекст проекта, который есть в головах у пятерых и ни в одном документе.
Всё это исчезает в момент, когда кто-то нажимает «завершить».
Разница между двумя финалами встречи огромна, хотя формулировки почти одинаковые. «Мы поговорили» — и «после разговора остался структурированный рабочий результат». В первом случае вы через две недели спорите, договаривались вы об этом или нет. Во втором — открываете и смотрите.
Стандартный ответ индустрии — «поставьте бота, который запишет встречу». Я много таких смотрел. У них есть общая черта: они делают саммари и на этом заканчиваются. Саммари приезжает в почту, вы читаете его один раз, и дальше оно едет в тот инструмент, где вы на самом деле работаете. Вручную. Copy-paste. Второй раз это саммари не открывает никто.
Получается инструмент, который отлично решает половину задачи и молча оставляет вам вторую — ту, которая, собственно, работа.
Whisperer устроен из противоположного допущения. Разговор — это вход, а не результат. Результат — задача на доске с исполнителем и сроком, событие в календаре, факт в базе знаний, который найдётся через полгода, и обещание, о котором вам напомнят до того, как о нём вспомнит заказчик.
Язык перестал быть уважительной причиной
Ещё одна проблема, которая раньше жила в категории «дорогое корпоративное», а теперь стала бытовой.
Люди работают с иностранными клиентами. С распределёнными командами. С подрядчиками из трёх часовых поясов. С инвесторами, работодателями, партнёрами. Разговор на неродном языке — это уже не про «международный бизнес», а про обычный вторник фрилансера, у которого клиент в Роттердаме.
И вот что происходит на таком звонке. Человек, прекрасно владеющий предметом, тратит половину внимания не на предмет, а на язык. Он не думает про архитектуру — он думает, как сказать «отказоустойчивость». Он не спорит с оценкой сроков — он ждёт паузы, чтобы вставить заготовленную фразу. Уровень его экспертизы в разговоре падает ровно до уровня его английского, и собеседник видит именно эту, урезанную версию.
Синхронный перевод раньше был роскошью: кабинка, наушники, живой переводчик, бюджет. Сейчас это должен быть просто рабочий инструмент, включённый тумблером.
Важное слово здесь — синхронный. Не «перевести стенограмму после встречи» (это тоже полезно, но это другая функция и другая ценность). А так: собеседник ещё говорит — вы уже читаете это на своём языке, прямо в панели поверх звонка.
В Whisperer перевод сделан именно так: две независимые сессии на два направления, чтобы реплики не рвали друг друга, с защитой от акустической петли — иначе система начинает переводить сама себя, и получается забавно ровно один раз.
Мне не нужен был ещё один AI-чат
Теперь давайте я расскажу, что меня самого бесит.
Откройте любую подборку «топ-50 AI-инструментов». Там ChatGPT, Claude, Gemini, Copilot, Notion AI, Perplexity и сорок четыре штуки, о которых вы слышите первый раз. Все они хорошие. Многими я пользуюсь ежедневно.
И вот на этот стол приходит очередной стартап и говорит: «Здравствуйте! Мы сделали ещё одно приложение. Оно тоже с AI!»
Прекрасно. Ещё одно окно. Ещё одна вкладка. Ещё один логин, ещё одна подписка, ещё одно место, куда надо не забыть заглянуть.
Проблема современного человека не в том, что у него мало AI. У него дофига AI. Проблема в том, что каждый из этих AI — гениальный слепоглухонемой.
Он не знает, что было на вашей встрече во вторник. Не знает, что вы обещали Андрею. Не знает, как называется ваш проект, и уж точно не знает, что в вашей компании словом «релиз» называют не то же самое, что во всех остальных.
Поэтому каждый разговор с ним начинается одинаково: вы пересказываете ему свою жизнь. Это называется красивым словом «промпт», но по сути это брифинг нового сотрудника. Каждый раз. С нуля. Вы — самый высокооплачиваемый в мире оператор копипаста.
Whisperer я делал ровно из этого раздражения. Не чтобы добавить окно. Чтобы убрать переключения.
Это, кстати, довольно жёсткий продуктовый критерий, и он много чего запрещает. Каждый раз, когда мы придумываем новую функцию, вопрос звучит не «а прикольно?», а «сколько переключений между окнами она убирает». Если ноль — функция не нужна, какой бы красивой она ни была.
Что такое Whisperer
Самое честное определение, которое у меня есть:
Whisperer — это AI, который находится рядом с вами во время работы: слышит то же, что слышите вы, видит тот же экран, помнит то, что вы забыли, и умеет действовать в ваших же инструментах.
Технически это две части.
Настольное приложение — панель поверх всего остального. Она слышит ваш микрофон и системный звук (то есть и вас, и собеседника), ведёт стенограмму, подсказывает, переводит, разбирает скриншоты. Она не участвует в звонке: в Whisperer нет бота, которого надо приглашать на встречу. Нечего приглашать, нечего интегрировать, нечему ломаться при очередном обновлении API какого-нибудь Zoom. Приложение просто слушает звук вашего компьютера и лежит поверх окна — любого. Zoom, Google Meet, Teams, Telegram, Discord, браузерная вебинарная платформа с интерфейсом из 2011 года — ему всё равно.
И да, панель не видна при демонстрации экрана. Не потому что мы делаем шпионский софт, а потому что показывать коллегам свои личные подсказки — примерно как показывать черновик письма вместе с письмом.
Веб-кабинет — всё остальное: архив встреч, база знаний, задачи, календарь, файлы, настройки, модели, аналитика. Интерфейс существует на шестнадцати языках.
Whisperer я проектирую как швейцарский нож, и это не метафора для красоты, а инженерное ограничение. Каждая новая возможность — не отдельный инструмент, а ещё одно лезвие того же ножа. Все функции обязаны пользоваться общим контекстом пользователя и усиливать друг друга. Как только раздел начинает жить своей жизнью и требовать отдельного «переключиться и подумать» — он спроектирован неправильно.
Отсюда вытекает и категория, в которой продукт живёт. Whisperer — не «AI-ассистент встреч». Ассистент встреч записывает звонок и делает саммари, а дальше саммари уезжает в тот инструмент, где вы работаете. Whisperer оставляет результат у себя: решение с созвона становится задачей на доске, обязательством, о котором напомнят, и фактом, который найдётся через полгода. Без шага «экспортировать» — потому что это части одного продукта, а не два разных.
Leo: почему сто тридцать инструментов — это другой продукт, а не тот же чат
Leo — встроенный AI-агент Whisperer. Я знаю, как это звучит: у всех сейчас «встроенный AI-агент». Поэтому объясню разницу через одну цифру.
В реестре инструментов Leo — около ста тридцати штук.
Это звучит как бухгалтерия, но именно здесь проходит граница между чат-ботом и агентом. Чат-бот умеет одно: генерировать текст. Всё, что он может сделать с вашей задачей, — красиво рассказать, как её решить, после чего вы пойдёте и решите её руками.
Агент со ста тридцатью инструментами живёт в другой категории. Он может найти, что говорили и решали на прошлых встречах. Проследить, как менялась позиция по теме, — через несколько разговоров. Создать и передвинуть задачу. Завести событие в календаре. Прочитать и разобрать ваш файл. Поискать в базе знаний и в вебе. Написать письмо через подключённую почту. Ответить в тикете поддержки. Поменять себе модель. Запомнить что-то о вас.
Разговаривать с ним можно голосом — и это не украшение. Голос выигрывает ровно там, где руки заняты или где формулировать проще, чем печатать: во время встречи, на ходу, когда мысль надо выгрузить раньше, чем она сбежит.
Но интереснее не список умений, а три правила, по которым Leo живёт.
На вопрос «почему ты решил, что я это обещал?» Leo отвечает не прозой, а ссылкой: вот встреча, вот момент, вот кто это сказал. Каждое обязательство и каждое решение хранится вместе с источником. Утверждение без источника неотличимо от уверенной галлюцинации — а в разговоре про деньги и сроки это не философский вопрос.
Необратимое требует подтверждения, в котором сервер показывает, что именно исчезнет. Не «вы уверены?», а список того, что пропадёт.
Только ваши данные. Каждый инструмент ограничен тем, кто задал вопрос, — не настройкой, а устройством.
И отдельно — то, чем я, пожалуй, доволен больше всего. Отложенные поручения. «Напомни через час», «отправь это в понедельник» — записываются как полноценная запись о том, что вы поручили, и исполняются в срок независимо от того, что происходило с системой в промежутке: перезапускался ли сервис, выкатывали ли мы новую версию, падало ли что-нибудь. Скучная инженерная деталь, из-за которой у половины ассистентов «напомни через час» работает как обещание пьяного друга.
Leo умеет и заговаривать первым: подключение к почте отвалилось, срок обязательства настал, через десять минут встреча с человеком, которому вы что-то обещали. Но это выкачено с выключенными по умолчанию тумблерами — сознательно.
У агента появился повод заговорить — это ещё не значит, что его ждут.
Ассистент, который лезет с советами, превращается в скрепку из Word быстрее, чем вы успеете его полюбить.
Память, контекст и база знаний: три разные вещи, которые все путают
Наверное, самая недооценённая часть продукта. Речь про три разных механизма, которые в маркетинге обычно сваливают в одно слово «память».
То, что вы рассказали о себе сами, один раз, руками. Кто вы, чем занимаетесь, как называется ваш продукт, какие у вас роли, какие файлы описывают ваш рабочий фон. Фундамент, который подмешивается в ответы, чтобы не объяснять базовые вещи каждый раз заново.
Ваш собственный материал, сделанный находимым: заметки, документы, результаты встреч, которые вы решили сохранить. Заметки поддерживают вики-ссылки, и из них собирается граф — карта того, как связан ваш материал.
Не то, что вы положили, а то, что он о вас удержал: устойчивые факты, предпочтения, то, как у вас принято делать повторяющиеся вещи.
База знаний работает как RAG: содержимое режется на куски, векторизуется, и при каждом запросе релевантные куски подмешиваются в ответ. Причём и в живые подсказки во время звонка, и в вопросы к Leo после — знание одно, извлечение одно.
Тут есть намеренная граница: файл не становится знанием автоматически. Файлы лежат в хранилище; в базу знаний они попадают отдельным действием. Два шага вместо одного — сознательно: хранилище это где лежит, база знаний это то, на что модели разрешено опираться. Смешать их значит однажды получить ответ, построенный на черновике, который вы забыли удалить.
У памяти же есть виды и есть затухание: не всё стоит помнить вечно, и ассистент, который помнит всё одинаково, хуже того, который помнит важное. Список того, что Leo о вас помнит, можно открыть и почистить. Забывание физическое, а не флажок «скрыто».
Отдельная деталь для тех, кто живёт в Obsidian: у Whisperer есть плагин, опубликованный в каталоге сообщества. Хранилище — это папка на вашей машине, у неё нет адреса и «подключиться» к ней неоткуда, поэтому направление обратное: заметки присылает плагин, а платформа их принимает.
Встречи: стенограмма, смысл и поиск по собственному прошлому
Во время звонка Whisperer ведёт живую стенограмму с разметкой говорящих и тайм-кодами. Ваш голос идёт с микрофона, голос собеседника — с системного звука, поэтому видно, кто что сказал, а не сплошная лента текста.
Готовую запись можно загрузить — если встреча уже прошла, а расшифровать её надо. Запись, сделанная во встрече внутри Whisperer, становится встречей сама.
После звонка стенограмма превращается в структурированные заметки и список действий, в интеллект-карту решений и в аналитику. Выгрузить можно в Markdown, SRT, VTT и JSON — то есть и «прочитать глазами», и «подложить субтитрами к видео», и «скормить своему скрипту».
Но главное — поиск. Потому что архив, в котором нельзя найти, — это не архив, а кладбище.
Поиск по встречам работает в три ступени, и это тот случай, когда инженерная деталь напрямую превращается в пользовательскую ценность.
Векторный поиск находит ответ, в котором нет ни одного слова из вашего вопроса. Вы спрашиваете «что решили по деньгам», а звучало «ну давайте тогда пятьсот, но с постоплатой». Ни одного совпадения по словам — и ровно тот кусок, который нужен.
Поиск по конкретным словам находит то, что смысловая ступень проваливает: номер договора, фамилию, версию библиотеки. Векторы плохо работают с точными идентификаторами — «ООО Ромашка» и «ООО Одуванчик» для эмбеддинга подозрительно похожи.
Переранжирование — потому что первые две ступени ранжируют кандидатов по похожести, а не по тому, отвечают ли они на вопрос. Это разные вещи, и разница видна ровно тогда, когда результат важен.
Ступени не заменяют друг друга, а складываются. И каждая отказывает мягко и по отдельности: сломался эмбеддер — поиск идёт словами; сломался переранжировщик — выдача в порядке слияния. Ни один сбой не даёт пустую выдачу при наличии данных, потому что пустая выдача читается человеком как «архив потерялся», а это худшее, что может сообщить продукт, которому вы доверили свою рабочую память.
Поверх этого есть прослеживание темы. Вопрос вида «как менялось решение по цене» — это не поиск одного фрагмента, а сбор позиций и решений по теме через несколько встреч, с источниками. Ответ приходит доказательствами, а не пересказом.
И глобальный поиск по всему сразу — встречи, задачи, календарь, документы, промпты, контекст, файлы, тикеты, модели — по ⌘K, как положено.
Хаб: у работы должен быть адрес
Это относительно новая часть, и она про проблему, которую я сначала не заметил.
Допустим, Whisperer разобрал встречу и предлагает: «ты обещал прислать смету до пятницы — сделать задачу?». Отлично. В какой проект?
Пока проект один — вопроса нет. Когда у вас три клиента, найм дизайнера и релиз, задача без адреса уезжает в первый попавшийся проект и обнаруживается там через неделю. Это хуже, чем если бы её не создали вовсе.
Хаб — место, где живёт один пласт работы: клиент, проект, найм, релиз. «Acme — внедрение», «Нанимаем дизайнера», «Релиз 2.0». Встреча попадает в свой хаб автоматически, и вот тут самое интересное — по чему именно.
Напрашивается очевидное решение: по участникам. Оно неправильное и ломается в трёх бытовых случаях: те же люди ведут две разные работы; внутреннее обсуждение клиента происходит без клиента; несколько клиентов с почтой на gmail схлопываются в одну «организацию».
Поэтому работает лестница признаков, от сильного к слабому: что сказал человек (окончательно и запоминается как правило) → серия в календаре (еженедельный синк и разовый созвон про партнёрство — разные вещи даже при одинаковых участниках) → название встречи → живая нить (обязательство из этого хаба всплыло на звонке) → названные штуки → организация → и только в конце участники, которые могут подтвердить догадку, но не могут её породить.
Сильный признак перекрывает слабый. Несколько слабых не складываются в сильный. И главное правило: не уверен — не адресую. Неразличимые кандидаты порождают вопрос, а не догадку. Неправильный адрес хуже отсутствующего.
А показывает хаб не «что было», а чего не хватает: какие обязательства подходят к сроку, какие решения остались открытыми, у какой работы нет исполнителя. Потому что перед звонком полезен именно этот вопрос, а не пересказ прошлого.
Экран, файлы, задачи, календарь
Экран. Whisperer умеет снять скриншот и разобрать его: диаграмму, график, слайд, код, ошибку в терминале. Можно накопить несколько кадров и задать вопрос по ним всем сразу — потому что архитектурную схему редко видно на одном экране. Отдельный режим ответа — System Design: структурный ответ с диаграммами компонентов и обоснованием решений, а не абзац прозы.
Это, кстати, тот случай, когда «AI рядом» бьёт «AI в окне» с разгромным счётом. Скопировать в чат кусок терминала можно. Скопировать туда происходящее — нет.
Файлы. Папки, загрузка перетаскиванием, просмотрщик (текст, PDF, картинки, docx/xlsx), публичные ссылки с паролем и сроком жизни. Отсюда файл можно отправить в базу знаний — тем самым отдельным осознанным шагом.
Задачи. Канбан-доска: колонки, метки, приоритеты, сроки, перетаскивание. Проект можно связать с Jira. Задачи сюда приезжают из встреч — с сохранением того, откуда они взялись.
Календарь. День, неделя, месяц; события четырёх типов; напоминания; двусторонняя синхронизация с Google Calendar, Outlook и CalDAV; подписка по iCal. Внутри события может жить видеокомната, куда гости заходят по ссылке — с живыми субтитрами, переводом и записью. Запись из комнаты становится встречей со стенограммой, замыкая круг.
Модели. Отдельная тема, которой я горжусь. Модель выбирается не одна на продукт, а на роль: одна отвечает в чате, другая пишет код, третья разбирает картинки, четвёртая работает в режиме системного дизайна, пятая делает эмбеддинги. Доступны семейства от OpenAI, Anthropic, Google, DeepSeek, Qwen, Moonshot, xAI и NVIDIA — по одной подписке. Это прагматика, а не всеядность: модели по-разному хороши в разном и дешевеют неравномерно, и привязывать продукт к одному поставщику — значит однажды объяснять пользователю, почему у вас стало хуже, хотя вы ничего не меняли.
Промпты. Библиотека собственных промптов с версиями, переменными, ролью и предпросмотром. К промпту можно подключить скиллы — наборы инструкций, которые меняют то, как модель рассуждает в конкретной роли.
Помощь в моменте: перевод, суфлёр и плашка «обнаружен звонок»
Три вещи, которые живут в настольном приложении и хорошо показывают, что значит «AI рядом, а не в окне».
Перевод я уже описал: собеседник говорит на своём, вы читаете на своём, пока он ещё говорит.
Суфлёр. Полноценный телесуфлёр с одной особенностью: он едет за вашим голосом. Вы говорите — текст прокручивается за вами. Сделали паузу — он не останавливается, а продолжает по измеренному темпу вашей речи. Замолчали надолго — плавно тормозит и запоминает место.
Это звучит как мелочь ровно до первой демонстрации продукта клиенту, когда вы отвлеклись на вопрос из зала, а суфлёр решил, что выступление окончено. Люди делают паузы постоянно: вдох, глоток воды, взгляд в зал. Останавливаться на каждой нельзя, прыгать — тем более.
Плашка «обнаружен звонок». Приложение замечает, что вы на созвоне, и предлагает включить запись — потому что самый частый способ потерять встречу — забыть нажать кнопку.
Здесь мы приняли решение, которым я доволен. Напрашивается список известных звонилок: Zoom, Teams, WhatsApp, Meet. Он устаревает в тот же день: корпоративный клиент, региональный мессенджер, свежий сервис в браузере — и функции у человека просто нет, причём молча. Поэтому правило обратное: звонком считается любое приложение, взявшее микрофон, кроме явных исключений. Исключения перечислимы и малы — в отличие от множества способов позвонить.
Ну и горячие клавиши на всё это, настраиваемые: старт и пауза, показать панель, поиск по базе знаний, скриншот, ввод текста, плюс отдельный набор для суфлёра.
MCP: дверь в обе стороны
Для тех, кто уже живёт в Claude, ChatGPT или Cursor, — важная деталь.
Whisperer работает как MCP-сервер: внешний AI-клиент может читать ваши данные Whisperer и действовать в них — с вашего явного согласия, через OAuth с точными правами по доменам. То есть вы можете сидеть в Claude и спросить его про свои встречи, а он сходит и посмотрит.
И как MCP-клиент: вы подключаете свои серверы, и Leo пользуется ими.
Границы здесь жёсткие, и они не настраиваются. Наружу проецируется часть реестра инструментов, а не весь: необратимые операции не выставляются никогда (во внутреннем интерфейсе они защищены подтверждением с показом последствий — у внешнего клиента такого экрана нет). Инструменты, принимающие учётные данные, — тоже никогда. И действия внутри ваших других сервисов — отправить письмо, написать в чат, записать в CRM, прочитать подключённый диск — наружу не отдаются вообще. Вы дали этот доступ Whisperer; передавать его дальше произвольному клиенту значит передавать по цепочке чужое согласие. Встречи наружу видны только те, которые вы явно пометили как общие, — не весь архив.
Скоупа * не существует. Это не придирка: скоуп «всё» — это способ не задавать вопрос о доступе.
Отдельно — подключённые сервисы для самого Leo: почта, календарь, диск, заметки, трекеры, CRM — Gmail, Outlook, Google Drive, Dropbox, Notion, Slack, Jira, Confluence, GitHub, GitLab, HubSpot. Подключаете один раз, дальше агент действует там от вашего имени. Токены при этом не покидают наш периметр.
Пять сцен из жизни
Это иллюстрации того, как продукт задуман, а не кейсы реальных клиентов — я не буду выдавать выдуманные истории за чужой опыт.
Разработчик
Встреча с заказчиком. Звучит классическое:
«Давайте эту кнопку уберём, добавим экспорт, и ещё хорошо бы интеграцию».
Через неделю на груминге кто-то спрашивает: «а кто это придумал вообще?» Обычно дальше идёт десять минут коллективного припоминания и вывод «ну, наверное, заказчик». Здесь — вопрос Leo, и ответ приходит со ссылкой: встреча, минута, говорящий. Не для того, чтобы кого-то уличить. Для того, чтобы обсуждать факт, а не воспоминания о факте.
Собеседование
Человек проходит техническое интервью. Whisperer ведёт стенограмму, держит контекст разговора, помогает не потерять нить в вопросе на три уровня вложенности и вспомнить собственный опыт — тот самый проект, где он два года назад уже поднимал похожий пайплайн и помнит, обо что там споткнулся. Повторю сказанное выше: цель — не отвечать за человека, а чтобы за сорок пять минут стресса он показал то, что действительно умеет, а не то, что успел выгрузить из памяти. А после — стенограмма, по которой видно, что на самом деле спрашивали. Это полезно обеим сторонам стола: интервьюеру, который ведёт двадцать собеседований в неделю и сравнивает их по ощущениям, структурированный разбор нужен не меньше.
Международная встреча
Один говорит по-английски, другой по-русски. Каждый читает своё. Разговор идёт про предмет, а не про формулировки. К концу у обоих остаётся стенограмма и список договорённостей — на своём языке.
Предприниматель
Семь встреч за день. Вечером один вопрос: «что сегодня обещал сделать Андрей?» Ответ собирается из реального содержания встреч, с указанием, где именно это прозвучало. Не «кажется, он что-то говорил про смету».
Студент
Лекция. Обычный режим — слушать, печатать, запоминать и параллельно гуглить незнакомый термин, делая все четыре вещи одинаково плохо. Альтернатива: слушать. Стенограмма ведётся сама, термин можно спросить не отвлекаясь, а разбирать материал — вечером, когда для этого есть голова.
Почему нативные клиенты, а не вкладка в браузере
Вопрос, который задают часто, и ответ на него скучный, но честный: из браузера нельзя услышать собеседника.
Расширение слышит только вкладку. Веб-приложение не имеет доступа к системному звуку. Чтобы слышать и вас, и того, с кем вы говорите, нужен нативный доступ к аудио операционной системы — на macOS через ScreenCaptureKit, на Windows через WASAPI loopback.
Поэтому клиентов два, оба нативные: macOS (Intel и Apple Silicon, SwiftUI) и Windows (C#/.NET, WPF). Панель поверх всего, невидимая при демонстрации экрана, значок в трее, глобальные горячие клавиши.
Раз уж я обещал честность — про Windows-клиент есть две вещи, которые стоит знать заранее. Код пока не подписан, поэтому при первом запуске Windows может показать предупреждение SmartScreen. И диаграммы в режиме System Design там рендерятся подсвеченным блоком кода, а не картинкой. Обе вещи в работе; писать «полный паритет» и оставлять человека выяснять это самому — так себе способ начинать отношения.
Чего Whisperer не делает — и кому он не нужен
Продукт, который не может сказать, кому он не подходит, не заслуживает доверия и во всём остальном. Поэтому коротко и прямо. Whisperer вам не нужен, если:
- Вам нужна дешёвая массовая расшифровка и больше ничего. Продукты, построенные вокруг транскрипции, делают её дешевле — это их основной бизнес.
- Ваши созвоны разовые и не связаны друг с другом. Всё, что делает Whisperer ценным, — хабы, обязательства, память между встречами — нуждается в нити, к которой можно прицепиться. Десять несвязанных звонков дают куда меньше, чем два клиента, идущих неделя за неделей.
- Вам нужны живые субтитры в браузере без установки чего-либо. Системный звук ловит настольный клиент, деваться от этого некуда.
- Вы хотите, чтобы AI следовал за вашими заметками, которые вы печатаете во время звонка. Whisperer собирает ответ из стенограммы, базы знаний и вашего профиля, а не из ваших живых пометок.
- Ваша политика запрещает обработку содержания встреч третьей стороной. Ответы считают внешние поставщики моделей; режим без логов ограничивает что хранится, а не кто считает. Это разные вещи, и путать их нельзя.
Про режим без логов, кстати: он есть. Стенограмма и ответы не пишутся в базу и удаляются после сессии. Для разговоров, которых не должно остаться.
Человеку не нужно становиться компьютером
Мы тридцать лет учили человека разговаривать с машиной на её условиях.
Сначала — на условиях командной строки: выучи синтаксис, не ошибись во флаге. Потом — на условиях интерфейсов: найди нужный пункт в третьем меню. Теперь — на условиях промптов: сформулируй задачу так, чтобы модель поняла, приложи контекст, уточни формат, попроси не выдумывать.
Каждый раз мы называли это прогрессом, и каждый раз человек подстраивался. Он молодец. Он вообще очень пластичный.
Но есть предел, и мы, кажется, в него упёрлись. Человек больше не может быть той деталью системы, которая удерживает связность всего происходящего. Не потому что он плохой, а потому что связей стало больше, чем помещается.
Не человек должен научиться быть базой данных. Машина должна научиться держать контекст за человека — рядом с ним, в его работе, не требуя, чтобы он пришёл и рассказал.
Разница между «сервисом» и «слоем» тут принципиальная.
Сервис — это место, куда вы приходите. Вы открываете приложение, ищете поле ввода, формулируете запрос, получаете ответ, копируете его туда, где на самом деле работаете. Четыре переключения контекста на одну мысль.
Слой — это то, что уже здесь. Оно слышало разговор целиком. Оно знает, о каком клиенте речь. Оно помнит, что вы решили в прошлый вторник. Ему не надо ничего пересказывать, потому что оно было рядом.
Я не утверждаю, что Whisperer уже стал этим слоем полностью. Утверждаю, что он строится именно как слой, и каждое решение в нём проверяется этим критерием.
Куда это движется
Осторожно — без обещаний с датами.
Направление простое: меньше окон, больше контекста, и инициатива, которая заслужена.
Первые две части понятны. Третья — самая тонкая. Технически сделать так, чтобы ассистент постоянно что-то предлагал, несложно. Сложно сделать так, чтобы его предложения были уместны: чтобы он молчал в девяноста случаях и заговорил в десятом, том самом.
Именно поэтому проактивный контур выкачен с выключенными тумблерами. Правило «когда вмешиваться» вынесено на сервер и не зависит от языка разговора — предыдущая версия была списком из полусотни русских и английских слов и потому работала у двух аудиторий из шестнадцати. Ассистент, чьи способности зависят от языка собеседника, — это не ассистент, это лотерея.
Ценность здесь не в том, чтобы AI говорил чаще. В том, чтобы он говорил вовремя.
Вместо вывода
Вернёмся к началу.
Проблема современного человека — не в недостатке информации. Информации у нас неприлично много, и это единственный ресурс, который точно не кончится.
Проблема в том, что её стало больше, чем способен удержать человеческий мозг. И, что важнее, — больше, чем он способен связать. Разрозненные факты у нас есть. Связной картины нет. Именно поэтому вечером вторника человек смотрит на пустое поле «Название задачи» и вспоминает собаку.
Whisperer — попытка решить именно это. Не «ещё один AI, который умеет писать тексты». Не «бот, который делает саммари». Попытка построить слой, который держит контекст вашей рабочей жизни, пока вы занимаетесь работой.
И, пожалуй, главный вывод, к которому я пришёл за этот год:
Лучший AI — не тот, к которому вы приходите поговорить. Лучший AI — тот, который просто оказывается рядом в нужный момент, понимает, что происходит, и помогает тогда, когда помощь действительно нужна.
Всё остальное — интерфейс к этой идее.
Если вы дочитали до этого места, у вас, скорее всего, прямо сейчас открыто больше двадцати вкладок, а вечером будет встреча, содержание которой вы забудете к пятнице.
Проверить это дёшево: на бесплатном тарифе есть шестьдесят минут в месяц. Хватит на одну встречу. Включите его на ней. А вечером спросите, что вы пообещали.
whisperer.one →
помощник