Agents IA et MCP

Le serveur MCP, les hooks d’agents, le journal réseau des agents, les skills pour agents et garder le Mac éveillé.

Les instructions pas à pas pour Claude Code, Codex, Cursor, Gemini CLI, Claude Desktop, Windsurf, Cline, Zed, Hermes Agent, OpenClaw, OpenCode, GitHub Copilot CLI et tout client MCP se trouvent dans Configurer Kilobat dans votre agent IA.

Donnez ce prompt à un agent comme Claude Code, Codex ou 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.

Serveur MCP

kilobat mcp parle le Model Context Protocol via stdio. Ajoutez-le à Claude Code :

claude mcp add kilobat -- kilobat mcp

Ou ajoutez-le à n’importe quel client qui lit une configuration mcpServers :

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

Outils en lecture seule : 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 (chaque hôte contacté par un agent et ses commandes), benchmark_dns, check_url, list_connections, list_devices, trace_route, get_route_history, compare_speed_tests, get_exit_path (demande votre IP publique à Cloudflare uniquement lorsque l’agent passe public_ip), check_vpn_leaks (test de fuite qui interroge des services externes), list_networks, get_fastest_dns (DNS le plus rapide par réseau d’après les tests discrets de l’app), list_rules, list_approvals, list_blocked_connections, explain_verdict (toutes les règles correspondant à un hôte ou une app et celle qui décide), check_host_reputation (présence d’un hôte sur une liste de logiciels malveillants, hameçonnage, escroquerie ou traqueurs, vérifiée sur ce Mac), get_protection_status, run_stutter_test et get_game_ping (envoient uniquement des pings), get_nearby_radios, get_captive_portal (page d’identification Wi-Fi, comme kilobat portal --json), service_status (interroge les pages d’état publiques des services nommés ou des apps en cours) et create_support_report (rapport pour votre fournisseur que l’agent vous remet). Ils renvoient le même JSON que la CLI. run_speedtest consomme des données, run_lan_test transfère des données sur votre réseau pendant cinq secondes et demande d’abord votre accord, et keep_awake et release_awake empêchent la suspension d’activité pendant une durée définie sans modifier les réglages ; keep_awake avec lid_closed garde aussi le Mac actif écran rabattu, après votre autorisation et en vous demandant d’abord. Les outils de modification (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, qui indique aussi à l’agent de ne jamais désactiver Protection pour faire passer sa propre requête, hold_upload, qui met en attente l’envoi d’une autre app, set_dns, qui vide aussi le cache, set_fastest_dns, set_dns_fallback et set_airdrop_visibility, qui ouvre les réglages AirDrop) sont signalés comme tels et leurs descriptions demandent à l’agent de vous interroger d’abord.

Connecter des agents

Sans aide, Kilobat se fie au trafic et au processeur d’un agent : un agent silencieux peut donc avoir terminé ou attendre votre action. Ses hooks indiquent à Kilobat à quel projet appartient une exécution, quand elle attend votre action et quand elle est terminée. Chaque hook lance kilobat agent-event, qui n’affiche rien, rend la main aussitôt et se termine toujours avec 0 : il ne peut donc pas casser l’agent. Si l’app n’est pas ouverte, les événements attendent dans un petit fichier qu’elle lit à son ouverture. Kilobat lit les identifiants de session, les dossiers et de courts textes d’état, jamais les prompts ni les réponses. Fusionnez-les avec les hooks que vous avez déjà.

Claude Code, dans ~/.claude/settings.json. Chaque hook reçoit sur stdin un JSON avec l’identifiant de session et le dossier, que --stdin-json lit. Une demande d’autorisation ou de saisie signifie une attente ; Stop signifie terminé une fois les tâches en arrière-plan finies ; une limite de débit signifie une attente jusqu’à sa réinitialisation.

{
  "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, au plus simple : notify dans ~/.codex/config.toml. Codex passe un argument JSON après chaque tour, que --json-arg lit. Il ne signale que la fin, et Codex n’exécute qu’un seul programme notify.

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

Pour signaler aussi l’attente, utilisez plutôt les hooks Codex dans ~/.codex/hooks.json, et approuvez-les avec /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, dans ~/.gemini/settings.json. Gemini CLI s’exécute en tant que node : Kilobat ne peut donc pas relier son trafic à l’exécution, mais l’état est bien transmis.

{
  "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 et Kanban) : installez le plug-in de Kilobat, qui ajoute un fichier dans le dossier des plug-ins de Cline et ne modifie aucun autre réglage. cline plugin uninstall kilobat le retire.

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

Il signale une exécution en cours, terminée, échouée tant que Cline reste ouvert, annulée, limitée en débit une fois les nouvelles tentatives de Cline épuisées, et en attente quand Cline vous pose une question. Il attend les sous-agents et les coéquipiers avant de déclarer une exécution terminée. Les demandes d’approbation de Cline ne sont pas visibles par les plug-ins : la détection par le trafic et le processeur prend le relais.

Tout autre agent peut appeler kilobat agent-event start|working|waiting|done|failed --agent <name> --session <id> --cwd <folder> depuis ses propres hooks. Ajoutez --verbose pour voir ce qui s’est passé quand vous l’essayez à la main.

Journal réseau des agents

Pendant que Claude Code, Codex, Cursor, Gemini CLI, Aider, Windsurf, Claude Desktop, ChatGPT ou un autre agent tourne, Kilobat enregistre chaque hôte contacté par l’agent et les processus qu’il lance : npm, pip, uv, curl, git, brew, les serveurs MCP, y compris quand un shell s’intercale. Chaque session, du lancement du processus de l’agent jusqu’à ce que lui et tout ce qu’il a lancé se terminent, liste les hôtes par processus qui s’est connecté, du plus gros envoi au plus petit, avec le port et le protocole, la première et la dernière apparition, les octets envoyés et reçus et le nombre de connexions, ainsi que le dossier du projet où l’agent tournait. Tout est dans Historique › Journal réseau des agents, et le menu affiche une ligne pendant qu’un agent tourne, par exemple « Claude Code · 14 hôtes · 2,1 MB envoyés ». Copier en Markdown place le tableau d’une session dans le presse-papiers pour un ticket ou une revue.

Les signalements indiquent ce qui mérite un second regard, jamais que quelque chose ne va pas : première fois (aucun agent de ce Mac n’avait contacté cet hôte ; les registres connus comme registry.npmjs.org, pypi.org et github.com, ainsi que le service de l’agent lui-même, ne sont jamais considérés comme nouveaux), HTTP non chiffré (port 80), gros envoi (plus de 10 MB vers un seul hôte autre que le service de l’agent, pour que Claude Code envoyant son contexte à Anthropic ne soit pas signalé), adresse seule (aucun nom d’hôte connu) et partage ou tunnel (une courte liste de sites de partage de texte, de services de partage de fichiers comme transfer.sh, de tunnels comme ngrok et trycloudflare.com, et de collecteurs de requêtes comme webhook.site). Seulement les signalés n’affiche que ceux-là.

Comment ça marche : Kilobat lit déjà chaque seconde les statistiques réseau de macOS pour chaque connexion (les mêmes que nettop), avec le processus de chaque connexion. Il reconnaît les agents à leur exécutable, au paquet qu’exécute un interpréteur (node …/@openai/codex, python3 -m aider) ou à l’exécutable propre de l’app, et suit l’arbre de processus de chaque agent : le noyau le prévient dès qu’un processus de l’arbre fait un fork, si bien qu’un curl qui ne dure qu’un dixième de seconde est rattaché pendant qu’il tourne, et les processus rattachés à launchd restent ceux de l’agent. L’agent le plus proche l’emporte : Claude Code lancé dans le terminal de Cursor compte donc pour Claude Code. Les noms d’hôte viennent du filtre réseau de Kilobat quand il est activé (le nom demandé par une app), de la résolution, avec le résolveur de votre Mac, des hôtes de développement connus et des hôtes présents dans les URL de curl ou git d’un agent, en comparant les adresses, ou du DNS inverse, signalé parce qu’il donne le nom du serveur et non celui qu’a demandé l’app. Sans rien de tout cela, la ligne affiche l’adresse.

Ce qu’il ne voit pas : trafic effectué par les services macOS pour un processus (les requêtes DNS passent par mDNSResponder, les téléchargements par nsurlsessiond), conteneurs Docker et machines virtuelles (leur trafic passe par le processus propre à Docker ou à la machine virtuelle), et agents dans un éditeur qui s’exécutent dans son hôte d’extensions, comme Cline ou Copilot dans VS Code, impossibles à distinguer de l’éditeur. Dans Cursor et Windsurf, les commandes saisies dans leur terminal comptent comme celles de l’app. Une connexion ouverte et fermée entre deux relevés espacés d’une seconde compte tout de même dans les octets de la session, sans hôte. Un processus démarré et terminé avant le traitement de l’avis fork du noyau peut être manqué. Le journal nécessite Kilobat Pro ; il est enregistré uniquement sur ce Mac dans ~/Library/Application Support/Kilobat/agent-network-log.json, conservé 30 jours et jamais envoyé ailleurs ; Effacer propose la dernière heure, aujourd’hui ou tout l’historique.

Avec la Protection activée, les connexions refusées par Kilobat apparaissent aussi dans la session, marquées Bloqué avec la liste ou la règle du garde-fou des agents, même si elles n’ont transporté aucun octet.

Dans le terminal, kilobat agent-log affiche la dernière session, ou celle de l’agent quand c’est un agent qui la lance ; --all, --since 2h, --agent claude, --flagged et --json l’affinent. La lecture est gratuite, et kilobat agent-log --watch enregistre en direct dans le terminal sans l’app ni Pro, sans rien conserver. Les agents appellent l’outil MCP en lecture seule agent_network_log, qui, sans argument, renvoie leur propre session : un agent peut ainsi vérifier avec quoi a communiqué une installation qu’il a lancée.

Effacer l’historique ou oublier un site

Dans Réglages › Données et confidentialité, Oublier un site supprime un hôte des tentatives bloquées, du journal réseau des agents, des destinations des exécutions d’agents et des sessions éveillées, ainsi que de la mémoire des notifications de Protection. Incluez les sous-domaines pour supprimer aussi des noms comme www.example.com. Effacer l’historique des sites supprime les mêmes enregistrements pour la dernière heure, depuis minuit ou entièrement. Les tentatives bloquées et le journal réseau des agents disposent aussi de leurs propres menus Effacer ; le menu contextuel d’un hôte propose Oublier. L’effacement conserve vos règles et réglages de protection. Les activités futures pourront être enregistrées à nouveau.

Dans Terminal, utilisez kilobat history forget example.com --subdomains --json ou kilobat history clear --hour (--today et --all sont aussi disponibles). La commande demande à l’app d’effacer ses enregistrements actifs lorsqu’elle fonctionne ou modifie les historiques enregistrés lorsqu’elle est fermée. MCP clear_history fait de même, uniquement lorsque vous demandez à l’agent d’effacer l’historique. La suppression est irréversible ; le résultat compte les entrées supprimées de chaque historique.

Tant qu’une app est au premier plan

Pour lire ou présenter, l’option Tant qu’une app est au premier plan de la tasse de thé garde le Mac éveillé seulement tant que l’app choisie est au premier plan, et le laisse se mettre en veille dès que vous passez à une autre. Garder l’écran allumé, dans la tasse de thé, décide si l’écran reste allumé aussi, comme pour tout ce que Kilobat garde éveillé. Kilobat suit les événements de changement d’app de macOS : il n’interroge rien en boucle, ne bouge pas la souris et ne simule aucune activité, il ne peut donc pas vous faire paraître présent aux yeux d’un logiciel de surveillance. L’option s’arrête quand l’app quitte, quand vous la désactivez, ou sur batterie à 20 % (ou au seuil que vous avez fixé pour les exécutions écran rabattu), et elle ne maintient jamais le Mac en marche écran rabattu. Elle a son propre maintien : changer d’app ou quitter l’app ne met donc jamais fin à une session d’éveil ni à une exécution d’agent. Depuis le Terminal : kilobat awake --while-frontmost Keynote --display.

Sur secteur

Activez Rester éveillé sur secteur (Réglages › Éveil et agents), ou Sur secteur dans la tasse de thé, et brancher l’adaptateur secteur garde le Mac éveillé jusqu’à ce que vous le débranchiez, comme l’indique « Éveillé sur secteur » dans le bandeau. Garder l’écran allumé décide si l’écran reste allumé aussi. Désactivez l’option et elle le reste jusqu’au prochain branchement, même si Kilobat redémarre. Kilobat détecte le branchement grâce à la notification de source d’alimentation de macOS, sans interrogation en boucle. Débrancher ne met fin qu’à la session lancée par le branchement : une session que vous avez lancée vous-même, un téléchargement que vous attendez, une app au premier plan, une exécution d’agent ou un maintien depuis le Terminal continuent. Elle ne garde jamais le Mac en marche écran rabattu. Depuis le Terminal : kilobat settings awake-on-power on, et kilobat settings keep-screen-on on pour l’écran ; kilobat conditions --json l’indique sous la forme awakeOnPower.

Fonctionner écran rabattu

Rabattre l’écran met le Mac en veille, même quand Kilobat le garde éveillé, sauf si vous autorisez le fonctionnement écran rabattu dans Réglages › Éveil et agents. Cela installe un petit assistant qui s’exécute en tant que root ; macOS vous demande de l’autoriser dans Réglages Système › Général › Ouverture. Une fois activé, une exécution d’agent en cours garde le Mac en marche écran rabattu, tout comme une session d’éveil quand vous cochez Écran rabattu aussi dans le menu de la tasse de thé. Un agent qui attend votre action ne le maintient que si Rester éveillé quand un agent attend est activé, et 30 minutes au maximum.

Un Mac fermé dans un sac peut surchauffer et vider sa batterie : l’assistant lui-même laisse donc le Mac se mettre en veille au seuil de batterie choisi (20 % par défaut), quand le Mac chauffe, dès qu’il est débranché si vous avez choisi « sur secteur uniquement », après la durée maximale que vous avez fixée (8 heures au plus), et une minute après que Kilobat a quitté. Si l’assistant ou le Mac redémarre pendant un maintien, il rétablit d’abord le réglage. Kilobat indique comment chaque maintien s’est terminé, par exemple « Mac mis en veille : batterie à 20 % ».

Depuis le Terminal, kilobat awake --lid-closed demande le même maintien à l’app et explique pourquoi quand c’est impossible ; le maintien se termine avec la commande. Les agents utilisent keep_awake avec lid_closed, dont la description leur demande de vous consulter d’abord. kilobat conditions --json indique lidClosedAllowed et la valeur actuelle de lidHold.

Skills pour agents

Neuf Agent Skills apprennent aux agents de code à dépanner le réseau d’un Mac et à mener de longues exécutions à bien avec Kilobat. Ils interprètent ses mesures, expliquent ce qui reste incertain et demandent avant de modifier un réglage. Installez-les ensemble ; le skill kilobat oriente l’agent vers celui qui convient.

npx skills add seifip/kilobat-skills
kilobatCommencez ici. Installation, règles de sécurité et skill adapté à la question.
mac-network-troubleshootingInternet lent ou instable sans cause évidente : trouve la couche défaillante.
mac-wifi-troubleshootingWi-Fi faible ou qui décroche, canaux encombrés, meilleur emplacement pour le Mac ou le routeur.
mac-hotspot-data-saverPartage de connexion et forfaits limités : ce qui consomme des données, profil Voyage, forfaits.
mac-dns-troubleshootingRésolutions lentes, benchmarks de résolveurs, changement de DNS, portails captifs.
video-call-network-checkAppels et streaming de jeux saccadés : pics de latence, gigue, perte, bufferbloat et envois en arrière-plan.
mac-bandwidth-monitorQuelles apps utilisent la connexion, historique d’utilisation et destinations.
mac-app-firewallBloquer ou autoriser apps, domaines et IP ; demander pour les nouvelles apps et répondre.
mac-agent-runsLongues exécutions d’agents : garder le Mac éveillé, vérifier les conditions, connecter les hooks d’agents, savoir quand une exécution est terminée, attend votre action ou est bloquée.

Installez la CLI Kilobat séparément avec la commande Homebrew ci-dessus, ou connectez son serveur MCP. La CLI nécessite macOS 14 ou une version ultérieure ; la compilation depuis les sources avec Homebrew nécessite Xcode 16 ou une version ultérieure. Consultez les skills sur skills.sh ou lisez leur source et leurs références.

Siri et Raccourcis

Interrogez Siri sur votre connexion et Kilobat répond à partir de ses propres vérifications, en une ou deux phrases accompagnées d’une fiche de chiffres. Comme Siri l’exige, prononcez le nom de l’app dans la question : « Pourquoi ma connexion Internet est-elle lente dans Kilobat ? » lance une nouvelle vérification et indique la cause : « Votre Wi-Fi va bien ; la ligne de votre fournisseur perd 4% des paquets depuis 21 h 05. C’est indiqué dans votre rapport pour le fournisseur. » Vous pouvez aussi demander : « Ma connexion fonctionne-t-elle bien dans Kilobat ? », « Pourquoi mon appel s’est-il figé dans Kilobat ? » (dernier rapport d’appel), « Slack est-il en panne dans Kilobat ? » (tout service dont Kilobat lit la page d’état, ou « Mes apps sont-elles en panne dans Kilobat ? » pour celles que vous utilisez), « Qu’est-ce qui utilise ma connexion Internet dans Kilobat ? », « Combien de données ai-je utilisées dans Kilobat ? », « Suis-je prêt pour mon appel dans Kilobat ? », « Mon VPN présente-t-il des fuites dans Kilobat ? » et « Lancer un test de débit avec Kilobat ». Les mêmes questions fonctionnent dans Spotlight et chacune correspond à une action de l’app Raccourcis qui transmet sa réponse à l’étape suivante : état et santé du réseau, cause, latence et pertes ; rapport d’appel ; services et éventuelles pannes signalées ; volume de données du jour. L’action Utiliser le modèle de Raccourcis peut transmettre ces résultats à Apple Intelligence. Sans Kilobat Pro, Siri indique le problème et les mesures de la ligne, le nombre de blocages d’un appel et si un service est en panne ; Pro ajoute les causes et les solutions. Les raccourcis prêts à l’emploi utilisent les mêmes actions.