Une application ne tourne pas toujours sur le serveur qui l’administre. Elle peut devoir tourner sur un ordinateur au bureau, sur une machine de calcul, ou chez un hébergeur dont le pare-feu refuse toute connexion entrante. TheSocle répond avec trois pièces : le Hub, qui administre ; le minihub, un agent posé sur la machine ; le mmh, une petite antenne en Go. Cet article les présente dans cet ordre, avec ce qui circule entre elles.
Le TSH : une plateforme construite sur son propre framework
Le Hub — TSH, pour TheSocleHub — est une application Socle V005 comme celles qu’il héberge : Java 21, Spring Boot 4, un MOP et des workers. Le 2026-09-23, le Hub thesocle.net, en version 3.51.1, en comptait 61. Chacun porte une fonction de la plateforme : le proxy, les certificats, l’identité, le coffre de secrets, le DNS, le courrier, le stockage, les sauvegardes, la passerelle vers les modèles d’IA.
La conséquence est directe : chaque fonction du Hub est une action, donc un outil MCP. Lister les minihubs, c’est l’action list_minihubs du worker minihub_registry_worker, que l’on appelle en REST ou qu’un agent IA voit sous le nom minihub_registry_worker__list_minihubs. Le Hub s’administre avec les mêmes outils que ceux qu’il fournit.
Le minihub : piloter une machine sans lui ouvrir de port
Le minihub est un agent Java, posé sur la machine distante — un Mac, une machine de calcul, un serveur. Tout repose sur une règle : c’est lui qui se connecte au Hub, jamais l’inverse. Il ouvre un tunnel gRPC chiffré et authentifié des deux côtés (mTLS), en sortie, sur le port 443, comme un navigateur. Aucun port à ouvrir, aucune règle de pare-feu à écrire chez vous.
Reste une question : comment le Hub donne-t-il un ordre à une machine qu’il ne peut pas joindre ? Le minihub vient chercher ses commandes. Au démarrage, il ouvre un flux que le Hub garde ouvert indéfiniment, et dans lequel le Hub pousse les commandes au fil de l’eau.
service MiniHubControl {
rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse);
rpc PollCommand(PollCommandRequest) returns (stream MiniHubCommand);
}
message MiniHubCommand {
string command_id = 1;
int64 issued_at_ms = 2;
oneof payload {
OpenConsoleCommand open_console = 10;
InstallAppCommand install_app = 20;
UninstallAppCommand uninstall_app = 21;
StopAppCommand stop_app = 22;
RestartAppCommand restart_app = 23;
HttpForwardCommand http_forward = 30;
GetStateCommand get_state = 40;
GetMcpCatalogCommand get_mcp_catalog = 41;
// …
}
}
Le minihub ne répond pas dans ce flux. Il répond par un appel séparé, corrélé à la commande par un identifiant de requête. C’est de l’attente longue et du rappel corrélé, pas un vrai canal dans les deux sens — et c’est ce qui permet de tout faire passer par une seule connexion sortante.
Installer une application
Le Hub pousse InstallAppCommand. Le minihub la publie sur son NATS local ; son worker Docker la consomme, tire l’image, crée et démarre le conteneur, puis le minihub renvoie son état au Hub.
Servir une application sur Internet
Une requête arrive au proxy du Hub pour une application hébergée sur un minihub. Le Hub pousse
HttpForwardCommand ; le minihub appelle le conteneur sur son réseau Docker interne et renvoie la réponse. Sans réponse en 30 secondes, le Hub répond 504.
Ouvrir une console
Depuis la console du Hub, un terminal s’ouvre dans le navigateur sur la machine distante. Le flux passe par le même tunnel, et chaque session est journalisée : qui, quand, combien de temps.
Trois détails comptent pour la sécurité et l’exploitation :
- L’enrôlement. Un minihub se présente avec un jeton à usage unique, valable 15 minutes et conservé haché par le Hub. Il génère sa propre clé ; le Hub signe son certificat par la PKI de son coffre, pour 90 jours.
- Le battement de cœur. Toutes les 30 secondes. Sans nouvelles depuis 90 secondes, le Hub classe le minihub dégradé ; depuis 180, injoignable.
- Plusieurs Hubs. Un même minihub peut être rattaché à plusieurs Hubs, chacun avec son tunnel et son flux de commandes.
Le mmh : 12 à 17 Mo de Go pour sortir, envoyer, exécuter
Le minihub fait tourner des applications. Pour des tâches plus petites, il a des enfants : les mmh, pour miniMiniHub. Un mmh est un binaire Go statique, de 12 à 17 Mo, rattaché à un minihub parent par un tunnel gRPC mTLS. Il tient un ou plusieurs rôles :
proxy
Il sort sur Internet pour le compte du Hub, directement ou par TOR. Une application du Hub choisit sa sortie : un nœud précis, un pays, ou le moins chargé.
smtp
Il remet du courrier directement aux serveurs de destination, seulement pour les domaines qu’on lui a confiés, et sous quota.
batch
Il exécute des tâches planifiées d’agent IA, que le Hub crée et modifie à distance.
Depuis sa version 0.4, en juillet 2026, le mmh est fermé par défaut : il refuse de démarrer sans mTLS, refuse de démarrer si son magasin local ne peut pas être chiffré (AES-256-GCM), et bloque toute commande que son fichier de permissions n’autorise pas explicitement. Ses sorties HTTP refusent les adresses internes.
Il se pose de deux façons. Par SSH, sans intervention : le Hub frappe son identité, dépose ses fichiers et le démarre. Ou, quand la machine refuse toute connexion entrante, par la voie pull : c’est l’antenne qui vient chercher sa configuration.
En chiffres
Relevés le 2026-09-23.
- 61
workers dans le Hub thesocle.net - 6
minihubs rattachés à ce Hub - 17
mmh en service - 443
le seul port utilisé, en sortie
Ce qui reste à faire
Les certificats qui relient les mmh à leur minihub se renouvellent aujourd’hui à la main. Le proxy de sortie par les mmh est en service, mais réservé à nos propres applications.
Pour un décideur, ce que ça évite
Faire tourner un programme sur vos propres machines, à côté de vos données ou de votre matériel de calcul, sans ouvrir votre réseau à un prestataire. Rien n’entre chez vous : c’est la machine qui appelle. Et vous suivez tout, machines et antennes, sur le même écran que le reste de la plateforme.
À retenir
- Le Hub est une application Socle : chacune de ses fonctions est un outil MCP.
- Le minihub appelle le Hub, vient chercher ses commandes, et répond par un appel séparé.
- Le mmh est petit, fermé par défaut, et tient les rôles proxy, smtp ou batch.
Pour le détail des fonctions : Minihubs, mmh et supervision.
