Открытый код агента DevPace: не верьте на слово, проверьте сами
Когда компания, которая следит за рабочим временем сотрудников, говорит «мы не читаем переписку и не делаем скриншотов» — это звучит как то, во что просто нужно поверить. Мы решили, что этого недостаточно, и сделали шаг, на который решается мало кто в этой нише: выложили исходный код фонового агента DevPace в открытый доступ — github.com/ak-alz/gla-client. Дальше в статье — не общие слова о прозрачности, а конкретный маршрут: что лежит в репозитории, в каких файлах искать код сбора данных, чем открытый агент отличается от закрытого на практике и как проверить эти утверждения самостоятельно, даже если вы не программист.

Ничего не скрыто — именно это и значит открытый код.
Обещание в политике — это только обещание
Политика конфиденциальности — юридический документ. Она описывает намерения компании и накладывает на неё обязательства, но проверить по ней, что реально происходит на компьютере сотрудника, нельзя. Между строчкой «мы не собираем содержимое документов» и тем, что программа действительно делает в фоне, всегда остаётся зазор, который приходится закрывать доверием.
Мы не просим закрывать этот зазор доверием. Агент, который ставится на рабочий компьютер, — открытый исходный код. Любой человек, который умеет читать код (или ИТ-отдел компании, где работает сотрудник), может открыть репозиторий и увидеть, какие данные агент собирает, как их обрабатывает и что отправляет на сервер — не через месяц после обновления политики, а прямо сейчас, глядя в тот же код, который у него установлен.
Что именно можно проверить
Ключевое утверждение DevPace простое: агент фиксирует только техническую категорию активного приложения или процесса и длительность времени в ней — например, «редактор кода», «браузер», «мессенджер» — плюс отдельные счётчики нажатий клавиш и движений мыши как события, без их содержимого. Никаких скриншотов. Никаких заголовков окон и уж тем более содержимого документов, писем или чатов.
В закрытом продукте это утверждение проверить нельзя в принципе — вы либо верите вендору, либо нет. В открытом можно найти в коде ровно то место, где агент опрашивает активное окно, посмотреть, какие поля оттуда извлекаются, а какие — сознательно отбрасываются, и убедиться, что заголовок окна и текст на экране действительно никогда не попадают в код, который что-либо куда-либо отправляет. Это не декларация о намерениях, а факт, который устанавливается чтением, а не верой.
Где в репозитории искать код сбора данных
Не нужно читать весь репозиторий целиком, чтобы получить ответ на конкретный вопрос — достаточно знать, куда смотреть. Код разбит на отдельные модули (в терминах Rust — крейты), и у каждого своя узкая роль:
crates/windows-collectorиcrates/linux-collector— по коллектору на каждую операционную систему. Здесь происходит опрос активного окна и процесса: то самое место, где решается, что именно агент вообще видит на компьютере.crates/normalization— общая логика превращения имени процесса в категорию. Файлcategories.rs— просто таблица соответствий вроде «code.exe → редактор кода», без единого места, где бы имя файла или заголовок сохранялись отдельно от категории.title_classifier.rsв том же крейте — единственное исключение из правила «никогда не читать заголовок окна», и оно тоже проверяемо, а не спрятано. В комментарии к файлу прямо написано, что это узкий, специально изолированный модуль для одного случая: отличить, например, работу в таск-трекере от чтения новостей внутри одной и той же вкладки браузера. В собранном агенте он подключается с пустым набором правил и поэтому не срабатывает никогда; а даже если правило добавить, сам текст заголовка читается в локальную переменную только на время классификации и не возвращается, не логируется и не сохраняется — это видно прямо из тела функции, а не из обещания в комментарии.crates/event-contract— самое короткое чтение с самым весомым выводом. Здесь описан весь формат данных, который агент вообще способен отправить на сервер: секунды по категориям, счётчики ввода, длительность непрерывных отрезков работы, число необъяснённых пауз. Поля с заголовком окна, текстом или изображением экрана в этом формате нет структурно — не потому, что их решили не заполнять, а потому, что типу данных просто неоткуда взяться.crates/ui-shell/src/tray.rsи цикл сбора вcrates/agent-bin/src/main.rs— код кнопки «Пауза» в трее. Можно убедиться, что во время паузы опрос активности не вызывается вообще, а не просто перестаёт отображаться в интерфейсе.
Это не абстрактная возможность «в теории можно посмотреть» — это конкретные пути внутри одного публичного репозитория, которые можно открыть прямо сейчас. На практике это занимает у человека, знакомого с Rust, минут двадцать: открыть crates/event-contract/src/payload.rs, увидеть там весь список полей одним экраном, затем открыть crates/windows-collector или crates/linux-collector и проследить, что ни в одной функции сбора не появляется ничего, что потом попадало бы в поля payload сверх заявленного. Это не требует знания всего проекта целиком — только умения прочитать один файл и один модуль рядом с ним.
Как проверить сетевой трафик самостоятельно
Чтение кода — не единственный способ проверки, и он не обязателен, если хочется более быстрого и менее технического способа. Второй независимый метод — посмотреть, что агент реально отправляет по сети, вообще не заглядывая внутрь исходного кода.
Подойдёт как встроенный в операционную систему монитор ресурсов (диспетчер задач в разделе «Сеть» на Windows, nethogs или аналог на Linux), так и специализированный прокси для анализа трафика. Смотреть стоит на две вещи: как часто агент вообще выходит в сеть и какого объёма пакеты при этом отправляет. Периодическая отправка небольшого пакета данных (по размеру — сопоставимого с текстовым сообщением, а не с изображением) хорошо согласуется с заявлением «мы передаём категории и счётчики». Регулярная передача пакетов, по размеру характерных для скриншотов или видео, была бы прямым противоречием этому заявлению — и её было бы видно даже без расшифровки самого содержимого трафика, просто по объёму данных.
Здесь не нужно ничего расшифровывать или обходить: сам факт того, что можно сопоставить объём исходящих пакетов с перечнем полей из event-contract и не найти нестыковки, — уже самостоятельная, независимая от чтения кода проверка тех же самых утверждений.
Показательный пример разницы в подходах: если бы агент действительно делал скриншоты раз в несколько минут, это было бы видно в мониторе трафика без всякого чтения кода — характерный всплеск объёма данных на десятки или сотни килобайт с регулярным интервалом, который не спрячешь никаким сжатием так, чтобы он совпадал по размеру с обычным JSON-пакетом на пару сотен байт. Отсутствие такого паттерна за неделю наблюдения — само по себе не финальное доказательство, но сильный независимый сигнал, который дополняет чтение кода, а не заменяет его собой.
Кросс-платформенность — тоже не просто слова
Агент собран на Rust и работает на Windows и Linux — это не абстрактный маркетинговый тезис, а конкретная вещь, которую видно прямо в структуре репозитория: отдельные модули под каждую платформу, общая логика сбора категорий и общий протокол отправки данных. На Linux с GNOME (Wayland), где активное окно нельзя узнать штатным системным способом, для этого написано отдельное небольшое расширение GNOME Shell — весь его код меньше 60 строк и читается целиком за пару минут, а по внутреннему протоколу оно отдаёт ровно то же самое, что X11 и Hyprland отдают на своих системах: идентификатор приложения и номер процесса, ничего больше. Для компании это означает, что заявление «поддерживаем обе ОС» — не рекламная строчка, а код, который можно скомпилировать и запустить самостоятельно, не дожидаясь релиза.
Открытый код против закрытого: что это меняет на практике
Здесь важно быть точным в формулировке, потому что это не наезд на конкурентов, а структурный факт. Закрытый исходный код сам по себе не означает, что программа собирает больше данных, чем заявлено, — так тоже бывает не всегда. Он означает другое: у клиента закрытого продукта физически нет способа это проверить. Есть только политика конфиденциальности, ответы поддержки на вопросы и, в лучшем случае, сертификат аудита безопасности, который описывает состояние кода на момент проверки, а не гарантирует, что следующее обновление ничего не изменит. Вопрос «а что, если завтра тихо добавят сбор заголовков окон» в закрытом продукте не имеет проверяемого ответа — только доверие к обещанию, что так не сделают.
В открытом репозитории тот же вопрос имеет конкретный ответ: можно посмотреть историю изменений конкретных файлов — тех же normalization или event-contract — и увидеть, добавлялось ли туда что-то новое между версиями, а не просто поверить описанию в release notes. Это не разовая проверка «прочитал один раз и успокоился», а постоянно доступная возможность, которая никуда не девается с новой версией агента.
Если вы хотите системно проверить не только DevPace, а вообще любой инструмент учёта рабочего времени, который рассматриваете или уже используете в компании, — в материале «Bossware: что такое ПО для слежки за сотрудниками» есть подробный чек-лист именно для этого: какие вопросы задавать вендору, на какие классы инвазивности делятся такие программы и как отличить учёт времени по категориям от полноценной слежки за содержимым. Принцип там тот же самый, что и в этой статье, — просто сформулирован не для одного конкретного агента, а для рынка в целом.
Как это проверить, если вы не программист
Не обязательно уметь программировать, чтобы получить пользу от открытости кода. Достаточно, чтобы это мог сделать кто-то один — сотрудник ИТ-отдела, безопасник, знакомый разработчик — и его вывод уже можно передать дальше как проверенный факт, а не как повторение слов вендора. Это принципиально иная ситуация, чем с закрытым агентом, где даже специалист по безопасности может полагаться только на сетевой трафик и предположения о том, что происходит внутри.
Есть и дополнение внутри самого продукта, не требующее чтения кода вообще: вкладка «Конфиденциальность» в профиле показывает точный текст действующего согласия на обработку данных и позволяет выгрузить свои же накопленные данные в файл — можно сверить содержимое выгрузки с тем, что обещано, без единой строчки Rust. А что происходит с этими данными при отзыве согласия — отдельно и подробно разобрано в статье «Отзыв согласия — это удаление данных, а не галочка в настройках».
Итог
Политика конфиденциальности говорит, что должно происходить. Открытый код показывает, что происходит на самом деле, — и делает это не один раз при запуске продукта, а постоянно, версия за версией. Для инструмента, который ставится на рабочий компьютер и должен считаться приемлемым и для работодателя, и для сотрудника, это не техническая деталь, а основа доверия: разница между «нам обещали» и «мы проверили» здесь не риторическая, а буквально видна в структуре одного публичного репозитория.
Код агента открыт и доступен для изучения по адресу github.com/ak-alz/gla-client — проверьте эти слова сами, покажите репозиторий тому, кто разбирается в коде лучше вас, или просто сравните объём сетевого трафика с перечнем полей из event-contract. А чтобы увидеть, что показывает сам продукт, а не только его код, — Посмотреть демо и посмотрите на данные, которые агент реально собирает про ваш собственный день.
Смотрите также
- Bossware: что такое ПО для слежки за сотрудниками
- Отзыв согласия — это удаление данных, а не галочка в настройках
- Привязка агента: код в браузере вместо пароля в трее
Опубликовано: 27 июня 2026 г.