К содержимому

CapyAgent - программа на вашем компьютере.

Данные · 152-ФЗ

Как устроена обработка данных

Не пересказ закона, а описание устройства: что агент трогает, что оседает на диске, на какой срок и куда уходит. Всё, что здесь написано, собрано по коду и проверяемо в нём.

Заявки с сайта · На диске · Куда уходят данные · Расширение · Вопросы

Заявки с сайта

Что мы делаем с данными из форм на сайте

Оператор данных из форм на сайтах capyagent.ru и capyagent.com - ИП Смольников Кирилл Георгиевич. Он же правообладатель CapyAgent.

  • Что собираем. Имя, Telegram, телефон или почту, текст заявки и необязательные ответы про CRM и размер команды. Вместе с заявкой приходят страница сайта, с которой её отправили, предыдущая страница (реферер) и метки рекламной ссылки (UTM), если они были.
  • Зачем. Чтобы ответить на заявку и понять, с какой страницы она пришла. Рассылок нет.
  • Куда попадает. Заявка приходит в Telegram владельца, и читает её он сам.
  • Согласие. Форма отправляется только с отмеченным согласием.
  • Связь. Вопросы и отзыв согласия - на hello@capyagent.ru.

Роли

Кто оператор, а кто обработчик

Вы - оператор. Это ваши клиенты, ваши сотрудники и ваши согласия. Вы решаете, зачем данные обрабатываются, и отвечаете за это перед человеком, чьи данные обрабатываются.

Мы - обработчик. Мы обрабатываем по вашему поручению и в ваших интересах. Своих целей у нас нет: данные не идут в рекламу, не продаются и не обучают модели.

Поэтому к договору прикладывается отдельное поручение на обработку - того требует часть 3 статьи 6 152-ФЗ. Шаблон мы даём вместе со счётом.

Если вы поставили агента себе сами, CapyAgent не получает ваши локальные файлы и историю. Они остаются на вашей машине; наружу передаётся то, что нужно выбранной модели, каналам и сервисам, которые вы сами подключили, и, с версии 1.3.8, анонимная статистика установки (раздел «Статистика установки»). Роли по закону зависят от вашего конкретного сценария обработки.

На диске

Что оседает и на сколько

Сроки не обещание, а поведение кода: где написано «удаляется», там есть уборка, а где «пока не удалите» - её нет.

ЧтоГдеСколько лежит
Переписка с агентомфайл истории чатапока не удалите командой
Заметки памяти и портрет собеседникафайлы памятипока не удалите
Дневник разговоров с цитатамифайлы по дням90 дней, дальше уборка
Присланные документы и картинкикаталог обмена24 часа
Длинные выводы командкаталог обмена24 часа
Придержанные опасные действияфайл подтверждений30 минут
Недоставленные ответыочередь отправкидо доставки, максимум 6 часов
Журнал действий агентафайл журналапо объёму: последние 10 000 записей
Запись голосанигде: только в памяти на время распознаванияне хранится

Наружу

Куда данные уходят

Кроме анонимной статистики установки с версии 1.3.8 (отдельный раздел ниже), каждый внешний адрес появляется из выбранной модели, канала или сервиса, который включил владелец установки.

  • Поставщику модели уходит содержание разговора: вопрос, история переписки, заметки памяти, тексты документов и картинки, если модель умеет смотреть. Это происходит при каждом ответе - иначе агент не думает.
  • В распознавание речи уходит запись голоса, если голос включён. По умолчанию это Яндекс, российский сервис.
  • В канал общения уходит ответ агента: Telegram, Discord или портал Битрикс24, смотря где вы с ним говорите.
  • В ваши же системы уходит то, ради чего всё затевалось: письма, сделки, звонки, документы.

Про границу. Если выбрана зарубежная модель, содержание разговора уходит за пределы России, и это трансграничная передача со всеми последствиями 152-ФЗ: уведомление и основание для передачи - обязанность оператора, то есть ваша. Если это не подходит, в настройках выбирается российская модель - GigaChat или YandexGPT, - и агент работает так же.

Полный перечень адресов, куда способно обратиться ядро, лежит открытым текстом в файле deploy/egress-allowlist.txt. Он не документация: сборка не проходит, если в коде появился адрес, которого нет в списке, или в списке остался адрес, которого больше нет в коде.

Расширение для браузера

Что читает боковая панель Chrome

Панель CapyAgent для браузера - тонкий клиент к ядру, которое работает на вашей же машине. Своего сервера у неё нет, учётной записи она не заводит и наружу сама не ходит: единственный адрес, куда браузер разрешает ей обращаться, - http://127.0.0.1/*, то есть ваш компьютер. Это не обещание, а поле host_permissions в манифесте, которое проверяет сам браузер.

Что читает и когда

  • Содержимое открытой вкладки - только по вашему нажатию, только при поставленной галочке «Приложить контекст открытой страницы» и только с той вкладки, которая сейчас перед вами. Берутся адрес, заголовок, выделенный текст и до 20 000 знаков видимого текста страницы.
  • Без этого нажатия расширение вкладки не читает: фонового сбора нет. Служебные страницы браузера (chrome://, about:, страницы расширений) не читаются вовсе.
  • Ваш вопрос ассистенту и аргументы вызова инструмента - ровно то, что вы набрали в самой панели.

Куда это уходит

  • В ядро CapyAgent по адресу, который вы вписали в настройках панели: по умолчанию http://127.0.0.1:18800, то есть на этот же компьютер. Обращение подписывается токеном доступа, который печатает само ядро при запуске.
  • Дальше решает ядро, а не расширение. Если у вас подключена модель, текст запроса вместе с приложенной страницей уходит тому поставщику модели, которого выбрали вы, и по правилам, описанным выше в разделе «Куда данные уходят».
  • К нам данные из панели не идут ни в каком виде: у расширения нет ни одного адреса за пределами вашей машины.

Что расширение хранит у вас в браузере

  • Адрес ядра и токен доступа к нему - ключи addr и token, чтобы не вводить их при каждом открытии панели.
  • Идентификатор разговора панели - ключ chat, случайная строка вида ext-a1b2c3d4, чтобы история браузера не смешивалась с историей Telegram.
  • Больше ничего. Переписку, которую видно в панели, расширение не сохраняет: лента живёт в открытом окне панели, и при следующем открытии панель показывает её пустой. Ключей в хранилище ровно три, названы выше.
  • Всё это лежит в хранилище расширения (chrome.storage.local) на вашем компьютере, в профиле браузера. Удаление расширения удаляет адрес ядра, токен доступа и идентификатор разговора - и только их. Переписка от этого не пропадает: её ведёт и хранит ядро на вашей машине, в своём каталоге данных, и удаляется она там.

Чего расширение не делает

  • Ничего не собирает и не отправляет никуда, кроме вашего ядра: кода отправки в нём нет. Статистику установки с версии 1.3.8 шлёт приложение, а не расширение.
  • Не читает пароли, куки и содержимое полей ввода и не передаёт их.
  • Не подгружает код из интернета: весь код лежит в самом пакете, без eval, без внешних скриптов и без CDN.
  • Не продаёт данные, не передаёт их третьим лицам и не использует для оценки кредитоспособности.

Зачем каждое разрешение

  • activeTab - прочитать текущую вкладку по вашему нажатию, и только её.
  • scripting - выполнить на этой вкладке короткую функцию, которая собирает видимый текст. Другого кода на страницу не попадает.
  • sidePanel - показать саму панель сбоку от страницы.
  • storage - запомнить на вашей машине три значения, названные выше: адрес ядра (addr), токен доступа (token) и идентификатор разговора панели (chat). Больше в хранилище ничего не кладётся.
  • host_permissions: http://127.0.0.1/* - обращаться к ядру на вашем компьютере. Ни одного внешнего адреса в этом списке нет, и добавить его расширение само не может.
Что происходит с данными дальше - у ядра и у модели - описано в разделах «Что оседает и на сколько» и «Куда данные уходят» выше: панель ничего не хранит за них и ничего не решает за них.

Статистика установки

Что приложение отправляет нам с версии 1.3.8

Версии до 1.3.7 не отправляют ничего. Начиная с 1.3.8 приложение отправляет анонимную статистику установки. Текста разговоров, файлов, ключей, путей, имени пользователя и имени компьютера в ней нет.

Какие поля уходят

  • id - случайный номер установки: 32 символа из случайных байтов, создаются при установке и лежат в файле .install-stats-id в каталоге данных. Он привязан к установке, а не к человеку или компьютеру.
  • event - что произошло: install, first_run, update_check, updated или rollback.
  • version - версия приложения.
  • os и arch - система и архитектура, например linux и amd64.
  • channel - stable или test.
  • kind - вид установки: cli, desktop или cell.

Других полей нет.

Зачем

Чтобы считать, сколько установок живо и на каких версиях и системах, и решать, что поддерживать.

Когда и куда

В конце установки, при первом запуске десктопа, при проверке и применении обновления. Отдельной отправки при каждом запуске нет. Каждая отправка - один GET-запрос на https://capyagent.ru/dl/ping, а если он не прошёл, на https://capyagent.com/dl/ping. Сервер отвечает пустым ответом 204. Если ответа нет за пару секунд, отправка отбрасывается и ничего не ждёт.

Сколько хранится

Запрос попадает в журнал веб-сервера: адрес, с которого он пришёл, время, поля выше и название программы. Журнал хранится 14 дней, потом удаляется. Пока запись лежит в журнале, у неё есть IP-адрес, поэтому говорить, что адрес нигде не хранится, было бы неверно. Счётчики считает отдельная программа: по номеру установки она считает уникальные установки за день, а в итоговые файлы пишет только числа, без адресов и без номеров.

Как отключить

  • Переменная окружения CAPYAGENT_NO_STATS=1: её понимают установщики, ядро и десктоп. Ядро и install.sh понимают также NO_STATS=1.
  • В десктопе - переключатель «Анонимная статистика включена» в разделе «О программе». Он включён по умолчанию. Если задана переменная CAPYAGENT_NO_STATS=1, включить статистику переключателем нельзя.
  • У командной строки переключателя в настройках нет, только переменная. Вопроса при установке тоже нет: отправка включена, пока вы её не отключите.

Проверка обновлений ходит к нашему серверу только если владелец включил обновление по сети.

Честно

Что честно назвать неудобным

Раздел существует потому, что документ без него читается как реклама.

  • Шифрования данных на диске нет. Файлы доступны только пользователю службы: сам файл 0600, каталог 0700. Если машину получил кто-то с правами администратора, он прочитает всё. В облаке ночная копия шифруется до отправки, но живой диск - нет.
  • У переписки, заметок и портрета нет срока хранения. Они лежат, пока вы не удалите их командой. Автоматической уборки для них не существует, и это осознанное устройство личной памяти, а не упущение.
  • Удалённое живёт в копиях. Заметка, стёртая командой «забудь», остаётся в точках отката памяти и во всех снятых до этого резервных копиях. Чтобы убрать её оттуда, копии нужно удалить отдельно.
  • В журнале маскируются секреты, но не персональные данные. Ключи и токены не попадут в журнал никогда, а имя, телефон и текст ошибки с адресом почты - попадут.

Страница обновляется, когда меняется устройство, а не раз в год. Что изменилось и когда - в журнале изменений.

Вопросы

Что спрашивают

Вы обучаете модель на наших данных?
Нет. Мы вообще не обучаем моделей. Данные уходят поставщику модели только как содержание запроса; условия хранения на его стороне определяет договор с ним, а не с нами.
Можно, чтобы данные не покидали Россию?
Можно собрать конфигурацию только для России: выбрать российскую модель и распознавание, а также использовать только каналы и рабочие сервисы с подходящим размещением данных. Одного выбора модели недостаточно: нужно проверить каждый подключённый внешний адрес и ваш договор с его владельцем.
Как удалить всё?
Разговор удаляется командой, память - поштучно или целиком. Удаление не трогает резервные копии и точки отката: их нужно снести отдельно, иначе удалённое поднимется вместе с восстановлением.
Кто у вас имеет доступ к машине?
В облаке - мы, как обслуживающие сервер: иначе его невозможно чинить. В переписку заходим в одном случае, когда разбираем поломку по вашей же заявке. При установке к себе доступа у нас нет никакого.
Нужно ли нам уведомлять Роскомнадзор?
Обязанность оператора, то есть ваша, и она возникает не из-за агента. Отдельно она возникает при трансграничной передаче: если вы выбрали зарубежную модель, передача есть.

Дальше

Спросите про данные до подписания

Покажем на живом примере, что именно уходит наружу в вашей задаче, и дадим шаблон поручения на обработку.