Dans le rapport mensuel d’août, nous avions écrit une phrase : l’assistant ne sera pas ouvert dans cette version.
Ce n’était pas de la paresse. À l’époque, l’Agent de première génération pouvait déjà converser, rechercher des morceaux et générer des aperçus sur la page d’organisation ; ce qui bloquait vraiment, c’était la base. Empiler d’autres fonctions par-dessus revenait à souder l’orchestration, les sessions, les clés et la réécriture de la musique dans un même processus. Le deuxième produit aurait dû tout refaire. Nous avons choisi de démanteler ce qui fonctionnait déjà pour le remplacer par un runtime intégrable, auditable et capable d’isoler les plantages.
Ce changement a été bien plus difficile que d’écrire une boîte de discussion à partir de zéro.
🛠 La première génération marchait déjà, et c’est bien là le début des ennuis
La version de juillet n’était pas un prototype. Il s’agissait d’un assistant complet intégré au processus PureLab : flux multi-tours, sauvegarde des sessions en base de données, annulation et verrouillage en série, clé de modèle fournie par l’utilisateur, recherche dans la bibliothèque et aperçu des tags, la réécriture passant toujours par la propre porte de confirmation du produit. La sécurité du domaine était son point fort — le modèle ne pouvait pas modifier directement les fichiers, les chemins devaient être masqués, et les restrictions de forfaits ne pouvaient pas être contournées sous prétexte de passer par la conversation.
Le problème n’était pas de savoir « s’il pouvait converser », le problème résidait dans sa forme.
L’orchestration, le canal d’événements, la table des sessions, le déchiffrement des clés et l’appel aux outils se trouvaient tous dans le processus du produit. L’interface ne reconnaissait que ce flux d’événements. Changer de bibliothèque, basculer de panneau, heurter des générations — la machine d’états devait être écrite à la fois dans le front-end et le back-end. Plus gênant encore : si le prochain produit de bureau voulait lui aussi un assistant, il faudrait copier tout l’hôte (Host). Ce n’est pas de l’intégration, c’est chaque application qui élève son propre Agent.
Ce n’est pas faute d’avoir essayé de « garder l’ancien et d’en brancher un nouveau ».
🚧 Le détour le plus difficile : garder un double moteur pour comparer les effets, écrire quatre mille lignes de conception, pour finalement tout annuler
Début août, il y avait une voie qui semblait plus sûre : afficher simultanément l’« IA classique » et l’« Assistant intelligent » dans le panneau de droite. Au départ, conserver l’ancien noyau servait uniquement à avoir une référence pour « comparer les effets » lors de l’intégration de la nouvelle base. Nous espérions que pendant que le nouveau processus isolé comblerait lentement son retard en matière de compatibilité Windows, d’empaquetage et de canal de clé, nous pourrions utiliser l’ancien moteur pour valider la qualité des sorties du modèle.
Sur le papier, c’est ce qu’on appelle une transition en douceur, mais une fois inscrite dans la conception, cela s’est transformé en catastrophe.
Pour maintenir cette « comparaison », les deux ensembles de commandes de dialogue ne pouvaient pas être mélangés, les deux sessions ne pouvaient pas être réconciliées, et la même clé devait alimenter simultanément l’orchestration interne au processus et le processus isolé. Le pire, c’est que la clé ne pouvait être inscrite ni dans les variables d’environnement ni dans les fichiers de configuration. La prévisualisation, la confirmation, la réécriture et la restauration devaient continuer à passer par la chaîne de sécurité propre au produit, tandis que le nouveau noyau ne devait pas avoir de permissions arbitraires sur les fichiers. Sous Windows, à l’époque, le processus isolé était explicitement fermé ; l’entrée devait rester présente, le texte devait rester compréhensible pour des humains, et l’interface ne pouvait être ni vide ni planter.
Cette conception à double entrée, faite pour « comparer les effets », a forcé l’accumulation de plus de trente décisions strictes, avec un corps de texte dépassant les quatre mille lignes. Avant même de commencer à l’implémenter, nous savions que ce n’était pas une comparaison, mais le fait d’élever simultanément deux assistants, deux registres et deux domaines de panne. La moindre idée de « rendre compatible l’ancienne session » allait bloquer les deux côtés.
Le 13 août, le document entier a été annulé.
Le nouveau contrat ne compte que quelques phrases, mais chacune coûte cher : le Kit est entièrement composé de nouveau code, de nouvelles commandes et d’un nouveau canal d’événements. Aucune compatibilité avec l’ancienne voie, aucune réconciliation, aucune migration d’historique et aucune table partagée. La « mission de comparaison » de l’ancien Agent s’est directement achevée. Lors de la suppression, seule l’ancienne entrée du produit a été retirée, sans modifier le nouveau contrat.
Cela signifie que du côté de l’utilisateur, il n’y aura pas de « reprise des anciennes discussions ». Ce n’est pas un oubli, c’est intentionnel. Migrer les anciennes sessions vers le nouveau runtime semble prévenant, mais en réalité, cela revient à lier définitivement deux cycles de vie. Nous ne pouvons pas nous permettre de payer ces intérêts.
⛰️ Les montagnes à déplacer en même temps lors du changement de base
L’annulation n’était qu’une autorisation. Le véritable effort consistait à découper la « fonction de chat du produit » en trois couches, et à la greffer sur PureLab en un mois.
- 📦 La première montagne est le processus : la boucle du modèle ne doit plus partager le même domaine de plantage que la page d’organisation, la réécriture et l’analyse. La conversation tourne dans un processus isolé ; le produit ne se charge que de le lancer, de le superviser et de le récupérer en cas d’échec. Si le processus isolé plante, la bibliothèque musicale et le pipeline de tags doivent toujours être là. Inversement, le produit ne doit absolument pas confier un terminal générique, un système de fichiers arbitraire ou des outils externes au modèle ; les droits d’écriture sur la bibliothèque musicale ne reviennent pas à l’assistant.
- 🔌 La deuxième montagne est le protocole : l’interface n’a pas le droit de parler le protocole de session de bas niveau, et le produit n’a pas non plus le droit d’écrire manuellement une passe « envoyer le prompt, écouter les événements, recoller l’historique » dans son enveloppe. Il doit y avoir au milieu une couche de protocole produit stable : envoyer, arrêter, lister les sessions, restaurer, configurer le canal. Le transport peut se faire par des commandes de bureau, le protocole en soi n’appartient à aucune application spécifique. Ce que le deuxième produit devra faire, c’est accrocher le panneau, fournir l’identité de la bibliothèque actuelle et enregistrer des capacités de domaine, au lieu de réimplémenter l’hôte (Host).
- 🔑 La troisième montagne est la clé : la clé du modèle de l’utilisateur reste scellée dans le produit. Cette clé ne doit apparaître ni sur le disque du processus isolé, ni dans ses variables d’environnement. Les requêtes reviennent via une boucle locale (loopback) depuis le processus isolé, sont brièvement déchiffrées par le processus du produit, transmises à l’interface renseignée par l’utilisateur, puis rejetées. Copier le fichier de la base de données peut encore permettre de restaurer le texte chiffré ; il s’agit d’un risque connu, et nous n’avons pas prétendu l’avoir résolu avec le trousseau du système.
- 🛠 La quatrième montagne sont les outils de domaine : l’assistant peut chercher dans la bibliothèque actuellement autorisée, lire des pistes, prévisualiser des renommages et des correctifs de tags, et générer des brouillons. Mais il ne peut pas démarrer la réécriture, le renommage, un pipeline, ni effectuer d’analyse. Le flux métier doit être : prévisualiser d’abord 1 à 5 pistes, si l’échantillon est correct, générer jusqu’à 50 brouillons, l’espace de travail affiche la boîte de réécriture, et les fichiers ne bougent que lorsque vous cliquez sur Apply. Le modèle n’a pas le droit d’inventer des chemins, de vous demander le numéro interne de la bibliothèque, et encore moins de prétendre que « c’est déjà modifié ».
- 🚀 La cinquième montagne est l’empaquetage multiplateforme : avec le même contrat, macOS doit passer la signature bac à sable (sandbox), et Windows a vu le processus isolé complètement indisponible pendant un temps, affichant seulement « Actuellement indisponible sur ce système ». Ce n’est qu’en septembre que Windows a aligné le répertoire personnel, l’interrupteur de capacités et les répertoires de débogage / publication du processus isolé. Pour un Agent de bureau, la moitié du travail ne réside pas dans la conversation, mais dans « pouvoir s’installer, démarrer, et ne pas faire planter le programme principal ».
Ces cinq montagnes devaient être déplacées ensemble. Rendre le chat fonctionnel d’abord puis ajouter la sécurité, ou bien faire la sécurité d’abord puis rattraper Windows, auraient tous deux ramené l’ancienne entrée pendant la période de comparaison. Nous avons également supprimé le droit de ramener cette ancienne entrée.
⚙️ Où ce mois s’est vraiment consumé
De la mi-août au 10 septembre, le calendrier affichait « Intégration ». Dans les faits, ce fut une succession de traitements de limites préoccupants :
- L’enchevêtrement des canaux et de la machine d’états : dans les paramètres, il doit y avoir une entrée « Assistant IA » trouvable par un humain. Sans configuration, le panneau ne doit pas s’afficher comme prêt ; la barre de dialogue est par défaut dans un état vide en anglais, le produit y injecte alors « Aller aux paramètres » pour diriger l’utilisateur vers la page de configuration ; les codes d’erreur internes ne peuvent pas non plus être balancés n’importe comment sur l’interface. Lors du changement d’adresse de l’interface, on obligeait autrefois à resoumettre la clé, avant de permettre « la clé est toujours là, seule l’adresse ou le modèle change », ce qu’une personne ferait naturellement. Ce ne sont pas des problèmes de texte, c’est la machine d’états du canal liée au déchiffrement de la clé.
- Une gestion des sessions plus difficile qu’une boîte de chat : un nouveau fil de discussion ne doit pas être écrasé par la « restauration du dernier non vide ». En changeant de bibliothèque, la liste des sessions doit suivre, sans se mélanger ; si l’on ferme le panneau droit pour le rouvrir, l’exécution en cours doit compléter l’écran, au lieu de rejouer la conversation comme une machine à écrire ; ce n’est qu’en redémarrant le logiciel que la restauration à froid s’opère. En basculant et en revenant, nous avions même perdu l’historique, avant de changer pour mémoriser les événements déjà projetés par session. Supprimer une session requiert de fermer simultanément la session sous-jacente et de nettoyer le répertoire sur le disque, tout en empêchant un clic accidentel en cours de génération.
- Un mécanisme de réécriture extrêmement éprouvant : la porte de confirmation de l’ancien Agent était correcte, et la nouvelle base ne peut pas s’assouplir simplement parce que le mode de transport a changé. Dans le chat, on ne demandera plus d’« autoriser cet outil » — les requêtes approurouvées sont relâchées par l’hôte. Ce n’est qu’au début de septembre que « renseigner les paramètres → prévisualiser un petit échantillon → générer le brouillon → cliquer sur Apply » a été réuni en un événement produit, la confirmation de la modification des fichiers restant dans la boîte de réécriture et non dans une fenêtre contextuelle du chat. Le renommage ne dispose pas de correctif, il ne peut d’abord produire qu’une correspondance de chemins, que vous vérifiez dans la zone des opérations avant de l’appliquer. Toute phrase affirmant que « l’assistant a déjà modifié vos fichiers » est un bug selon ce contrat.
- L’indépendance du panneau et les compromis de l’intégration : le panneau doit lui-même ressembler à un espace de travail, et non à une démonstration. Markdown se contente des titres et des listes, sans coloration syntaxique ; la sortie en flux, l’échec et l’annulation utilisent le même rendu. À l’intérieur, le panneau est codé en dur en anglais, le produit ne peut modifier que l’entrée des paramètres — c’est l’un des coûts de l’intégration à trois dépôts. Il est encastré sur le côté droit de la page d’organisation, et ce n’est que récemment qu’il a été déplacé vers le bas, pour éviter de disputer la même ligne de vue à l’extraction, au remplacement et au pipeline.
Aucune de ces choses ne pouvait être mise en ligne individuellement. Dès lors qu’on modifie le protocole, l’hôte, le panneau et l’adaptateur produit doivent tous évoluer de concert. Oublier un côté se traduisait par : « parfois on peut chatter, parfois on perd l’historique, parfois la clé est envoyée au mauvais endroit ».
👀 Ce que vous verrez désormais dans l’espace de travail
Le produit a été mis à jour vers la version 6.0. Tout à droite de la page d’organisation, l’entrée IA est épinglée en bas de la barre d’activités. Une fois ouverte, on découvre un espace de dialogue complet : il prend en charge le multi-session, la restauration et peut être interrompu à tout moment. Par rapport au rapport mensuel 5.0 du mois d’août, l’entrée est désormais permanente ; quant à savoir si la boutique a déjà publié cette version, cet article ne le considère pas comme déjà en ligne.
- Une configuration flexible : rendez-vous d’abord dans les paramètres pour y saisir votre propre interface, modèle et clé. Nous ne lions pas la conversation à un fournisseur cloud spécifique, et nous ne basculons pas discrètement vers un modèle intégré lorsqu’il n’y a pas de configuration.
- Des capacités de domaine mesurées : une fois configuré, vous pouvez converser avec la bibliothèque musicale ouverte. Par exemple, prévisualiser le renommage par artiste et par album, ou jeter un œil à un petit lot de brouillons de tags. L’assistant peut rechercher, prévisualiser et générer des brouillons ; la modification effective des fichiers reste à votre discrétion, à confirmer dans la boîte de réécriture ou via la correspondance des renommages. Le pipeline de tags mis en ligne en août est toujours là, et l’assistant n’appuiera pas sur « Démarrer » à votre place.
- Des frontières fermes : analyse, pochettes, paroles, et complétion des métadonnées via internet lui sont toujours refusées pour ce cycle. Ce n’est pas par manque d’y avoir pensé, mais la frontière doit d’abord être stricte avant d’envisager de lui en confier davantage.
💡 Les coûts que nous étions prêts à payer, et la facture qui reste à régler
Le plus coûteux dans le changement de base n’était pas d’écrire du nouveau code, mais de reconnaître que la première génération fonctionnait déjà, que le double moteur préservé pour comparer les effets semblait très stable, et de pourtant tout annuler de manière décisive. Ne pas migrer l’historique est irresponsable vis-à-vis des anciennes conversations ; migrer l’historique est irresponsable vis-à-vis du nouveau contrat. Nous avons opté pour la seconde solution, en supprimant complètement l’ancienne entrée dans le produit afin d’éviter que deux assistants ne soient éternellement mis en parallèle.
Il faut aussi être clair sur les dettes non réglées. Le passage du canal vers notre propre relais, le remplacement du texte chiffré de la base de données par le trousseau du système, et le fait de rendre la forme de publication de Windows aussi sereine que celle de macOS, tout cela est encore en cours. L’assistant est actuellement un pilote dans l’espace de travail, ce n’est absolument pas un slogan tel que « l’assistant intelligent est officiellement lancé ».
En août, nous avons regroupé l’organisation des tags sous forme de pipeline, car les tâches répétitives ne devraient pas nécessiter de changer manuellement de panneau. Ce mois-ci, nous avons séparé l’assistant du processus du produit, car la conversation, la clé et la réécriture ne doivent pas partager le même domaine de panne. Les deux axes poursuivent le même objectif : permettre à la station de travail locale de la bibliothèque musicale de s’automatiser en toute confiance, tout en s’arrêtant avant la moindre modification de fichier.
Ce n’est qu’une fois la base remplacée que l’on pourra dire qu’elle vous aide vraiment à organiser.
