hachiflow.com

Cet article parle de Buzz, notre produit précédent. Aujourd'hui, nous construisons Waggle.

Agents

La rotation est une republication

Nous avons proposé NIP-AK en amont de Buzz aujourd'hui (block/buzz PR #6011) : des trousseaux d'identifiants scellés par le propriétaire, qui suivent un agent partout et tournent en une seule publication. Voici comment une semaine de fouille a trouvé la patte manquante, et pourquoi le correctif tient en une phrase.

La découverte

Tout a commencé par de l'envie. Les agents GrokBot de xAI sont toujours actifs, et ils le sont parce que chaque connexion dont ils ont besoin les attend, prête, sur un ordinateur dans le cloud. L'expérience est la bonne. La garde, non : ces connexions vivent dans un datacenter que vous ne verrez jamais. Je voulais l'expérience, avec la ligne de garde tracée autour du propriétaire, alors j'ai passé une semaine à fouiller le vrai code de Buzz pour voir quelle part en existait déjà.

Plus que je ne le pensais. L'identité voyage déjà : un agent Buzz est une paire de clés, et NIP-OA joint mon attestation signée sur la clé publique de l'agent à chaque événement qu'il publie, valable depuis n'importe quelle machine. La mémoire voyage déjà aussi : NIP-AE stocke l'état d'un agent sous forme d'événements chiffrés dont la clé de déchiffrement dérive de la clé propre de l'agent, si bien qu'une nouvelle session sur une nouvelle machine récupère la même mémoire. Deux des trois choses dont un agent a besoin étaient portables avant que j'écrive une ligne.

Puis deux découvertes inconfortables dans notre propre déploiement. D'abord, un identifiant d'outil avait été glissé dans l'un de nos agents par un script wrapper écrit à la main : un droit qu'aucune interface ne pouvait lister ni révoquer. Ensuite, l'économie. Le token OAuth qu'émet un abonnement Claude est lui-même portable, et il apporte un ordre de grandeur de plus d'inférence par dollar que la tarification de l'API, la marge dont l'absence a tué plusieurs startups d'agents. Le dernier point d'ancrage, c'étaient les identifiants. Tout le reste suivait déjà la clé.

Le correctif en une phrase

La rotation est une republication. C'est tout le correctif. NIP-AK stocke chaque droit d'accès à un identifiant sous forme d'événement adressable chiffré, rédigé par le propriétaire, de kind 30180, à sa propre adresse aveuglée, et la tête la plus récente à une adresse est l'identifiant en vigueur. Pas de protocole de synchronisation. Pas de vecteur de versions. Pas de passe de réconciliation. Le relais ne garde déjà que l'événement le plus récent par adresse ; la spec s'appuie sur ce comportement et s'arrête là.

Voici la boucle. Je relance /login sur mon laptop. Un watcher repère le nouveau token et republie la tête scellée en quelques secondes. Chaque exécuteur converge par le push ; un exécuteur qui rencontre un échec d'auth se répare lui-même en réinterrogeant la tête avant de réessayer ; un agent qui a dormi pendant cinq rotations se réveille face à une seule tête, sans protocole de rattrapage. Une publication, partout.

Une règle tient l'ensemble : les événements de trousseau ne peuvent être rédigés que par le propriétaire. Le trousseau, c'est à moi de l'écrire et à l'agent de le lire, donc un agent compromis ne peut s'accorder ni un nouvel identifiant, ni une liste d'autorisation plus large, ni les clés de quelqu'un d'autre. Et la liste des droits MCP n'est pas une indication, c'est la liste d'autorisation des outils de l'agent rendue visible. Ce qui est accordé est exactement ce que l'agent peut détenir.

votre laptop /login watcher scelle · publie votre relais une adresse · la dernière gagne tête n tête n+1 push mac mini pod kubernetes sandbox fountain échec d'auth · réinterroger
La chronologie. Un /login sur le laptop devient une tête scellée à une adresse, et chaque exécuteur converge vers elle : par le push quand il est en ligne, en réinterrogeant après un échec d'auth, une seule tête après n'importe quel nombre de rotations manquées.

Pourquoi nous en avons besoin

Le panneau du trousseau met fin à l'ère des scripts wrapper. Aucun identifiant n'atteint un agent autrement que par le trousseau, et le trousseau est visible : chaque droit, sa provenance, sa dernière rotation, sur un seul panneau. La clé glissée en douce dans notre propre déploiement n'avait de ligne nulle part. Avec NIP-AK, cette catégorie de contournement n'a plus nulle part où vivre.

La machine devient jetable. Créez un agent sur le mac mini de mon bureau, dans un conteneur de flotte, un pod Kubernetes, un sandbox Fountain : même clé, mêmes droits. L'identité suit la clé. La mémoire suit la clé. Désormais les identifiants suivent la clé, et l'endroit où le processus se réveille cesse d'être une décision d'architecture.

Et l'économie s'aligne enfin. Votre agent, c'est deux clés : une clé d'identité qui signe son travail et une clé d'inférence qui paie sa réflexion, et les deux voyagent. Les agents dépensent l'abonnement de leur propriétaire, pas la marge d'un revendeur. C'est la différence entre une entreprise d'agents et un simple burn rate.

Où en est-on

NIP-AK est un brouillon soumis à examen dans la PR #6011 de block/buzz. Il suit le précédent de Buzz lui-même : NIP-AE est entré par la spec d'abord, l'implémentation ensuite, et cette proposition prend la même route. La spec est volontairement petite : un kind, un schéma de slug, une dérivation d'adresse aveuglée et la règle de rotation.

Une note de bas de page de la semaine. Le brouillon a été renuméroté en cours de route, du kind 30176 au kind 30180, parce que des équipes en amont ont revendiqué 30176 et ses voisins pendant que nous écrivions encore. Ce n'est pas un désagrément. C'est la règle du registre d'abord qui fait ses preuves : réservez votre kind dans le registre avant de construire dessus, sinon quelqu'un d'autre le fera.

C'est la troisième note de terrain d'affilée sur la même idée. Votre agent est une clé a plaidé pour l'identité. La machine est jetable a nommé la patte manquante. Celle-ci propose le correctif en amont. Lisez le brouillon, cherchez les failles, et dites-nous où la rotation casse. Une spec que personne n'a tordue est une spec que personne n'a testée.

← Toutes les notes