---
title: "CLI réseau pour Mac, MCP et skills pour agents | Documentation Kilobat"
url: "https://kilobat.app/fr/docs.html"
description: "Installez Kilobat pour macOS. Découvrez la CLI de diagnostic réseau, le serveur MCP et les skills pour agents IA : Wi-Fi, DNS, latence et bande passante."
---

# Documentation Kilobat

Tout ce qu’il faut pour utiliser Kilobat depuis la barre des menus, le Terminal ou un agent IA.

## Installation

La CLI est gratuite et open source. Installez-la avec Homebrew :

```
brew install seifip/kilobat/kilobat
```

Cela installe `kilobat` et `kb`, un alias plus court. Tous les exemples ci-dessous fonctionnent avec l’un ou l’autre.

Ou téléchargez l’app Mac, qui inclut aussi la CLI dans `Kilobat.app/Contents/Helpers/kilobat`.

[Télécharger pour Mac ↓](https://kilobat.app/downloads/Kilobat-1.5.0.dmg) [Télécharger la CLI gratuite ↓](https://kilobat.app/downloads/kilobat-cli-1.5.0-universal.tar.gz)

### Kilobat Lite sur le Mac App Store

Kilobat Lite est une édition gratuite pour le Mac App Store, bientôt disponible. Elle s’exécute dans l’App Sandbox d’Apple et garde ce qui y fonctionne : les contrôles d’état, le test de débit, le radar Wi-Fi et les réseaux à proximité, « Pourquoi ça ne se connecte pas ? » et Garder éveillé. Le trafic par app, les règles et le filtre réseau, les changements de DNS, l’assistant écran rabattu et la CLI demandent des autorisations que la sandbox ne permet pas : ils ne sont donc que dans l’app Kilobat de ce site. Les deux s’installent côte à côte.

Activez la complétion par tabulation pour votre shell :

```
# zsh
echo 'source <(kilobat completion zsh)' >> ~/.zshrc
# fish
kilobat completion fish > ~/.config/fish/completions/kilobat.fish
```

## Démarrage rapide

Lancez `kilobat` seul pour un menu interactif : flèches ou j/k pour se déplacer, Entrée pour ouvrir, un chiffre pour sauter directement, q pour quitter.

```
kilobat status --watch     # live traffic by app; q quit, s sort, f filter, / search
kilobat diagnose           # what is slowing your connection
kilobat speedtest          # speed and latency under load
kilobat profile travel     # switch to the Travel profile
kilobat block com.example.App
```

Lancez `kilobat <command> --help` pour obtenir l’aide de n’importe quelle commande.

## Commandes

### Surveiller

|  |  |
|---|---|
| `kilobat status [--watch] [--json]` | Trafic en direct par app et forfait de la session ; un instantané JSON, ou un flux JSON Lines avec --watch |
| `kilobat report [--csv\|--json] [--summary] [--days 1…365]` | Historique d’utilisation enregistré localement, ou totaux quotidiens et apps les plus actives ; le CSV contient une ligne par app |
| `kilobat report compare --total 40GB [--unit GB\|GiB] [--direction both\|download\|upload] (--from DATE --to DATE \| --period last-month) [--network NAME] [--json\|--csv]` | Le chiffre d’un routeur ou d’un opérateur à côté de ce que Kilobat a enregistré sur ce Mac pour la même période, dans la même unité, avec les heures enregistrées, chaque lacune et les raisons probables d’un écart |
| `kilobat health-history [--hours 1…720] [--json]` | Vérifications du routeur, d’Internet, de la gigue et du DNS enregistrées par l’app au fil du temps |
| `kilobat proxy [routes [--app name] \| test] [--json]` | Apps proxy, proxy système et leurs problèmes ; quelle règle et quel nœud chaque app a empruntés ; à quelle vitesse répond chaque nœud |
| `kilobat vpn [--json]` | Le VPN, et si le DNS ou l’IPv6 le contournent |
| `kilobat calls [--limit 1…200] [--json]` | Après chaque appel : combien de fois il s’est bloqué et pourquoi, d’après les rapports de l’app |
| `kilobat overlay [--port 7171] [--target internet\|router\|host]` | Un overlay de ping en direct pour OBS et les autres apps de streaming, servi sur localhost jusqu’à Ctrl-C |
| `kilobat support-report [--hours 1…168] [--host h] [--markdown\|--html] [--output f]` | Un rapport pour votre fournisseur d’accès ou votre support informatique : constats, latence, coupures et tests de débit, sans le nom de votre réseau ni les adresses locales |
| `kilobat networks [forget <name>]` | Réseaux rencontrés, avec le profil, le forfait et le coût des données mémorisés pour chacun |
| `kilobat networks cost <metered\|unmetered\|automatic> [name]` | Traiter ce réseau, ou celui nommé, comme limité ou illimité, ou suivre de nouveau macOS |
| `kilobat bandwidth [app] [hour\|day\|week\|month] [--back N] [--json]` | Octets envoyés et reçus par une app sur une heure, un jour, une semaine ou un mois, avec le pic ; --back remonte aux périodes précédentes |
| `kilobat access-policy <bundle-id> [--json]` | Les connexions que le développeur d’une app déclare dans son Internet Access Policy, et pourquoi |

### Diagnostiquer

|  |  |
|---|---|
| `kilobat diagnose [--json]` | Vérifications du Wi-Fi, du routeur, d’Internet, du DNS et des portails captifs, avec conseils |
| `kilobat radar [--watch] [--json]` | Score du signal et recherche du meilleur emplacement |
| `kilobat scan [--json]` | Réseaux voisins, canaux et largeurs |
| `kilobat channels [--json]` | Encombrement par canal et canal le moins chargé |
| `kilobat speedtest [--json] [--budget-mb 1…80] [--parallel]` | Débit Cloudflare, latence sous charge et verdicts pour les appels et le streaming, 80 MB au maximum. Une connexion par défaut ; --parallel en ouvre quatre, comme la plupart des sites de test de débit |
| `kilobat speed-compare [<test> <test>] [--json]` | Ce qui a changé entre deux tests de débit enregistrés : réseau, heure, serveur, connexions, bande Wi-Fi et signal, VPN, autre trafic |
| `kilobat ip [--public] [--json]` | Par où sort le trafic : l’interface et l’éventuel VPN, lus sur ce Mac ; --public demande aussi à Cloudflare votre IP publique et son pays d’enregistrement |
| `kilobat stutter [--seconds 10…60] [--target router\|internet\|<host>] [--json]` | Un ping toutes les 50 ms pour repérer les brefs pics de latence que les tests de débit ratent, quand ils surviennent et s’ils se répètent |
| `kilobat airdrop [status\|everyone\|contacts\|off] [--json]` | Visibilité AirDrop, le lien AirDrop (AWDL) et ce qui l’utilise ; changer la visibilité ouvre les Réglages Système |
| `kilobat bluetooth [--json]` | Appareils Bluetooth et s’ils partagent la bande 2,4 GHz avec votre Wi-Fi |
| `kilobat dns [automatic\|cloudflare\|google\|quad9\|flush]` | Lire ou définir le DNS, ou vider le cache |

### Wi-Fi

|  |  |
|---|---|
| `kilobat wifi [status]` | Réseau actuel, signal, canal et débit du lien |
| `kilobat wifi on\|off\|restart\|disconnect` | Contrôler l’alimentation Wi-Fi et la connexion |
| `kilobat wifi join <name> [--password-stdin]` | Rejoindre un réseau enregistré ou un nouveau réseau |
| `kilobat wifi known` | Réseaux enregistrés par ordre de préférence |
| `kilobat wifi password\|share <name>` | Afficher un mot de passe enregistré, ou un QR code à scanner avec un téléphone |
| `kilobat low-latency on [--for 15m\|1h\|2h] [--until-quit <app>]` | Mettre en pause AirDrop et AWDL pendant les appels et les jeux : 15 minutes par défaut, jusqu’à 4 heures, ou jusqu’à ce qu’une app quitte |
| `kilobat low-latency off` | Rétablir AirDrop et AWDL, y compris après une pause lancée dans l’app |

### Éveil et agents

|  |  |
|---|---|
| `kilobat awake [--display]` | Garder le Mac éveillé jusqu’à Ctrl-C ; rabattre l’écran le met tout de même en veille, sauf si vous ajoutez --lid-closed |
| `kilobat awake --lid-closed [--for 2h\|--until-quiet\|-- <command>]` | Continuer aussi écran rabattu, 8 heures au maximum, grâce à l’assistant d’alimentation de l’app ; nécessite Autoriser le fonctionnement écran rabattu dans les Réglages |
| `kilobat awake --for 90m\|2h\|45s` | Rester éveillé un moment |
| `kilobat awake --until-quiet [--app <id>] [--quiet 1…60]` | Rester éveillé jusqu’à ce que les téléchargements ou une app deviennent silencieux, sous 16 KB/s pendant 3 minutes par défaut |
| `kilobat awake -- <command> [args]` | Rester éveillé pendant l’exécution d’une commande, puis indiquer les données échangées par ses processus et se terminer avec son code de sortie |
| `kilobat awake --while-frontmost <app> [--display] [--for 2h]` | Rester éveillé seulement tant que cette app est au premier plan, pour lire ou présenter. Passer à une autre app laisse le Mac se mettre en veille ; s’arrête quand l’app quitte, à 20 % de batterie ou après --for. --display garde aussi l’écran allumé |
| `kilobat settings awake-on-power on\|off` | L’app reste éveillée dès que l’adaptateur secteur est branché et laisse le Mac se remettre en veille quand il est débranché |
| `kilobat settings keep-screen-on on\|off` | Garder aussi l’écran allumé pour tout ce que l’app garde éveillé : minuteurs, téléchargements, agents, app au premier plan et secteur |
| `kilobat sessions [--days N] [--json]` | Sessions d’éveil et exécutions d’agents IA enregistrées par l’app, avec les données consommées et les changements de réseau |
| `kilobat agent-event <start\|working\|waiting\|done\|failed> [--agent name] [--stdin-json\|--json-arg]` | Pour les hooks d’un agent : indique à l’app qu’une exécution a commencé, attend votre action ou est terminée. Silencieux, se termine toujours avec 0 |
| `kilobat why <url\|host> [--app <id>] [--proxy <url>] [--context container\|vm\|remote\|provider] [--failed-at <time>] [--json]` | Trouver la couche qui bloque une connexion : réseau et interface, proxy et proxy propre à l’app, DNS, règles Kilobat, IPv4 et IPv6, TLS, le serveur et chaque redirection. Demande l’URL exacte ; la sortie masque les valeurs de la requête |
| `kilobat conditions [--json]` | Réseau limité, Mode Faibles données, VPN, latence, batterie et chaleur, possibilité de rabattre l’écran, avec des conseils pour les longues exécutions |

### Contrôler

|  |  |
|---|---|
| `kilobat profile [travel\|work\|unrestricted]` | Lister ou choisir un profil |
| `kilobat allow\|block <bundle-id> [--minutes 1…1440] [--profile name]` | Enregistrer une règle d’app, éventuellement temporaire ou pour un autre profil |
| `kilobat reset <bundle-id> [--profile name]` | Supprimer la règle d’une app pour qu’elle suive le comportement par défaut |
| `kilobat rules [--profile name] [--json]` | Les règles d’un profil |
| `kilobat limit [GB] [--cycle session\|daily\|weekly\|monthly] [--reset-day N] [--alert 50,80,100]` | Lire ou définir le forfait de données de ce réseau, quand il repart à zéro et quand il envoie une notification |
| `kilobat quota <bundle-id> <GB> [--upload] [--all-networks]` | Limiter les données d’une app par cycle de forfait ; quota <bundle-id> --remove retire la limite |
| `kilobat quota --list [--json]` | Quotas des apps, avec ce que chacune a consommé pendant ce cycle |
| `kilobat updaters [--json]` | Outils de mise à jour en pause sur les réseaux limités, les octets de mise à jour passés malgré tout sur ce réseau, et les apps qui se mettent à jour d’elles-mêmes |
| `kilobat updaters on\|off` | Mettre en pause les assistants de mise à jour comme Google Updater et la mise à jour de logiciels de macOS tant que le réseau est limité (activé par défaut) ; les apps continuent de fonctionner |
| `kilobat settings [name [value] ]` | Lire ou modifier des réglages comme new-apps (allow, ask ou block), apple-software, auto-travel, pause-updaters, awake-on-power, public-ip (désactivé par défaut), speed-streams, alerts et menu-bar |
| `kilobat approvals [--json]` | Apps en attente d’approbation quand les nouvelles apps sont soumises à confirmation, avec leur signataire et leurs destinations |
| `kilobat approve\|deny <app-id> [--minutes 1…1440]` | Bloquer immédiatement une app en attente, ou demander à l’utilisateur de confirmer son autorisation dans Kilobat |
| `kilobat block-host\|unblock-host <domain\|IP\|CIDR> [--app <id>]` | Bloquer un domaine (sous-domaines compris, *.example.com accepté), une IP ou une plage pour toutes les apps, ou pour une seule |
| `kilobat quit <PID> [--force]` | Quitter un processus |

### Configuration

|  |  |
|---|---|
| `kilobat open` | Ouvrir l’app Mac |
| `kilobat doctor` | Vérifier l’app, le filtre réseau et la surveillance |
| `kilobat completion [zsh\|bash\|fish]` | Afficher un script de complétion pour le shell |
| `kilobat mcp` | Lancer le serveur MCP pour les agents IA via stdio |
| `kilobat update` | Mettre à jour une installation Homebrew |

### Avancé

|  |  |
|---|---|
| `kilobat destinations [--pid PID] [--json]` | Sockets observés par processus |
| `kilobat devices [--bonjour] [--json]` | Appareils de votre réseau et services Bonjour |
| `kilobat devices name <MAC> <name>` | Nommer un appareil |
| `kilobat trace <host> [--rounds 2…10] [--json]` | Sondage de route limité à 12 sauts ; --rounds trace plusieurs fois et affiche la perte et le délai de chaque saut |
| `kilobat route-history --host <host> [--json]` | Chaque trace enregistrée vers un hôte, saut par saut comme mtr : perte, meilleur, moyenne, pire, changements de route et point où le délai commence |
| `kilobat http-check <URL> [--json]` | Temps DNS, de connexion, TLS et du premier octet |
| `kilobat dns-benchmark` | Temps de réponse des résolveurs |
| `kilobat lan-test <server> [--reverse] [--json]` | Test iperf3 de cinq secondes vers un appareil qui exécute iperf3 -s ; nécessite iperf3, que Kilobat n’installe jamais |
| `kilobat interfaces [--json]` | Compteurs physiques et VPN, séparément |
| `kilobat capture <interface> <file.pcap>` | Capture de paquets limitée |
| `kilobat connection-rule allow\|block <app> <host> [port]` | Enregistrer une règle de destination |
| `kilobat blocklist status\|import <path>\|clear` | Gérer une liste de blocage de domaines |
| `kilobat wake <MAC-address>` | Envoyer un paquet Wake-on-LAN |
| `kilobat spots [save <name>\|remove <id>]` | Emplacements Wi-Fi enregistrés |
| `kilobat outages / speed-history [--days N]` | Coupures et tests de débit enregistrés, au format JSON |

## Scripts et JSON

La sortie passe automatiquement en JSON dans un pipe, pour que les scripts n’aient jamais à analyser la présentation destinée aux humains. Passez `--json` pour être explicite.

```
kilobat diagnose | jq .health            # "good", "degraded", "poor" or "unknown"
kilobat status --watch --json             # one JSON object per line, every second
kilobat report --summary --days 7 --json  # daily totals and top apps
kilobat report compare --total 40GB --period last-month --csv  # beside your provider's figure
```

Définissez `NO_COLOR` pour désactiver les couleurs. Les changements de DNS nécessitent l’approbation d’un administrateur.

## Agents IA et MCP

La configuration pas à pas pour [Claude Code](https://kilobat.app/agents/claude-code.html), [Codex](https://kilobat.app/agents/codex.html), [Cursor](https://kilobat.app/agents/cursor.html), [Gemini CLI](https://kilobat.app/agents/gemini-cli.html), [Claude Desktop](https://kilobat.app/agents/claude-desktop.html), [Windsurf](https://kilobat.app/agents/windsurf.html), [Cline](https://kilobat.app/agents/cline.html), [Zed](https://kilobat.app/agents/zed.html) et [tout client MCP](https://kilobat.app/agents/mcp-client.html) se trouve dans [Configurer Kilobat dans votre agent IA](https://kilobat.app/agents/index.html).

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_wifi`, `scan_wifi`, `suggest_wifi_channel`, `get_usage_report`, `compare_usage`, `get_app_bandwidth`, `get_access_policy`, `get_network_history`, `list_sessions`, `benchmark_dns`, `check_url`, `list_connections`, `list_devices`, `trace_route`, `get_route_history`, `compare_speed_tests`, `get_exit_path` (qui ne demande votre IP publique à Cloudflare que si l’agent passe `public_ip`), `list_networks`, `list_rules`, `list_approvals`, `list_blocked_connections`, `run_stutter_test` (qui n’envoie que des pings), `get_nearby_radios` et `create_support_report` (le rapport pour votre fournisseur d’accès, que l’agent vous transmet). Ils renvoient le même JSON que la CLI. `run_speedtest` consomme des données, `run_lan_test` fait transiter des données sur votre propre réseau pendant cinq secondes et demande d’abord, et `keep_awake` et `release_awake` empêchent la suspension d’activité pour inactivité pendant une durée définie sans modifier les réglages ; `keep_awake` avec `lid_closed` garde aussi le Mac en marche écran rabattu, si vous l’avez autorisé, et vous le demande d’abord. Les outils de modification (`set_profile`, `set_app_rule`, `set_new_app_mode`, `decide_approval`, `block_destination`, `set_budget`, `set_app_quota`, `set_network_cost`, `set_updater_pause`, `set_dns`, qui vide aussi le cache, et `set_airdrop_visibility`, qui ouvre les réglages AirDrop) sont marqués comme tels, et leur description demande à l’agent de vous consulter d’abord.

### Quand quelque chose ne se connecte pas

`kilobat why <host>` (MCP : `diagnose_connection`) vérifie un hôte couche par couche depuis ce Mac, sans lancer `curl` ni `nc`, pour qu’un profil strict ne puisse pas bloquer la vérification elle-même. Il essaie IPv4 et IPv6 séparément : un réseau dont l’IPv6 est cassé, cause fréquente d’agents qui se figent ou se reconnectent sans cesse, obtient une réponse claire. Il indique l’interface utilisée, comme le Wi-Fi, le partage de connexion d’un téléphone ou un VPN, et les essaie toutes quand il y en a plusieurs. Il signale le proxy que choisit le système ou son fichier PAC et, avec `--app`, la variable `HTTPS_PROXY` de l’environnement de cette app, sans les mots de passe. Avec un VPN ou un proxy actif, il compare le chemin direct au tunnel. Pour un nom privé envoyé au résolveur propre d’un VPN, il précise lequel et s’il répond. Du code dans un conteneur, une VM ou une machine distante a son propre réseau : passez `--context` et le rapport se termine par une commande à lancer là-bas. Quand un service hébergé envoie la requête depuis ses propres serveurs, comme Warp pour un endpoint d’inférence personnalisé, `--context provider` indique quand la cible est privée (`localhost`, une adresse LAN ou Tailscale) et donc hors de leur portée, même si elle fonctionne depuis le Mac.

Donnez-lui l’URL exacte qui échoue, requête comprise : il interroge cette URL, mais toutes les sorties affichent les valeurs de la requête sous la forme `[redacted]`, pour qu’un lien de téléchargement signé reste privé. Il envoie la requête comme le ferait l’app : via la variable `HTTPS_PROXY` de l’app, le proxy système ou, avec `--proxy <url>`, une adresse de proxy que l’app définit dans ses propres réglages. Quand ce proxy fonctionne et que les connexions directes échouent, comme sur beaucoup de réseaux d’entreprise, il le dit au lieu d’échouer ; quand les connexions directes fonctionnent et que la requête via le proxy de l’app échoue, il indique que le réseau va bien et que c’est le chemin de l’app qui pose problème. Un réglage qu’il ne peut ni lire ni emprunter, comme l’option de proxy Hugging Face de LM Studio pour les téléchargements depuis huggingface.co, a sa propre note citant ce que les utilisateurs ont signalé, et le verdict dit alors que le réseau atteint l’hôte, pas que la requête de l’app fonctionne. Kilobat ne modifie jamais les réglages d’une autre app. Un serveur qui refuse HEAD reçoit un seul GET pour un octet, jamais un téléchargement. Il suit jusqu’à cinq redirections, désigne le saut qui échoue et vérifie IPv4 et IPv6 pour l’hôte où aboutissent les redirections. Avec `--app`, il liste les connexions ouvertes de l’app vers cet hôte ou son proxy, signale quand elles utilisent une autre version d’IP ou un autre serveur que la nouvelle vérification, et regarde de nouveau quelques secondes plus tard : un transfert devenu silencieux est signalé comme silencieux, jamais comme terminé. Le rapport consigne le nom et la version de l’app, la méthode envoyée, le chemin emprunté et, avec `--failed-at`, le moment où l’app a échoué à côté de celui de la vérification. Une vérification réussie signifie que cette requête fonctionne maintenant depuis ce Mac par ce chemin ; elle ne peut pas voir comment se porte un transfert déjà en cours, alors surveillez-le avec `kilobat bandwidth <app>`.

### 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.

### Pourquoi les tests de débit ne concordent pas

Le test de débit de Kilobat ouvre une seule connexion HTTPS à la fois vers le centre de données Cloudflare le plus proche, 8 secondes dans chaque sens et 80 MB au maximum, et envoie des pings à 1.1.1.1 avant et pendant les transferts. Speedtest by Ookla, fast.com et `networkQuality` de macOS ouvrent plusieurs connexions à la fois et choisissent leurs propres serveurs : sur les liens rapides ou lointains, ils affichent donc généralement davantage. Choisissez *4 connexions* à côté du bouton de test dans l’onglet Débit, ou lancez `kilobat speedtest --parallel`, pour voir l’effet sur votre connexion. Chaque test enregistré conserve le centre de données Cloudflare, le nombre de connexions, le lien (bande Wi-Fi, canal, signal et débit du lien, ou Ethernet), le VPN emprunté et la quantité d’autre trafic échangée par ce Mac pendant ce temps. Historique › Comparaison des tests de débit, `kilobat speed-compare` et l’outil MCP `compare_speed_tests` mettent deux tests côte à côte et listent ce qui a changé, chaque différence accompagnée d’une note sur son effet sur le résultat. Ils listent des différences, pas des causes : d’autres appareils de votre réseau sont aussi en concurrence, et Kilobat ne peut pas les voir.

### VPN et IP publique

État › Sortie du trafic, le menu Wi-Fi et `kilobat ip` montrent l’interface qu’utilise la route par défaut et s’il s’agit d’un VPN, d’après les routes de ce Mac et les VPN que macOS indique comme connectés. Un VPN connecté alors que la route par défaut reste sur le Wi-Fi, comme Tailscale sans nœud de sortie, apparaît comme Partiel : seules certaines destinations passent par lui. Activez Réglages › Réseau › Rechercher l’IP publique pour voir aussi l’adresse que voient les sites web, demandée à Cloudflare à chaque changement de réseau et toutes les 30 minutes, avec le pays où elle est enregistrée d’après les données DB-IP fournies avec Kilobat. L’option est désactivée par défaut, car Cloudflare voit cette requête ; `kilobat ip --public` la fait une seule fois. Le pays d’enregistrement n’est pas l’endroit où vous ou un serveur vous trouvez, et ni lui ni un VPN ne prouvent qu’une connexion est privée ou anonyme. Réglages › Barre des menus › VPN ajoute Activé, Partiel ou Désactivé (avec le code pays si la recherche est activée) à côté de la chauve-souris, et l’Historique indique quand un VPN a été activé ou désactivé et quand l’IP publique a changé.

### Historique des routes

Outils › DNS et LAN › Tracer 3 fois, ou `kilobat trace <host> --rounds 3`, trace une route trois fois avec trois sondes par saut et enregistre chaque trace. Historique › Routes enregistrées combine toutes les traces enregistrées vers un hôte, saut par saut, comme mtr : perte, délai meilleur, moyen, pire et dernier, quels sauts ont changé de routeur et où commence un retard durable. Un saut qui ignore des réponses alors que les sauts suivants répondent est un routeur qui limite les sondes, pas une perte. Pour le réseau local seul, `kilobat lan-test <device>` lance cinq secondes d’iperf3 vers un appareil qui exécute `iperf3 -s` ; installez iperf3 vous-même, Kilobat n’installe jamais rien.

### 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
```

|  |  |
|---|---|
| [kilobat](https://github.com/seifip/kilobat-skills/tree/main/skills/kilobat) | Commencez ici. Installation, règles de sécurité et skill adapté à la question. |
| [mac-network-troubleshooting](https://github.com/seifip/kilobat-skills/tree/main/skills/mac-network-troubleshooting) | Internet lent ou instable sans cause évidente : trouve la couche défaillante. |
| [mac-wifi-troubleshooting](https://github.com/seifip/kilobat-skills/tree/main/skills/mac-wifi-troubleshooting) | Wi-Fi faible ou qui décroche, canaux encombrés, meilleur emplacement pour le Mac ou le routeur. |
| [mac-hotspot-data-saver](https://github.com/seifip/kilobat-skills/tree/main/skills/mac-hotspot-data-saver) | Partage de connexion et forfaits limités : ce qui consomme des données, profil Voyage, forfaits. |
| [mac-dns-troubleshooting](https://github.com/seifip/kilobat-skills/tree/main/skills/mac-dns-troubleshooting) | Résolutions lentes, benchmarks de résolveurs, changement de DNS, portails captifs. |
| [video-call-network-check](https://github.com/seifip/kilobat-skills/tree/main/skills/video-call-network-check) | Appels et streaming de jeux saccadés : pics de latence, gigue, perte, bufferbloat et envois en arrière-plan. |
| [mac-bandwidth-monitor](https://github.com/seifip/kilobat-skills/tree/main/skills/mac-bandwidth-monitor) | Quelles apps utilisent la connexion, historique d’utilisation et destinations. |
| [mac-app-firewall](https://github.com/seifip/kilobat-skills/tree/main/skills/mac-app-firewall) | Bloquer ou autoriser apps, domaines et IP ; demander pour les nouvelles apps et répondre. |
| [mac-agent-runs](https://github.com/seifip/kilobat-skills/tree/main/skills/mac-agent-runs) | Longues 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](https://skills.sh/seifip/kilobat-skills) ou [lisez leur source et leurs références](https://github.com/seifip/kilobat-skills).

## L’app Mac

1. Téléchargez l’image disque, faites glisser Kilobat dans Applications et ouvrez-le depuis ce dossier.
2. Le trafic en direct, le sélecteur Wi-Fi, les tests de débit, Garder éveillé et « Pourquoi ça ne se connecte pas ? » sont gratuits, tout comme l’ensemble de la CLI. Pro ajoute les règles et Demander, les forfaits, l’état du Wi-Fi, la carte des connexions, le radar et l’historique dans l’app. Pour débloquer Pro, commencez l’essai de 7 jours ou collez votre licence dans les Réglages.
3. Choisissez les éléments de la barre des menus dans les Réglages. Maintenez la touche Commande enfoncée en faisant glisser un élément de la barre des menus pour le déplacer.

Autorisez l’accès à la localisation quand il vous est demandé, pour que Kilobat puisse afficher les noms des réseaux Wi-Fi et analyser les réseaux voisins. Votre position n’est envoyée nulle part.

### Bande passante par app

La ligne de chaque app affiche sa dernière minute de trafic, l’envoi au-dessus de la ligne et la réception en dessous. Cliquez dessus pour voir l’écho de l’app : une phrase sur ce qu’elle a échangé, puis une forme d’onde des cinq dernières minutes en direct et, avec Pro, son historique par heure, jour, semaine ou mois. Des repères indiquent quand le Mac a rejoint un autre réseau ou quand une exécution d’agent a utilisé l’app, et des vignettes montrent quels réseaux ont transporté le trafic, la comparaison avec les quatre périodes précédentes de l’app et sa part de l’ensemble du trafic. Sous le graphique se trouvent les connexions ouvertes de l’app, avec les données échangées par chacune et son pays, ainsi que les connexions que le développeur de l’app déclare dans une Internet Access Policy, s’il en fournit une.

### Comparer avec votre routeur ou votre opérateur

Quand votre routeur, votre FAI ou votre opérateur mobile affiche un total différent de celui de Kilobat, ouvrez Historique › Comparer avec votre routeur ou opérateur, ou lancez `kilobat report compare`. Saisissez le chiffre tel qu’ils l’affichent, son unité et s’il compte la réception, l’envoi ou les deux, puis la même période et le réseau concerné. Kilobat affiche son propre total dans la même unité et l’écart, et lit aussi le chiffre dans l’autre système d’unités, car de nombreux opérateurs écrivent GB pour 1 073 741 824 octets (GiB) plutôt que 1 000 000 000.

Une frise montre les heures réellement enregistrées par Kilobat et ses lacunes : le temps où le Mac était en veille (enregistré depuis Kilobat 1.3), éteint ou hors ligne ou où Kilobat ne tournait pas, le temps passé sur d’autres réseaux, et le temps antérieur au début de son historique. En dessous figurent les raisons probables de l’écart, de la plus probable à la moins probable. Kilobat ne voit que ce Mac, pas les téléphones, téléviseurs et autres ordinateurs qu’un routeur ou un opérateur comptabilise. Il exclut le trafic du réseau local et d’AirDrop, qui n’atteint jamais Internet, et compte comme non attribués les en-têtes de paquets qu’aucune app ne comptabilise. Les opérateurs peuvent compter les jours dans un autre fuseau horaire ou publier la consommation en retard. Kilobat ne dit pas quel chiffre est le bon. Exportez la comparaison en CSV ou en JSON, avec la période, les réseaux, les heures enregistrées et chaque lacune, pour la transmettre à votre opérateur.

### Test de saccades

Les appels, le streaming de jeux et les bureaux à distance peuvent saccader alors que le débit et la perte semblent corrects, car un pic de ping de quelques centaines de millisecondes disparaît dans une moyenne. Le test de saccades, dans État, envoie un ping à votre routeur (ou à Internet) toutes les 50 ms pendant 20 secondes et trace chaque réponse, les pics en rose, avec la médiane, le p95, le p99 et le pire ping. Il vous dit si les pics se répètent à intervalle régulier, ce qui désigne souvent les analyses AirDrop/AWDL, ou s’ils arrivent au hasard, ce qui évoque un réseau chargé, des interférences ou un signal faible. Beaucoup de routeurs ne répondent qu’à une dizaine de pings par seconde ; Kilobat reconnaît ce schéma et ne le compte pas comme une perte. Avec Pro, *Comparer avec la faible latence activée* relance le test avec AirDrop/AWDL en pause et indique si cela a aidé.

La pause faible latence désactive AirDrop, Sidecar et Contrôle universel pendant 15 minutes, 1 ou 2 heures, ou jusqu’à ce qu’une app comme votre jeu ou votre appel quitte, 4 heures au maximum. Tout est toujours rétabli à la fin du délai, quand l’app quitte, quand Kilobat quitte ou quand le réseau change, et au lancement suivant si le Mac a planté. macOS demande l’approbation d’un administrateur. Le panneau À proximité d’État indique aussi si la radio d’AirDrop est active et ce qui l’utilise, votre visibilité AirDrop et, sur demande, les appareils Bluetooth qui partagent la bande 2,4 GHz avec le Wi-Fi.

Le menu Wi-Fi liste vos appareils Bluetooth sous les réseaux : cliquez sur l’un d’eux pour le connecter ou le déconnecter. Une étiquette 2,4 GHz signale les écouteurs, claviers et souris connectés qui partagent la bande avec votre Wi-Fi, avec un raccourci vers un réseau 5 GHz connu. En dessous se trouve AirDrop, avec sa visibilité, ce qui utilise le lien et la pause faible latence. Le Bluetooth n’apparaît qu’après avoir choisi Afficher les appareils Bluetooth : macOS ne demande l’accès qu’à ce moment-là.

### Proxys et VPN

Kilobat fonctionne aux côtés des apps proxy (Clash Verge, ClashX, mihomo, Mihomo Party, FlClash, Surge, sing-box, Stash, V2Ray, Xray, Shadowsocks) et des VPN. Il se contente de les lire : il ne route jamais le trafic et ne modifie jamais leurs réglages.

- **Le trafic compte pour la bonne app.** Une app qui passe par un proxy local se voit attribuer son propre trafic, et le cœur du proxy ou le tunnel VPN qui le transfère est marqué « Transporte le trafic d’autres apps » au lieu d’être compté deux fois.
- **La route prise par chaque app.** Avec une API compatible Clash (Clash Verge, ClashX, mihomo, Mihomo Party, FlClash, clash_api de sing-box), la ligne d’une app indique le nœud emprunté, par exemple « via HK-01 · 2 en direct », et son infobulle liste chaque hôte, nœud et règle. Kilobat lit l’adresse de l’API et le secret dans la configuration de l’app elle-même, et n’affiche jamais le secret.
- **Les problèmes, dans « Par où sort le trafic » de l’onglet État :**

  - un proxy système qui pointe vers une app fermée, ce qui casse tous les navigateurs ;
  - un DNS ou un IPv6 qui contournent le VPN ;
  - un proxy et un VPN qui prennent tous deux le trafic ;
  - le mode global ;
  - un blocage qui ne voit pas les apps derrière un proxy système. Les filtres de macOS ne voient jamais les connexions vers 127.0.0.1 : activez donc le mode TUN du proxy, ou bloquez l’app dans les règles du proxy.
- **Pourquoi ça ne se connecte pas ?** ajoute une couche « App proxy » avec le mode du proxy et la vitesse de réponse de ses nœuds actuels, et signale quand un nœud mort est en cause.

Dans le Terminal : `kilobat proxy`, `kilobat proxy routes --app Telegram`, `kilobat proxy test` et `kilobat vpn`. Pour un cœur que Kilobat ne trouve pas seul, passez `--controller 127.0.0.1:9090 --secret …`. Les agents obtiennent la même chose via `get_proxy_status`, `test_proxy_nodes` et `check_vpn`.

### Widgets

Ajoutez Kilobat à votre bureau ou au centre de notifications : faites un clic droit sur le bureau, choisissez « Modifier les widgets » et cherchez Kilobat. **État du réseau** montre la chauve-souris selon l’état de la connexion, avec le ping vers Internet et vers le routeur ; la taille moyenne ajoute les 30 dernières minutes de latence, votre dernier test de débit et un bouton Tester. **Données du jour** affiche les données Internet du jour, en réception et en envoi, heure par heure ; avec Pro, votre forfait aussi. **Test de débit** affiche votre dernier résultat et en lance un nouveau en un clic (10 MB sur un réseau limité). Les widgets n’affichent ni nom de réseau ni adresse, se mettent à jour quand quelque chose change et indiquent l’âge de leurs chiffres quand Kilobat n’est pas ouvert.

### Rapports d’appel

Après chaque appel, Kilobat vous dit s’il s’est bloqué et pourquoi. Il repère un appel quand Zoom, Microsoft Teams, FaceTime, Slack, Webex, Discord, Skype, WhatsApp, Telegram, Signal ou un navigateur utilise le micro plus de dix secondes. Il n’entend jamais l’appel : il voit seulement quelle app utilise le micro, ce que macOS affiche de toute façon. Jusqu’à la fin de l’appel, il envoie un ping à Internet et à votre routeur chaque seconde, note l’autre app la plus active et vérifie le processeur, la mémoire, la température et le GPU du Mac toutes les cinq secondes.

Deux secondes ou plus d’affilée de pings perdus, ou de pings 200 ms plus lents que d’habitude pendant l’appel, comptent comme un blocage. Chaque blocage reçoit une cause : une autre app en train d’envoyer ou de télécharger, le Wi-Fi (quand le routeur a aussi calé), le balayage AirDrop, ou au-delà de votre routeur. À part, la carte indique quand le Mac lui-même a peiné : processeur saturé (et par quelle app), mémoire épuisée, Mac qui se bride parce qu’il chauffe, ou GPU saturé. La carte apparaît dans État › Appels et sous forme de notification. Sans Pro, elle indique combien de fois l’appel s’est bloqué ; Kilobat Pro nomme les causes et dit quoi essayer. Désactivez-la dans Réglages › Réseau › Rapport après chaque appel. Dans le Terminal, `kilobat calls` liste les cartes, et les agents les obtiennent via `get_call_reports`.

### Overlay de streaming

Affichez votre ping en direct pendant vos streams. Activez Réglages › Réseau › Overlay de streaming, puis ajoutez `http://localhost:7171/` comme source Navigateur dans OBS, Streamlabs ou toute autre app de streaming (640 × 80 suffit largement). Une petite pastille affiche le ping, la gigue, la perte et la dernière minute sous forme de courbe. La chauve-souris au début sourit en bleu tant que la courbe est bonne, passe au violet quand ça ralentit et fait la moue en rose quand c’est mauvais. Modifiez-la dans l’URL : `?show=ping,jitter,loss,graph,speed`, `theme=dark`, `light` ou `clear`, et `size=s`, `m` ou `l`. Avec Pro, `brand=0` masque le logo et `face=0` affiche un simple point à la place de la chauve-souris. Tant qu’il est activé, Kilobat envoie un ping à 1.1.1.1 chaque seconde ; la page est servie sur 127.0.0.1, donc seul ce Mac peut l’ouvrir. Sans l’app, `kilobat overlay` sert la même page jusqu’à Ctrl-C.

### Un rapport pour votre fournisseur d’accès

Quand la connexion est mauvaise, votre fournisseur d’accès ou votre support informatique veut des preuves. Dans État, le bouton de rapport en crée un à partir de ce que Kilobat a enregistré sur ce réseau pendant les dernières 24 heures ou les 7 derniers jours. Il couvre les coupures, la latence au routeur et au-delà, la perte de ping et les tests de débit comparés à votre abonnement, plus une vérification du site qui échoue si vous en ajoutez un. Chaque constat indique ce qui a été mesuré et où, jamais à qui la faute. Copiez-le en texte pour un chat d’assistance, ou enregistrez-le ou partagez-le en PDF. Il omet le nom de votre réseau, toutes les adresses IP et matérielles locales, les noms des appareils et les apps qui ont utilisé le réseau. Dans le Terminal, lancez `kilobat support-report --host github.com`, ou `--html --output report.html` pour la page.

### Cartes à partager

« Partager et exporter », dans le menu contextuel de l’icône de la barre des menus, crée une image carrée à publier : l’Écho de la semaine (les données échangées, votre jour le plus chargé et votre app la plus gourmande), votre dernier test de débit, ou « Ce lieu », un rapport Wi-Fi pour le café, l’espace de coworking, l’hôtel ou la bibliothèque d’où vous travaillez. « Ce lieu » affiche le nom du lieu, que vous saisissez ou choisissez dans la recherche de Plans, puis la réception, l’envoi et le ping du test de débit le plus récent sur ce réseau, s’il suffit pour les appels vidéo, comment il tient sous charge, et la bande Wi-Fi. Choisissez le lieu dans la recherche et la carte reçoit un petit plan du quartier avec un point dessus ; désactivez « Afficher la carte » pour l’omettre. Ajoutez des étiquettes comme « Prises », « Calme » ou « Ouvert tard », et une note d’une ligne. Kilobat les retient pour ce réseau, sur ce Mac. Copiez la carte, enregistrez-la ou partagez-la sur Nomad List, dans un avis Google Maps ou un chat de coworking. Aucune carte n’affiche de nom de réseau ni d’adresse. Le plan montre le lieu choisi, jamais l’endroit où vous êtes, sauf si vous choisissez « Utiliser ma position », la seule fois où « Ce lieu » demande l’accès à la localisation.

D’autres apps peuvent ouvrir Kilobat au bon endroit avec un lien `kilobat://` (depuis la 1.3.4) : `kilobat://open/speed` ouvre un onglet (overview, connections, health, radar, speed, history, tools ou settings), `kilobat://share/speed`, `kilobat://share/week` ou `kilobat://share/place` ouvre une carte à partager, et `kilobat://speedtest` lance un test de débit. Lancez-en un depuis le Terminal avec `open kilobat://open/history`, ou associez-le à une touche dans un lanceur. L’extension Raycast utilise ces liens pour ses actions Open in Kilobat, et [les actions Raccourcis de Kilobat](https://kilobat.app/shortcuts.html) lancent des contrôles, des tests de débit, le maintien en éveil et des rapports depuis l’app Raccourcis.

### Où vont les connexions

Connexions affiche chaque connexion ouverte sur un globe, reliée au pays où son adresse est enregistrée, avec les pays les plus actifs dans une liste et les sockets en dessous. Cliquez sur un pays pour filtrer. Le pays provient de la base de données gratuite de DB-IP fournie avec l’app : aucune adresse ne quitte votre Mac. Il s’agit du pays d’enregistrement : l’adresse d’un CDN ou d’un VPN indique le pays de son propriétaire, pas l’emplacement du serveur.

## Blocage et filtrage

La surveillance fonctionne sans filtrage. Pour appliquer des règles, ouvrez la configuration du filtrage dans Kilobat et approuvez l’extension et le filtre de contenu quand macOS le demande. Sur les versions actuelles de macOS, les extensions se trouvent dans Réglages Système → Général → Ouverture et extensions → Extensions réseau.

Le filtrage s’applique aux nouvelles connexions ; une connexion existante peut continuer jusqu’à sa reconnexion. Si une règle interrompt quelque chose d’important, passez à Sans restriction ou désactivez le filtrage dans les Réglages.

### Nouvelles apps : autoriser, demander ou bloquer

Le sélecteur au-dessus de la liste des apps définit ce que Voyage et Travail font des apps sans règle. **Autoriser** les laisse se connecter. **Demander** retient les premières connexions d’une app et ouvre une fenêtre indiquant qui l’a signée, son chemin et où elle veut aller ; autorisez-la ou bloquez-la une fois et Kilobat enregistre la règle. Les connexions sans réponse abandonnent au bout d’une minute et l’app redemande. **Bloquer** ne laisse se connecter que les apps que vous avez autorisées. Activez *Autoriser les logiciels Apple* pour laisser passer les services macOS et les apps d’Apple sans demander. Votre liste de blocage et vos règles de connexion s’appliquent dans tous les modes, et si Kilobat n’est pas ouvert, les nouvelles apps sont autorisées plutôt que retenues.

### Partage de connexion et coût des données

macOS signale certaines connexions comme limitées, comme le partage de connexion d’un iPhone, mais pas tous les partages de connexion Android ni un téléphone relié en USB ou en Ethernet. Chaque réseau a un coût des données : *Automatique* suit macOS, et *Limité* ou *Illimité*, c’est vous qui décidez. Réglez-le dans le menu Wi-Fi, le menu du forfait, l’onglet État ou les Réglages, ou avec `kilobat networks cost metered`. Sur un réseau limité, Kilobat passe en Voyage, sauf si vous avez choisi un profil pour ce réseau, rétablit votre profil précédent quand vous le quittez et saute les tests de débit programmés. `kilobat conditions --json` et le serveur MCP indiquent à la fois `metered` et ce que dit macOS (`osMetered`). Kilobat doit pouvoir distinguer un réseau avant que vous puissiez définir son coût : pour le Wi-Fi, il a donc besoin de l’accès à la localisation pour voir le nom du réseau.

### Mettre en pause les mises à jour sur les réseaux limités

Sur un réseau limité, le filtre réseau met aussi en pause les assistants qui téléchargent des mises à jour d’eux-mêmes : Google Updater (et l’ancien agent Keystone), Microsoft AutoUpdate, la mise à jour de logiciels de macOS (`softwareupdated`), les téléchargements de l’App Store (`appstored`, `appstoreagent`, `storedownloadd`), le service de téléchargement de Sparkle et les programmes d’installation de Sparkle et de Squirrel (`Autoupdate`, `Updater.app`, `ShipIt`). Ils sont bloqués par une règle de filtrage ordinaire, le journal des connexions bloquées indique « Mise à jour en pause sur un réseau limité », et les apps elles-mêmes continuent de fonctionner. Dès que le réseau n’est plus limité, les mises à jour reprennent. Rien n’est modifié dans les autres apps, leurs dossiers de préparation ou les Réglages Système : il n’y a donc rien à restaurer. L’option est activée par défaut ; désactivez-la dans les Réglages ou avec `kilobat updaters off`. Les règles qui s’appliquent déjà à une connexion, comme une règle de destination ou une autorisation temporaire, passent en premier : « Autoriser 30 minutes » laisse donc passer une mise à jour. Sans restriction ne met rien en pause.

L’onglet État, `kilobat updaters` et l’outil MCP `get_updaters` indiquent quels outils de mise à jour sont couverts, quels octets de mise à jour sont passés malgré tout sur ce réseau (les octets propres à un outil de mise à jour, et les téléchargements Système comme `nsurlsessiond` qui se sont connectés pour l’un d’eux, dont les octets incluent d’autres téléchargements), et quelles apps installées se mettent à jour depuis leur propre processus. La plupart des apps basées sur Sparkle ou Electron téléchargent la mise à jour dans l’app et ne confient que l’installation à un assistant : impossible de les mettre en pause sans bloquer l’app. Le filtre bloque les nouvelles connexions : un téléchargement déjà en cours quand le réseau est devenu limité peut donc se terminer. La recherche de mises à jour programmée de Kilobat attend elle aussi un réseau illimité ; Rechercher les mises à jour fonctionne toujours à la main.

### Forfaits de données et quotas par app

Chaque réseau a son propre forfait. Par défaut, il compte jusqu’à ce que vous le réinitialisiez. Faites-le repartir à zéro chaque jour, chaque semaine le jour de votre choix, ou chaque mois le jour où votre abonnement se renouvelle ; un abonnement qui se renouvelle le 31 repart le dernier jour des mois plus courts. Un forfait avec un cycle s’appuie sur l’historique d’utilisation de ce réseau, il continue donc après un redémarrage. Kilobat envoie une notification par cycle à 80 % et 100 % par défaut, et à 50 % si vous l’ajoutez.

Une app peut avoir son propre quota : une limite par cycle sur tout ce qu’elle échange ou seulement sur ses envois, sur un réseau ou sur tous. Définissez-en un depuis le panneau de bande passante de l’app ou avec `kilobat quota com.getdropbox.dropbox 2 --upload`. Avec le filtrage activé, un forfait épuisé bloque les nouvelles connexions, et un quota épuisé bloque les nouvelles connexions de cette app. Une autorisation temporaire ou une règle de connexion passe toujours. Kilobat échantillonne le trafic chaque seconde : les forfaits et les quotas sont donc approximatifs, et une app peut les dépasser légèrement avant d’être arrêtée.

### Ce qui compte : Internet, réseau local et VPN

Les forfaits, les quotas et les données consommées ne comptent que le trafic Internet. Le trafic vers votre réseau local (imprimantes, NAS, autres ordinateurs, page d’administration du routeur), AirDrop et les autres liens entre appareils proches (AWDL) est affiché à part, sous la forme « Réseau local : 2,1 GB, non compté », quand vous survolez le chiffre consommé de la carte du forfait, ainsi que dans le panneau de bande passante de chaque app. Le total du Mac vient des compteurs Wi-Fi et Ethernet : il inclut donc ce qu’aucune app ne comptabilise, à savoir les en-têtes de paquets et les accusés de réception, que les compteurs d’octets des apps excluent (en général 5 à 10 % de plus), un processus lancé et terminé entre deux échantillons, le Partage Internet, ou un VPN que macOS gère lui-même. La même infobulle affiche cette part sous la mention « Non lié à une app » ; elle n’est jamais attribuée à une app.

Avec un VPN, le trafic d’une app passe par le tunnel et le VPN le fait sortir par le Wi-Fi ou l’Ethernet. Kilobat le compte une seule fois, là où il quitte le Mac, comme votre opérateur, et étiquette la part de l’app « Via un VPN ». Avec un proxy (un proxy système, `HTTPS_PROXY` ou une app de proxy locale), les apps parlent au proxy sur ce Mac et c’est le proxy qui établit les connexions Internet : les octets apparaissent donc sous le proxy, et Kilobat ne peut pas savoir quelle app se trouvait derrière. Un proxy en mode TUN est un VPN pour Kilobat : la connexion propre de chaque app est étiquetée « Via un VPN », et le trafic sortant du proxy apparaît sous le proxy. Un proxy d’entreprise sur une adresse privée compte comme réseau local.

### Téléchargements Système

Les apps confient certains téléchargements à macOS : `nsurlsessiond` (transferts en arrière-plan pour des apps comme Musique et Podcasts), `mobileassetd` (modèles d’Apple Intelligence et de Siri, voix, polices), `softwareupdated`, `appstored` et `appstoreagent`, `cloudd` et `bird` (iCloud), `fileproviderd` et la mise en cache de contenu. La liste des apps les regroupe sous Téléchargements Système, avec le rôle de chacun. Avec le filtrage activé, le filtre voit pour quelle app chaque connexion a été établie : la liste indique alors « Pour Musique » et un blocage s’affiche sous la forme « com.apple.Music via nsurlsessiond ». Sans filtrage, nettop ne voit que le service : Kilobat ne peut donc pas dire à quelle app un téléchargement était destiné.

Un processus qui n’est ni une app ni un composant de macOS, comme `node`, `python`, `deno`, `bun` ou un binaire Go dans votre dossier de départ ou dans Homebrew, affiche le chemin de son exécutable quand vous développez sa ligne : un agent ou un outil inconnu ne passe donc pas inaperçu.

Activez *Envois inhabituels* dans les Réglages pour être prévenu quand une app envoie cinq fois plus que d’habitude en une heure, et au moins 50 MB, au plus une fois par jour et par app. Cette option se contente de notifier. Les règles temporaires et les règles de connexion qui expirent sont listées sous Profils avec le temps restant, pour que vous puissiez y mettre fin plus tôt.

### Bloquer des domaines et des IP

Faites un clic droit sur une connexion ouverte d’une app pour bloquer cet hôte pour l’app ou pour toutes les apps. La liste de blocage accepte les domaines (sous-domaines compris ; `*.example.com` fonctionne aussi), les adresses IP et les plages CIDR, en plus d’une liste hosts importée. Depuis le Terminal : `kilobat block-host ads.example.com`.

## Offrez Pro, recevez Pro

Chaque licence Pro a son propre lien de parrainage, `kilobat.app/r/` suivi d’un code court. Vous le trouverez dans les Réglages sous Kilobat Pro, ou sous une carte à partager, avec « Copier le lien » et « Partager ». Il n’y a pas de compte : le code vient de votre licence et ne révèle pas votre clé.

Un ami qui ouvre votre lien puis Kilobat obtient un essai Pro de 30 jours au lieu de 7. Chaque Mac peut utiliser un seul lien de parrainage, une seule fois. Quand il achète Pro, dans l’app ou sur le site après avoir suivi votre lien, votre licence gagne un Mac de plus. Tous les trois amis, vous gagnez une licence Pro gratuite : un code à usage unique affiché dans les Réglages, à saisir lors du paiement pour vous-même ou pour qui vous voulez.

Un achat compte une fois passé le délai de remboursement de 14 jours ; d’ici là, les Réglages l’affichent comme en attente. Les achats remboursés, les licences gratuites et les achats via votre propre lien ne comptent pas.

## Confidentialité

L’historique du trafic, les noms des réseaux et les règles restent sur votre Mac. Pas de compte, pas de télémétrie. Les diagnostics contactent des services de test, et l’activation de licence et la recherche de mises à jour contactent leurs services respectifs. Lisez la [politique de confidentialité](https://kilobat.app/privacy.html).
