MotifPattern

La 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 upstream

Longtemps, la consigne était affichée au tableau et l’on espérait qu’elle serait lue. Puis une main s’est tenue au passe pour retenir l’assiette avant son départ. Le tableau expliquait ; la main décidait.Un hook d’enforcement applique une politique au moment de l’exécution plutôt que de dépendre d’une instruction préalable. Dans les principaux harnais, les hooks ont convergé depuis de simples notifications de lifecycle vers le blocage, l’injection de contexte, la télémétrie et le contrôle de reprise. Le lifecycle de Goose trace cette trajectoire : callbacks non bloquants, puis blocage explicite PreToolUse, puis comportement configurable quand le hook lui-même échoue.For years, a rule went on the board and people hoped it was read. Then a hand stood at the pass to hold a plate before it left. The board explained; the hand decided.An enforcement hook applies policy at execution time instead of relying on a prior instruction. Across the major harnesses, hooks have converged from plain lifecycle notifications toward blocking, context injection, telemetry and resumption control. Goose's hook lifecycle traces that path: non-blocking callbacks, then explicit PreToolUse blocking, then configurable behavior when the hook itself fails.

Les consignes et les décisionsInstructions et autoritéInstructions and decisionsInstructions and authority

Chaque assiette retenue laissait une marque et une heureSignauxEvery held plate left a mark and a timeSignals

Un vrai contrôle pouvait dire non et le service l’entendait. Chaque assiette retenue gardait une marque : qui l’avait arrêtée et quand. La cuisine fixait aussi combien de temps elle attendait cette main et ce qui arrivait sans elle.Trois marqueurs concrets identifient le motif : un verdict bloquant disponible au point d’appel, un timeout d’exécution borné, et un comportement défini quand le contrôle lui-même échoue. Cline l’a matérialisé en architecture explicite : événements mappés, journaux, connecteurs, timeouts d’exécution, intégration à la compaction. OpenHands expose les événements d’exécution de hooks avec résultats success et blocked via ses surfaces runtime et UI/API, ce qui rend la décision inspectable plutôt qu’invisible.A real check could say no and service heard it. Every plate held back kept a mark of who stopped it and when. The kitchen also set how long it waited for that hand and what happened without it.Three concrete markers identify the pattern: a blocking verdict available at the call site, a bounded execution timeout, and defined behavior when the check itself fails. Cline turned this into explicit architecture: mapped events, logs, connectors, execution timeouts, compaction integration. OpenHands surfaces hook execution events with success and blocked outcomes through its runtime and UI/API layers, which makes the decision inspectable rather than invisible.

La main au passe pouvait manquer, trop décider ou mêler deux servicesMécanismeThe hand at the pass could fail three waysMechanism

Il était facile de penser à la consigne et d’oublier la main. Son absence n’autorisait pas à servir, elle pouvait décider au-delà de son rôle, et elle pouvait mêler deux services. Chaque risque devait être choisi et traité séparément.Un point d’enforcement est raisonné comme une règle alors que c’est un programme sur le chemin critique, avec sa propre panne, son propre scope et son propre état. Quand le contrôle échoue, le choix — continuer, bloquer, retry, exposer l’incertitude — devient lui-même une décision de sécurité. Un stop hook destiné à forcer la persistance a pu être interprété comme une autorité pour poursuivre l’exécution alors que l’utilisateur demandait seulement un plan. Une instance de hook stockant l’environnement et les données de problème de chaque run dans des champs ordinaires laissait des workers parallèles s’écraser mutuellement et enregistrer des résultats dans le mauvais run.It was easy to think about the rule and forget the hand. Its absence did not allow service, it could decide beyond its role, and it could mix two services. Each risk needed separate treatment.An enforcement point gets reasoned about as a rule when it is a program on the critical path, with its own failure, its own scope and its own state. When the check fails, the choice — continue, block, retry, expose uncertainty — is itself a safety decision. A stop hook meant to force persistence could be read as authority to keep executing while the user had asked only for a plan. A hook instance holding each run's environment and problem data in ordinary fields let parallel workers overwrite one another and record results against the wrong run.

Écrire les limites de la main, son absence et ce qu’elle garde pour elleRéponseWrite the hand’s limits, absence, and what it must leave aloneResponse

Écrivez ce que la main peut arrêter et ce qu’elle ne décide jamais. Choisissez d’avance si son absence ferme le passe, fait attendre ou laisse servir en le disant. Donnez à chaque service son carnet et refusez toute main ou note étrangère au passe.Un garde-fou a besoin d’un scope, pas seulement d’un objectif : l’intention d’un contrôle ne borne pas l’autorité qu’on lui prête. La panne d’un contrôle de sécurité n’est pas une décision d’approbation ; la sémantique d’échec — continuer, bloquer, retry, exposer l’incertitude — se définit avant la panne, ce que Goose a rendu configurable. L’état par run reste isolé plutôt que partagé entre instances. Le modèle de confiance de Gemini CLI désactive ensemble hooks projet, serveurs MCP et fichiers d’instructions dans les dossiers non fiables, les traitant comme une même classe d’influence exécutable.Write what the hand may stop and what it never decides. Choose in advance whether its absence closes the pass, makes plates wait, or lets them leave with a warning. Give every service its own book and refuse any outside hand or note at the pass.A guardrail needs a scope, not only a goal: the intent behind a check does not bound the authority readers grant it. A safety control's failure is not an approval decision; the failure semantics — continue, block, retry, expose uncertainty — are settled before the failure, which is what Goose made configurable. Per-run state stays isolated rather than shared across instances. Gemini CLI's trust model disables project hooks, MCP servers and instruction files together in untrusted directories, treating them as one class of executable influence.

Une main qui décide a besoin de limites, d’un choix en cas d’absence et de tracesLeçonA deciding hand needs limits, an absence choice, and tracesLesson

Dès qu’une main décide au passe, elle tient une partie du service. Ses limites, son absence et chacune de ses décisions doivent rester visibles. Sans cela, la cuisine ne tient qu’à une habitude.Le control plane se rapproche des frontières d’action : les principaux produits d’agents convergent vers les mêmes mécanismes périphériques — hooks, skills, délégation, confiance, reprise, workspaces et protocoles. Dès qu’un hook contrôle le lifecycle, il exige des sémantiques runtime de niveau produit : scope explicite, sémantique d’échec définie, isolation d’état, trace observable de ce qu’il a décidé. En production, le harnais détermine de plus en plus si l’intelligence est réellement utile.Once a hand decides at the pass, it holds part of service. Its limits, absence, and every decision must remain visible. Without that, the kitchen relies only on habit.The control plane keeps moving toward action boundaries: the major agent products converge on the same peripheral mechanisms — hooks, skills, delegation, trust, resumption, workspaces and protocols. Once a hook controls the lifecycle it demands product-grade runtime semantics: explicit scope, defined failure semantics, state isolation, and an observable trace of what it decided. In production, the harness increasingly decides whether the intelligence is actually useful.