Quick answer: Un agent qui découvre son budget sur la facture mensuelle n'a pas de budget : il a un post-mortem. La question utile à poser à un harness est : où peut-on se placer dans la boucle et dire non ?...

Où placer les garde-fous de dépense dans DeepSeek Harness

Updated August 16, 2026 · first published August 16, 2026

Un agent qui découvre son budget sur la facture mensuelle n'a pas de budget : il a un post-mortem. La question utile à poser à un harness est : où peut-on se placer dans la boucle et dire non ? DeepSeek Harness y répond avec deux points d'extension en cascade nommés.

D'abord, la forme de la boucle

Le harness emploie un modèle tour et étape. Une étape est une requête modèle plus les appels d'outils qu'elle produit. Un tour contient zéro étape ou plus. Le déroulé d'un tour est en gros : prise de l'entrée, assemblage du prompt, agent/pre-step, flux LLM, exécution des outils, clôture de l'étape, clôture du tour.

Deux flux d'événements avancent en parallèle. session/event porte les faits durables de relecture — chunks, messages, appels d'outils, résultats. agent/* porte les signaux de coordination en direct — statut, boîte de réception, interception de requêtes. Les garde-fous appartiennent au second ; la comptabilité au premier.

Point d'interception 1 : agent/pre-step

C'est le point de contrôle avant l'envoi de la requête modèle. La documentation précise que la décision renvoyée par agent/pre-step fait autorité et que les listeners qui enveloppent next() préservent les messages en aval sauf remplacement intentionnel. C'est cette propriété qui en fait une porte budgétaire utilisable : un listener peut refuser une étape proposée, ou la modifier, et la décision tient.

Ce qui a sa place ici :

Point d'interception 2 : tools/pre-execute

L'exécution d'outils est un pipeline en trois phases. La cascade tools/pre-execute passe d'abord, les gardes monotones ensuite, et seulement alors le corps de l'outil s'exécute — en bac à sable, avec filtrage du système de fichiers. Ensuite une cascade post-execute peut accepter, bloquer, remplacer ou enrichir le résultat, et ToolDefinition.finalizeContent impose des invariants de contenu de façon synchrone.

La couche de permissions est délibérément asymétrique. Les gardes monotones enregistrés refusent ou s'abstiennent, identité protégée : ils n'accordent jamais. Si un garde refuse, ou si l'invite unique de ctx.approval est absente ou sans réponse possible, le résultat est un refus et le corps de l'outil est ignoré. Échec fermé, pas ouvert.

Les mutations du système de fichiers sont filtrées à part : seules les mutations fs/write-intent ou fs/edit-intent passent. Écrire n'est pas un effet de bord incident de l'exécution d'un outil.

Deux propriétés rendent ce pipeline digne de confiance comme point de contrôle : les gardes ne peuvent que refuser, et une invite d'approbation sans réponse possible refuse. La plupart des couches de politique maison échouent en ouvert quand le canal d'approbation manque, c'est-à-dire précisément quand on en avait besoin.

Ce que le pipeline consigne

Trois événements de session forment la piste d'audit : tool/call avant exécution, tool/code-dispatch pour les sous-appels et tool/result comme résultat final faisant autorité. Que les sous-appels soient consignés séparément compte : un unique appel d'outil visible du modèle qui se ramifie en interne ne cache pas sa ramification.

Un jeu de garde-fous pratique

ContrôleHookEmpêche
Étapes maximum par touragent/pre-stepBoucles qui ne convergent pas
Plafond cumulé de tokensagent/pre-stepDérive de dépense à petit feu
Rétrogradation de route au seuilagent/pre-stepTarif frontière sur du travail bon marché
Liste blanche d'outils par classe de coûtGarde monotoneOutils coûteux en contexte bon marché
Refus des sous-processus et du réseauPolitique ctx.sandboxSortie réseau non mesurée
Filtrage du write-intentCouture ctx.fsMutations non relues

La réserve

DeepSeek Harness est en developer preview et son propre README annonce des changements cassant la compatibilité. Ces noms et sémantiques de hooks sont ceux documentés aujourd'hui ; traitez les plugins de garde-fous bâtis dessus comme du code que vous rouvrirez, et épinglez la version contre laquelle vous avez construit.

Related


Want this applied to your own LLM spend? FinOps LLM runs a free audit of your AI costs and shows where the savings are. Book free audit →

Back to research