Агенты вроде Claude Code или Codex хорошо пишут код, но не знают, о чем вы договорились с подрядчиком на прошлой неделе, потому что это лежит в Telegram, в почте и в записи созвона. Я делаю WireCat, набор open source инструментов, которые дают агенту доступ ко всему этому, и приложение, в котором все это подключается без терминала.
Раз через WireCat идет личная переписка, вопрос, куда она уходит, у нас один из главных (почему, я писал в посте про приватность). Недавно я сделал так, чтобы WireCat можно было запустить целиком на локальных моделях, и по дороге нашел несколько мест, где данные уходили наружу, хотя не должны были.
Как устроен WireCat
Каждый инструмент подключает один источник, Telegram, WhatsApp, MAX, почту, заметки, Zoom, Google Drive итд, и хранит копию данных в базе у вас на компьютере. Мессенджеры подключаются от вашего аккаунта, так что агент видит то же, что и вы. Агента вы оставляете своего, своей модели у WireCat нет.
Поиск по этой базе устроен в 2 слоя. Поиск по словам находит сообщения, даже если слово написано не совсем так. А поиск по смыслу работает на эмбеддингах (числовых отпечатках смысла текста) и находит сообщение, когда вы спрашиваете другими словами. Оба работают у вас на компьютере. Модель для смысла WireCat скачивает сам, сейчас это EmbeddingGemma 300M. Я сравнивал несколько бесплатных моделей, и на наших данных она оказалась лучшей, при том что она из самых маленьких.
И по времени это нормально - тестовый набор в 10 000 записей Memo (инструмент для заметок, почты и памяти) проиндексировал на моем ноутбуке где-то за 2.5 минуты. Это еще на прошлой модели e5-small, с Gemma выходит 4-7 минут. Для сравнения, Mem0 на бесплатном плане обрабатывал 6 500 записей 19 часов, правда, это его очередь на сервере, а не скорость модели.
Каким функциям нужна модель
Поиск это основа, но вокруг него куча функций, которым нужна модель ИИ. Вот они все, и где каждая работает по умолчанию:
| Функция | Что делает | По умолчанию | Можно локально |
|---|---|---|---|
| Поиск по смыслу и по картинкам | находит записи и картинки по смыслу | у вас | уже |
| Расшифровка встреч | делает текст из записи созвона | у вас | уже |
| Голосовые сообщения | делает текст из голосового | у вас, если модель скачана, иначе мессенджер | да, флаг --local |
| Распознавание картинок | читает текст на картинках, которые вы добавили в память | выключено | да, Ollama или свой сервер |
| Чтение фактов | достает из документа факты, решения, задачи | ваш агент | да, Ollama или модель ИИ |
| Искать тщательнее | переставляет первые 30 результатов поиска, когда вы нажимаете кнопку | выключено | да, по адресу |
| Переписывать записи для поиска | дописывает к заметкам и письмам другие слова, чтобы их находили | выключено | да, по адресу |
| Связывание чатов, черновики ответов, текст во вложениях | что сказано в названии | выключено | да, через модель ИИ |
| Сводки и почтовый агент | каждое утро пишет сводку, разбирает новую почту | агент, которого вы выбрали | зависит от агента |
| Ваш агент | все остальное | его модель | зависит от агента |
Все, что выключено, включаете вы сами, и в настройках видно, куда каждая функция отправляет данные.
Как я искал, куда утекают данные
Я прошел по всем функциям, где WireCat ходит к модели, их вышло 13, и для каждого записал, что уходит и можно ли это оставить у себя.
Самый неприятный - мой собственный косяк. Переписывание записей, Искать тщательнее, связывание чатов и еще пара функций спокойно принимали адрес http:// на другом компьютере. Т.е. если вы держите Ollama на домашнем сервере и вписали его адрес, ваши заметки и письма шли по сети без шифрования. Настройка модели ИИ это уже запрещала, а остальные почему-то нет. Теперь правило одно - обычный http только на этот компьютер, на другой только https.
Еще локальная модель требовала ключ. Чтобы подключить LM Studio или llama.cpp у себя, нужно было вписать какой-то API-ключ, хотя никакой ключ там не нужен. Мелочь, но человек в этот момент думает, что раз ключ, значит облако. Я это убрал.
С голосовыми было так, что по умолчанию текст делал сам мессенджер, например Telegram, если у вас Premium. Я поменял порядок, теперь сначала скачанная модель, а мессенджер только если ее нет.
А один конфликт я так и не решил. Сводки пишет и почту разбирает агент для кода, которого вы выбрали в настройках. Claude Code и Codex мы запускаем для этих задач без ваших собственных настроек, специально. Сводка читает чужие письма, а в них может быть текст, который пытается заставить агента что-то сделать. Поэтому Claude Code получает только команды WireCat, а Codex работает в песочнице без сети, и ваши настройки, которые могли бы это расширить, не читаются. Из-за этого и локальная модель, которую вы прописали в настройках Codex, до сводок не доходит. Пришлось выбирать между безопасностью и приватностью, и я пока выбрал безопасность. OpenCode, по идее, свои настройки читает, так что с ним должно получиться, но это я еще не проверял.
Еще есть Ollama. Не все модели в нем локальные, часть, у которых в имени есть cloud, работает на серверах Ollama, и поиск в интернете у него тоже уходит наружу. Т.е. можно честно поставить Ollama у себя и при этом отправлять все в облако.
Как настроить
Подробная инструкция по шагам есть на сайте, Запустить WireCat на локальных моделях. Коротко:
- Ставите Ollama (или LM Studio, или любой другой сервер с API как у OpenAI) и скачиваете модель. Для картинок нужна модель, которая их видит, например llava. Облачные модели Ollama выключаете одной строкой в настройках Ollama.
- В WireCat Desktop в Настройках, в Модели ИИ выбираете Ollama на этом компьютере. Ключ не нужен.
- В Чтении фактов выбираете эту модель или Ollama.
- Если хотите, направляете на нее же Искать тщательнее и переписывание записей, у обоих можно вписать адрес своего сервера.
- Голосовые расшифровываете с --local.
- Своего агента запускаете на локальной модели. Ollama умеет запускать Codex, Claude Code, OpenCode и пару других одной командой ollama launch. Anthropic, правда, официально Claude Code на чужих моделях не поддерживает, а у Cursor и Gemini CLI я в документации такой настройки не нашел.
- Включаете Только этот компьютер.
Последний пункт тут главный - это один переключатель, после которого инструменты WireCat отказываются обращаться к модели по адресу, который не localhost, 127.x.x.x или [::1], причем отказывают до отправки, а не после. Агент может его включить, а выключить можете только вы. Под ним список функций с отметками, куда каждая отправляет данные сейчас, так что видно, что еще осталось поправить.
Но несколько мест переключатель не закрывает, за ними надо следить самим. Это ваш агент, сводки с Claude Code или Codex, и чтение картинок через агента (отдельная настройка, которая отправляет картинку в Claude Code или Codex, там лучше выбрать Никогда).
Сколько это стоит
Локальная модель бесплатная, но ест время и память. Я замерял на своем ноутбуке, AMD Ryzen AI 9 HX 470, 30 GB памяти, без видеокарты, и параллельно на нем работали другие агенты, так что цифры с шумом.
Лучше всего это видно на Искать тщательнее. Я гонял 2 набора, наш синтетический v3 (10 444 коротких записи, 46 вопросов) и кусок LifeBench (синтетические данные с телефона одного человека за год, 59 вопросов). Цифра это доля нужных записей в первой десятке. Все строки переставляют одну и ту же выдачу, которую до этого уже подтянули 2 маленьких вызова Haiku, так что это сравнение именно перестановки, а не всего поиска:
| Чем переставляли | v3 | LifeBench | Время на вопрос | Память | Цена за вопрос |
|---|---|---|---|---|---|
| Ничем | 0.94 | 0.47 | 0 | 0 | |
| jina-reranker-v2, маленькая локальная модель | 0.94 | 0.48 | 1.4 с / 9 с | 5.7 GB вместе со всем тестом | 0 |
| qwen3.5:9b в Ollama, на процессоре | 0.94 | не запускал | 25 с | 7.7 GB сама модель | 0 |
| Claude Haiku 5.5, облако | 0.94 | 0.55 | около 1 с | около $0.0004 |
На v3 локальная qwen сделала то же, что и Haiku, но за 25 секунд на вопрос вместо одной. До LifeBench дело не дошло. Прогон пришлось остановить на вопросах, заданных другими словами (успел 2 из 17), потому что модель заняла 7.7 GB, и вместе с соседними задачами компьютеру перестало хватать памяти. Поэтому сейчас Искать тщательнее ждет локальную модель до 60 секунд, а облачную 5.
Маленькие модели для перестановки вроде jina работают быстрее, но сами по себе теряют вопросы, заданные другими словами, и добавляют максимум +0.01. Так что для поиска я бы оставил локально то, что есть, а модель подключал там, где полминуты не жалко.
С переписыванием записей наоборот - облако дешевое, но отдает все. Через gpt-4o-mini весь тестовый набор, 9 840 записей, обошелся примерно в $0.49, и с EmbeddingGemma вопросы, заданные другими словами, стали находиться заметно чаще, 0.94 в первой десятке вместо 0.78. Но это все ваши заметки и письма, отправленные в OpenAI. Локально бесплатно, но на процессоре это будут часы, а не минуты (это я не замерял, только прикинул по скорости выше).
Для агентов Ollama просит контекст от 64 000 токенов, а модель должна уметь вызывать инструменты. Небольшая модель на ноутбуке отвечает медленно и чаще ошибается в командах, чем облачная. Так что для агента на локальной модели я бы очень хотел видеокарту.
Что я не проверял
- Качество на русском. Все замеры выше на английских синтетических данных.
- Видеокарту. Все локальные цифры на процессоре.
- Перестановку qwen3.5:9b на LifeBench и на большей части вопросов, заданных другими словами.
- Переписывание записей локальной моделью целиком, только прикидка.
- Агентов на локальной модели против WireCat на реальных задачах.
- Подтягивает ли zoom облачные расшифровки самого Zoom.
И цифры шумные - один вопрос в наборе из 17 двигает результат на 0.06, и Haiku при повторном прогоне сам съехал с 1.00 до 0.94.
Короче, поиск в WireCat и так локальный и бесплатный. Все, что дальше, можно перевести на свою модель, но это стоит времени и памяти, а за несколькими местами надо следить самим.
Инструкция по шагам: Запустить WireCat на локальных моделях. Замеры с данными и скриптами лежат в cli-testing. Скачать WireCat Desktop можно на сайте.
Если будете настраивать и что-то не заведется, пишите в тему Помощь в Telegram или в #help в Discord, помогу. А если погоняете то же самое на видеокарте, буду рад цифрам.
