ИИ-агенты и MCP

MCP-сервер, хуки агентов, сетевой журнал агентов, навыки агентов и как не дать Mac уснуть.

Пошаговые инструкции для Claude Code, Codex, Cursor, Gemini CLI, Claude Desktop, Windsurf, Cline, Zed, Hermes Agent, OpenClaw, OpenCode, GitHub Copilot CLI и любого MCP-клиента находятся в разделе Настройка Kilobat в вашем ИИ-агенте.

Дайте агенту вроде Claude Code, Codex или Cursor такой промпт:

Install the Kilobat CLI with `brew install seifip/kilobat/kilobat`. Run `kilobat diagnose --json`, `kilobat status --json` and `kilobat scan --json`, then tell me what is slowing my connection and how to fix it. Ask me before changing DNS, profiles or rules.

Сервер MCP

kilobat mcp работает по протоколу Model Context Protocol через stdio. Добавьте его в Claude Code:

claude mcp add kilobat -- kilobat mcp

Или добавьте его в любой клиент, который читает конфигурацию mcpServers:

{ "mcpServers": { "kilobat": { "command": "kilobat", "args": ["mcp"] } } }

Инструменты только для чтения: get_status, diagnose_network, diagnose_connection, get_conditions, get_updaters, get_uploads, get_data_pack, get_wifi, scan_wifi, suggest_wifi_channel, get_usage_report, compare_usage, get_app_bandwidth, get_access_policy, get_network_history, list_sessions, agent_network_log (все узлы, к которым обращались агент и его команды), benchmark_dns, check_url, list_connections, list_devices, trace_route, get_route_history, compare_speed_tests, get_exit_path (запрашивает ваш публичный IP у Cloudflare, только когда агент передаёт public_ip), check_vpn_leaks (проверка утечек, обращающаяся к внешним сервисам), list_networks, get_fastest_dns (самый быстрый DNS для каждой сети по фоновым проверкам приложения), list_rules, list_approvals, list_blocked_connections, explain_verdict (все правила, соответствующие узлу или приложению, и решающее правило), check_host_reputation (проверка на этом Mac, находится ли узел в списке вредоносных сайтов, фишинга, мошенничества или трекеров), get_protection_status, run_stutter_test и get_game_ping (они только отправляют ping), get_nearby_radios, get_captive_portal (страница входа в Wi-Fi, то же, что kilobat portal --json), service_status (запрашивает публичные страницы состояния названных сервисов или работающих приложений) и create_support_report (отчёт для вашего провайдера, который агент передаёт вам). Они возвращают тот же JSON, что и CLI. run_speedtest расходует данные, run_lan_test передаёт данные в вашей сети в течение пяти секунд и сначала запрашивает согласие, а keep_awake и release_awake предотвращают сон при бездействии на заданное время без изменения настроек; keep_awake с lid_closed после вашего разрешения также поддерживает работу Mac с закрытой крышкой и сначала спрашивает вас. Инструменты изменения (set_profile, set_app_rule, set_new_app_mode, decide_approval, block_destination, set_budget, set_data_pack, set_app_quota, set_network_cost, set_updater_pause, set_kill_switch, set_protection, который также запрещает агенту отключать защиту ради выполнения собственного запроса, hold_upload, удерживающий отправку другого приложения, set_dns, который также очищает кэш, set_fastest_dns, set_dns_fallback и set_airdrop_visibility, открывающий настройки AirDrop) отмечены как изменяющие данные, а их описания предписывают агенту сначала спросить вас.

Подключение агентов

Без подсказок Kilobat судит об агенте по его трафику и нагрузке на CPU, поэтому затихший агент может как закончить работу, так и ждать вас. Хуки агента сообщают Kilobat, к какому проекту относится запуск, когда он ждёт вас и когда завершён. Каждый хук запускает kilobat agent-event, который ничего не выводит, возвращается сразу и всегда завершается с кодом 0, поэтому не может сломать агента. Если приложение не запущено, события ждут в небольшом файле, который оно прочитает при открытии. Kilobat читает идентификаторы сеансов, папки и короткий текст статуса — но никогда не промпты и ответы. Объедините эти хуки с уже имеющимися.

Claude Code, в ~/.claude/settings.json. Каждый хук получает на stdin JSON с идентификатором сеанса и папкой, который читает --stdin-json. Запрос разрешения или ввода означает ожидание; Stop означает завершение, как только закончатся фоновые задачи; лимит запросов означает ожидание до его сброса.

{
  "hooks": {
    "SessionStart": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent claude --stdin-json" }] }],
    "UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent claude --stdin-json" }] }],
    "Notification": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent claude --stdin-json" }] }],
    "Stop": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent claude --stdin-json" }] }],
    "StopFailure": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent claude --stdin-json" }] }],
    "SessionEnd": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent claude --stdin-json" }] }]
  }
}

Codex, самый простой способ: notify в ~/.codex/config.toml. После каждого хода Codex передаёт аргумент JSON, который читает --json-arg. Так сообщается только о завершении, и Codex запускает лишь одну программу notify.

notify = ["kilobat", "agent-event", "done", "--agent", "codex", "--json-arg"]

Чтобы видеть и ожидание, используйте вместо этого хуки Codex в ~/.codex/hooks.json и подтвердите доверие к ним через /hooks:

{
  "hooks": {
    "SessionStart": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent codex --stdin-json" }] }],
    "UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent codex --stdin-json" }] }],
    "PermissionRequest": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent codex --stdin-json" }] }],
    "Stop": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent codex --stdin-json" }] }]
  }
}

Gemini CLI, в ~/.gemini/settings.json. Gemini CLI работает как node, поэтому Kilobat не может связать его трафик с запуском, но состояние передаётся.

{
  "hooks": {
    "SessionStart": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent gemini --stdin-json" }] }],
    "BeforeAgent": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent gemini --stdin-json" }] }],
    "Notification": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent gemini --stdin-json" }] }],
    "AfterAgent": [{ "hooks": [{ "type": "command", "command": "kilobat agent-event --agent gemini --stdin-json" }] }]
  }
}

Cline (CLI, SDK и Kanban): установите плагин Kilobat — он добавляет один файл в хранилище плагинов Cline и не меняет других настроек. cline plugin uninstall kilobat удаляет его.

cline plugin install https://kilobat.app/agents/cline/kilobat.ts

Он сообщает, что запуск работает, завершён, завершился ошибкой (пока Cline открыт), отменён, упёрся в лимит запросов после того, как исчерпаны собственные повторы Cline, и что он ждёт, пока Cline задаёт вам вопрос. Прежде чем считать запуск завершённым, он дожидается субагентов и напарников. Запросы подтверждения Cline плагинам не видны, поэтому их покрывает распознавание по трафику и CPU.

Любой другой агент может вызывать kilobat agent-event start|working|waiting|done|failed --agent <name> --session <id> --cwd <folder> из своих хуков. Добавьте --verbose, чтобы увидеть, что произошло, когда пробуете вручную.

Сетевой журнал агентов

Пока работает Claude Code, Codex, Cursor, Gemini CLI, Aider, Windsurf, Claude Desktop, ChatGPT или другой агент, Kilobat записывает каждый хост, к которому обращались он и запущенные им процессы: npm, pip, uv, curl, git, brew, MCP-серверы — даже если между ними стоит оболочка. Каждый сеанс — от запуска процесса агента до завершения его самого и всего, что он запустил, — показывает хосты по процессу, который подключался, сначала те, куда отправлено больше всего, с портом и протоколом, временем первого и последнего появления, отправленными и полученными байтами и числом подключений, а также папку проекта, в которой работал агент. Всё это — в «История › Сетевой журнал агентов», а пока агент работает, меню показывает одну строку, например «Claude Code · 14 хостов · отправлено 2,1 MB». «Скопировать как Markdown» помещает таблицу сеанса в буфер обмена — для задачи или ревью.

Отметки показывают, на что стоит взглянуть ещё раз, но никогда не означают, что что-то не так: впервые (ни один агент на этом Mac раньше не обращался к этому хосту; известные реестры вроде registry.npmjs.org, pypi.org и github.com, а также собственный сервис агента новыми не считаются), HTTP без шифрования (порт 80), большая отдача (больше 10 MB на один хост, кроме собственного сервиса агента, так что Claude Code, отправляющий свой контекст в Anthropic, не отмечается), только адрес (имя хоста неизвестно) и обмен или туннель (короткий список сайтов для вставки текста, файлообменников вроде transfer.sh, туннелей вроде ngrok и trycloudflare.com и сервисов для перехвата запросов вроде webhook.site). «Только отмеченные» показывает только их.

Как это работает: Kilobat и так каждую секунду читает сетевую статистику macOS по каждому подключению (ту же, что nettop), вместе с процессом каждого подключения. Агентов он узнаёт по исполняемому файлу, по пакету, который запускает интерпретатор (node …/@openai/codex, python3 -m aider), или по собственному исполняемому файлу приложения и следит за деревом процессов каждого агента: ядро сообщает ему, как только процесс в дереве делает fork, поэтому даже curl, который работает десятую долю секунды, учитывается, пока работает, а процессы, переданные launchd, остаются за агентом. Побеждает ближайший агент, поэтому Claude Code, запущенный в терминале Cursor, относится к Claude Code. Имена хостов берутся из сетевого фильтра Kilobat, когда он включён (имя, которое запросило приложение), из разрешения известных хостов для разработчиков и хостов из URL в curl или git агента через резолвер вашего Mac со сверкой адресов или из обратного DNS — он отмечается, потому что это имя сервера, а не то, которое запросило приложение. Если ничего из этого нет, в строке показан адрес.

Что он не видит: трафик служб macOS от имени процесса (DNS-запросы проходят через mDNSResponder, загрузки — через nsurlsessiond), контейнеры Docker и виртуальные машины (их трафик выходит через собственный процесс Docker или виртуальной машины), а также агентов внутри редактора, работающих в процессе его расширений, например Cline или Copilot в VS Code, которых нельзя отличить от редактора. В Cursor и Windsurf команды, введённые в их терминал, считаются принадлежащими приложению. Соединение, открывшееся и закрывшееся между двумя секундными измерениями, всё равно учитывается в байтах сеанса, но без узла. Процесс, запустившийся и завершившийся до обработки уведомления ядра о fork, может быть пропущен. Журнал записывается с Kilobat Pro только на этом Mac в ~/Library/Application Support/Kilobat/agent-network-log.json, хранится 30 дней и никуда не отправляется; очистка доступна за последний час, сегодня или полностью.

Когда Защита включена, подключения, которые Kilobat отклонил, тоже видны в сеансе: они помечены как «Заблокировано» со списком или правилом контроля агентов, хотя не передали ни байта.

В терминале kilobat agent-log выводит последний сеанс или, если его запускает агент, сеанс самого агента; --all, --since 2h, --agent claude, --flagged и --json сужают выборку. Чтение бесплатно, а kilobat agent-log --watch записывает в реальном времени в терминале без приложения и без Pro, ничего не сохраняя. Агенты вызывают MCP-инструмент только для чтения agent_network_log, который без аргументов возвращает их собственный сеанс, — так агент может проверить, с чем общалась запущенная им установка.

Очистить историю или забыть сайт

В «Настройки» › «Данные и конфиденциальность» функция Забыть сайт удаляет узел из заблокированных попыток, сетевого журнала агентов, адресов запусков агентов и сеансов поддержания активности, а также памяти уведомлений защиты. Включите поддомены, чтобы удалить и имена вроде www.example.com. Очистка истории сайтов удаляет те же записи за последний час, с полуночи или полностью. У заблокированных попыток и сетевого журнала агентов также есть собственные меню очистки; в контекстном меню строки узла доступен пункт «Забыть». Очистка истории сохраняет правила и настройки защиты. Будущая активность может снова записываться.

В Терминале используйте kilobat history forget example.com --subdomains --json или kilobat history clear --hour (также доступны --today и --all). Команда просит работающее приложение удалить текущие записи или изменяет сохранённую историю, если приложение закрыто. MCP clear_history делает то же самое, только когда вы просите агента стереть историю. Удаление нельзя отменить; результат показывает количество удалённых записей в каждой истории.

Пока приложение на переднем плане

Для чтения или презентаций пункт чашки «Пока приложение на переднем плане» не даёт Mac уснуть, только пока выбранное приложение активно, и снова разрешает сон, как только вы переключились. «Не выключать экран» в меню чашки решает, не гаснет ли и экран, — как и для всего, что Kilobat не даёт уснуть. Kilobat следит за собственными событиями macOS о смене приложений: он не опрашивает систему, не двигает мышь и не имитирует активность, поэтому не может изобразить ваше присутствие для программ мониторинга. Режим заканчивается, когда приложение закрыто, когда вы его выключите или на батарее при 20% (или на пороге, заданном для работы с закрытой крышкой), и никогда не удерживает Mac с закрытой крышкой. У режима своё удержание, поэтому переключение или закрытие приложения не прерывает ни сеанс без сна, ни запуск агента. Из терминала: kilobat awake --while-frontmost Keynote --display.

При питании от сети

Включите «Не засыпать при питании от сети» («Настройки › Без сна и агенты») или «При питании от сети» в меню чашки — и с подключённым адаптером питания Mac не уснёт, пока вы его не отключите, о чём полоса статуса и сообщит: «Без сна при питании от сети». «Не выключать экран» решает, не гаснет ли и экран. Если выключить режим, он останется выключенным до следующего подключения питания, даже если Kilobat перезапустится. Kilobat узнаёт о переключении из собственного уведомления macOS об источнике питания, без опроса. Отключение питания завершает только тот сеанс, который начало подключение: начатый вами сеанс, ожидаемая загрузка, приложение на переднем плане, запуск агента или удержание из терминала продолжаются. Этот режим никогда не держит Mac включённым с закрытой крышкой. Из терминала: kilobat settings awake-on-power on, а для экрана — kilobat settings keep-screen-on on; kilobat conditions --json показывает его как awakeOnPower.

Работа с закрытой крышкой

Если закрыть крышку, Mac уснёт, даже когда Kilobat не даёт ему уснуть, — если только вы не разрешили работу с закрытой крышкой в «Настройки › Без сна и агенты». Для этого устанавливается небольшой помощник, работающий от root; macOS попросит разрешить его в «Системные настройки › Основные › Объекты входа». После этого работающий запуск агента не даст Mac уснуть с закрытой крышкой, как и сеанс без сна, если в меню чашки отмечен пункт «И с закрытой крышкой». Агент, который ждёт вас, удерживает Mac, только если включено «Не засыпать, пока агент ждёт», и не дольше 30 минут.

Закрытый Mac в сумке может перегреться и разрядить батарею, поэтому сам помощник даёт Mac уснуть на заданном пороге заряда (по умолчанию 20%), при перегреве, сразу после отключения от питания, если выбран режим «только от сети», по истечении заданного максимального времени (не больше 8 часов) и через минуту после закрытия Kilobat. Если помощник или Mac перезапустится во время удержания, сначала возвращается прежняя настройка. Kilobat показывает, чем закончилось каждое удержание, например «Mac может уснуть: заряд 20%».

Из терминала kilobat awake --lid-closed просит приложение о таком же удержании и объясняет, если оно невозможно; удержание заканчивается вместе с командой. Агенты используют keep_awake с lid_closed, а описание инструмента велит им сначала согласовать это с вами. kilobat conditions --json сообщает lidClosedAllowed и текущее lidHold.

Навыки для агентов

Девять навыков (Agent Skills) учат агентов для программирования диагностировать сеть Mac и с помощью Kilobat доводить долгие запуски до конца. Они интерпретируют измерения, объясняют, в чём есть неопределённость, и спрашивают, прежде чем менять настройки. Устанавливайте их вместе: навык kilobat направит агента к подходящему.

npx skills add seifip/kilobat-skills
kilobatНачните отсюда. Настройка, правила безопасности и какой навык подходит к вопросу.
mac-network-troubleshootingМедленный или нестабильный интернет с неясной причиной: находит сбойный уровень.
mac-wifi-troubleshootingСлабый или пропадающий Wi-Fi, загруженные каналы, лучшее место для Mac или роутера.
mac-hotspot-data-saverТочки доступа телефона и лимиты трафика: что расходует данные, профиль «Поездка», лимиты.
mac-dns-troubleshootingМедленные DNS-запросы, бенчмарки DNS-серверов, смена DNS, страницы авторизации.
video-call-network-checkРывки в звонках и игровом стриминге: всплески задержки, джиттер, потери, bufferbloat и фоновая отдача.
mac-bandwidth-monitorКакие приложения используют подключение, история использования и куда они подключаются.
mac-app-firewallБлокировка и разрешение приложений, доменов и IP; вопросы о новых приложениях и ответы на них.
mac-agent-runsДолгие запуски агентов: не дать Mac уснуть, проверить условия, подключить хуки агентов, узнать, когда запуск завершился, ждёт вас или застрял.

Установите CLI Kilobat отдельно командой Homebrew выше или подключите его сервер MCP. CLI требует macOS 14 или новее; сборка из исходников через Homebrew требует Xcode 16 или новее. Смотрите навыки на skills.sh или их исходный код и справочные материалы.

Siri и Быстрые команды

Спросите Siri о соединении, и Kilobat ответит по результатам собственных проверок одним-двумя предложениями и карточкой с числами. Назовите приложение в вопросе, как требует Siri: «Почему интернет медленный в Kilobat?» запускает новую проверку и называет причину: «Wi-Fi работает нормально; линия провайдера теряет 4% пакетов с 21:05. Это указано в отчёте для провайдера». Другие вопросы: «Всё ли в порядке с соединением в Kilobat?», «Почему завис звонок в Kilobat?» (отчёт о последнем звонке), «Slack не работает в Kilobat?» (любой сервис со страницей состояния, которую читает Kilobat, или «Мои приложения не работают в Kilobat?» для используемых приложений), «Что использует мой интернет в Kilobat?», «Сколько данных я использовал в Kilobat?», «Готово ли соединение к звонку в Kilobat?», «Есть ли утечка VPN в Kilobat?» и «Проверь скорость с помощью Kilobat». Те же вопросы работают в Spotlight, а каждое действие в «Быстрых командах» передаёт результат следующему шагу: состояние сети с причиной, задержкой и потерями; отчёт о звонке; состояние сервисов; сегодняшний расход данных. Действие «Использовать модель» может передать эти результаты в Apple Intelligence. Без Kilobat Pro Siri сообщает о проблеме и измерениях линии, числе зависаний звонка и сбое сервиса; Pro добавляет причины и способы исправления. На тех же действиях построены готовые команды.