ProjetProject

Un passe lisible, une réserve sans mursOpenHandsA readable pass, a pantry without wallsOpenHands

La maison montre son tableau de contrôle : on y voit ce qui a été retenu et ce qui est passé. Mais sa prétendue réserve est tout l’immeuble, et quand on crie l’arrêt, un feu du fond continue. Sept dossiers sont rattachés à cette maison.OpenHands expose un plan de contrôle lisible : les exécutions de hooks apparaissent avec des résultats success et blocked sur ses surfaces runtime et UI/API. Un pilote mené sur son serveur d’agents en 1.46.0 établit par ailleurs deux constats opposés à cette lisibilité : l’espace de travail déclaré n’est pas une frontière, et l’annulation répond success sans terminer tout le travail. Sept dossiers publics sont rattachés.The house puts its checks where you can see them: what was held back and what went through. Yet its supposed pantry is the whole building, and when the call to stop goes out, one back burner keeps going. Seven case files are tied to this house.OpenHands exposes a readable control plane: hook executions surface with success and blocked outcomes through its runtime and UI/API. A pilot run against its agent server at 1.46.0 records two findings that cut against that readability: the declared workspace is not a boundary, and cancellation reports success without terminating all of the work. Seven public dossiers are attached.

Le service bat son pleinActifService is in full swingActive
Le carnet est revenu en arrière, pas les casserolesRejouer la conversation ne restaure pas l’état d’exécution qu’elle supposeThe book went back, but the pans did notReplaying the conversation does not restore the execution state it assumesDes cuisines séparées ont adopté les mêmes gestesDes harnais indépendants font apparaître les mêmes primitives de contrôleSeparate kitchens adopted the same movesIndependent harnesses grow the same control primitivesLa consigne était devenue une main qui retenait l’assietteLa politique s’applique au point d’action, plus en amontThe rule had become a hand holding the platePolicy applied at the point of action, not upstreamUn même bon, mais les clés restaient à chaque maisonUne interface commune, des règles de confiance restées localesOne docket still left the keys with each houseOne shared interface, trust rules that stayed localLe passe montrait la décision prise sur chaque assietteUn garde-fou dont la décision est inspectableThe pass showed the decision made on each plateA guardrail whose decision can be inspectedAu passe — Choisir qui prend le plat, et avec quoiL’envoi d’une tâche à un exécutant est devenu un sous-système à part entièreAt the pass — Picking the cook, the pans, and his limitsHanding a task to an executor has become a subsystem of its ownL’ardoise verte décrivait le fourneau voisinLe contexte d’exécution actif est rarement celui que le système croit décrireThe green board described the stove next doorThe active execution context is rarely the one the system believes it describesSur trois cents recettes, seules douze atteignent le passeUn catalogue de skills est une ressource d’exécution, pas un ensemble de fichiersOut of three hundred recipes, only twelve reach the passA skills catalog is an execution resource, not a set of filesAu passe — Un commis travaille au fond, hors de vueLa délégation est devenue un sous-système à part entière, avec sa propre identité d’exécutionAt the pass — Work handed to a cook nobody watchesDelegation has become a subsystem of its own, with its own execution identityAu passe — Entrer dans une cuisine inconnue, c’est tout accepterUne décision de confiance porte sur tout ce que l’origine peut faire exécuterAt the pass — Trusting a kitchen means trusting everything in itA trust decision covers everything the origin can cause to run

Une porte qui retient finit par être poséeChronologieA door that holds is finally fittedTimeline

Une demande pour garder le passe a d’abord été ouverte dans la grande maison, puis rangée sans suite. Le constat reste au passe.Une demande de hooks dans le dépôt applicatif se referme en état périmé, sans que la fonction y soit livrée.A request to guard the pass was first raised in the main house, then shelved with nothing done there. The finding remains at the pass.A hooks request in the application repository closed stale, without the feature shipping there.

Le travail a repris dans l’atelier voisin de la même famille. Là, le garde a été posé pour de bon : il peut retenir un plat. Deux morceaux sont annoncés inachevés.L’implémentation repart dans le SDK d’agent logiciel, où un moteur de hooks à sémantique bloquante est fusionné. L’arrêt et les conversations distantes y sont explicitement incomplets.The work started again next door, in the same family’s workshop. There the guard was fitted for real: it can hold a plate back. Two parts are declared unfinished.Implementation resumed in the software-agent SDK, where a hook engine with blocking semantics merged. Stop support and remote conversations were explicitly incomplete in that change.

Depuis la salle comme depuis le passe, on voit ce que le garde a laissé partir et ce qu’il a retenu. Le constat reste au passe.Les événements d’exécution de hooks sont exposés avec les résultats success et blocked sur les surfaces runtime et UI/API.From the room and from the pass alike, you can see what the guard let out and what it held back. The finding remains at the pass.Hook execution events became visible with success and blocked outcomes across the runtime and UI/API surfaces.

Si le garde n’est pas là à l’ouverture, le service démarre quand même. C’est écrit, et c’est voulu.La sémantique de démarrage est fusionnée en fail-open : lorsque les hooks ne peuvent pas être chargés, l’exécution continue.If the guard is not there at opening, service starts anyway. That is written down, and it is on purpose.Startup semantics merged fail-open: when hooks cannot be loaded, execution continues.

Un soir d’essai, la maison a fait exactement le travail demandé, sans se tromper. Mais une porte de service n’était rattachée à aucune table, et l’arrêt a laissé quelqu’un au travail. C’est le reste du relevé qui pose question.Un pilote exerce ensuite le serveur d’agents en 1.46.0 sur la boucle locale. Le moteur exécute correctement la tâche demandée, mais la route bash n’appartient à aucune conversation et l’annulation laisse un descendant vivant.On the trial night the house did the exact job it was asked for, correctly. But a service door belonged to no table, and the stop left someone working. It is the rest of the record that raises questions.A pilot then exercised the agent server at 1.46.0 on loopback. The engine completed the requested task correctly, while the bash route belonged to no conversation and cancellation left a descendant alive.

La réserve annoncée ouvre sur tout l’immeubleMécanismeThe stated pantry opens onto the whole buildingMechanism

La maison parle d’une réserve à elle, mais la porte donne sur tout l’immeuble. Sans table ni accord, une porte de service lit le carnet voisin, visite les réserves et sonne dehors. Une réserve fermée reçoit trois fois le même refus sur un ticket vide. La carte ne promet pas de murs, et leur notice dit que les construire n’est pas leur métier.L’espace de travail déclaré n’est pas une frontière mais un répertoire courant de l’hôte : la route de téléchargement a rendu 200 et le contenu d’un fichier situé hors de cet espace, et la route bash — sans paramètre d’espace de travail, hors de toute conversation, sans consultation d’une politique de confirmation — a lu ce même fichier, listé des répertoires système et joint le réseau public, chaque fois avec un code de sortie 0. Déclarer un espace de travail distant a été refusé trois fois sur trois par le même 422 au message vide, et aucune des capacités annoncées par le serveur ne mentionne le bac à sable : l’appelant ne peut ni savoir s’il est confiné, ni demander à l’être. La documentation d’architecture du produit range elle-même la fourniture du bac à sable parmi ce dont il n’est pas responsable.The house speaks of its own pantry, but the door opens onto the whole building. With no table or approval, a service door reads the neighbour’s ledger, tours stores, and rings outside. A locked pantry gets the same refusal three times on a blank slip. The menu promises no walls, and the handbook says building them is not their trade.The declared workspace is a host working directory rather than a boundary: the download route answered 200 with the contents of a file outside that workspace, and the bash route — which takes no workspace argument, belongs to no conversation and consults no confirmation policy — read the same file, listed system directories and reached the public network, each time with exit code 0. Requesting a remote workspace was refused three times out of three by the same empty-message 422, and none of the server’s advertised capabilities mentions sandboxing, so a caller can neither learn whether it is confined nor ask to be. The product’s own architecture documentation lists providing the sandbox or workspace isolation layer among the things it does not do.

Deux réparations posées, deux défauts sans réponseRéponseTwo repairs fitted, two faults unansweredResponse

Le garde peut retenir un plat : cela est fait. L’arrêt et les conversations éloignées restent annoncés inachevés, et l’ouverture continue sans garde. Une réparation change une clé sans effacer les autres, avec un essai en salle. Une troisième idée a été abandonnée ; sur la réserve sans murs et l’arrêt, rien n’a été annoncé.Du côté des contrôles, le moteur de hooks est bien fusionné dans le SDK, avec sémantique bloquante, arrêt et conversations distantes explicitement incomplets, et démarrage fail-open assumé. Côté secrets, le correctif de mutation partielle MCP est fusionné avec preuve de régression navigateur, tandis que la modification plus large de synchronisation managed-Codex a été fermée sans fusion : son dessin reste un contrôle tenté, pas un comportement livré. Sur l’annulation et l’espace de travail relevés par le pilote, la matière n’établit aucun correctif.The guard can hold a plate back: that is done. Stopping and conversations with distant rooms remain declared unfinished, and opening continues without the guard. One repair changes a key without wiping the rest, with a dining-room trial. A third idea was dropped; on the pantry without walls and the stop, nothing has been announced.On the control side, the hook engine did merge into the SDK, with blocking semantics, with stop and remote-conversation support explicitly incomplete, and with startup semantics deliberately fail-open. On credentials, the MCP sparse-mutation fix merged with browser regression evidence, while the broader managed-Codex synchronisation change closed unmerged, leaving its design attempted control rather than shipped behaviour. For the cancellation and workspace findings from the pilot, the material establishes no fix at all.

Un soir, un seul poste, et pas davantageÉtat actuelOne evening on one bench, and no moreCurrent state

Tout ceci vaut pour une seule version, essayée un soir sur un poste isolé. La caisse, la salle, les commandes automatiques et les liens extérieurs restaient hors essai. Privée de fournisseur par quatre chemins, la maison s’est arrêtée net sans aller ailleurs. Le compteur est éteint dans la cuisine, mais pas dans la caisse livrée ; ce constat est de confiance haute.Le relevé ne vaut que pour la version 1.46.0 du serveur, exercée en venv isolé sur la boucle locale ; l’image conteneurisée n’a pas été tirée, et le frontend, le serveur d’automatisations, les intégrations tierces, le mode cloud et les agents ACP tiers étaient hors du pilote. Une propriété a tenu : quatre façons de casser l’accès modèle produisent quatre fois le même échec, statut d’exécution en erreur et événement d’erreur de conversation, sans repli vers un cloud, un compte ou un autre fournisseur. La télémétrie annoncée désactivée par défaut l’est pour le backend seul et non pour la pile livrée, dont le fichier de valeurs par défaut embarque une clé d’analytique que l’entrypoint recopie ; ce point est porté à confiance haute.Everything here holds for one version, tried for a single evening on an isolated bench. The crate, dining room, automatic orders, and outside links stayed outside the trial. Cut off from its supplier four ways, the house stopped dead without shopping elsewhere. The counter is off in the kitchen, not the delivered crate; that finding is high confidence.The record holds for server version 1.46.0 only, exercised in an isolated virtualenv on loopback; the container image was never pulled, and the frontend, the automations server, third-party integrations, cloud mode and third-party ACP agents all sat outside the pilot. One property did hold: four distinct ways of breaking model access produced the same failure four times, an error execution status and a conversation error event, with no fallback to a cloud, an account or another provider. Telemetry described as off by default is off for the backend alone and not for the shipped stack, whose defaults file carries an analytics key that the entrypoint copies forward; that point is carried at high confidence.

Un feu qui brûle encore dément l’arrêtLeçonA burner still lit disproves the stopLesson

Une cuisine qui ne peut pas dire si sa porte est fermée n’a pas de porte. Un arrêt qui laisse un feu allumé n’est qu’un cri dans le service.Une surface d’exécution incapable de dire si elle est confinée n’est pas une frontière, et une annulation qui répond success sans terminer le travail n’est qu’une réponse.A kitchen that cannot say whether its door is shut has no door. A stop that leaves a burner lit is only a shout across the pass.An execution surface that cannot report whether it is confined is not a boundary, and a cancellation that answers success without ending the work is only an answer.