Piloter tâches et arbitrages depuis ton agent
Un agent peut créer des tâches et poser une question à trancher — jamais y répondre lui-même. Ce guide montre le cycle exact (propose → arbitre → en_cours → clos), les cinq verbes que l'agent peut appeler, et pourquoi ce n'est pas une règle de conduite mais un verrou vérifié à la compilation.
Deux types de travail, un seul outil de création
Une tâche OrgGen est soit une tâche ORDINAIRE (un travail confié, avec une échéance possible), soit un ARBITRAGE (une question posée avec des réponses pré-définies, que quelqu'un doit trancher). Les deux se créent par le même outil, `create_tasks` — un arbitrage se distingue par un champ `arbitrage: { question, options }` supplémentaire.
create_tasks({
title: "Quelle stratégie de refacturation entre filiales ?",
cellId: "filiale-tech",
arbitrage: {
question: "Refacturation au coût réel ou au forfait mensuel ?",
options: [
{ id: "cout-reel", label: "Au coût réel, mesuré chaque mois" },
{ id: "forfait", label: "Forfait mensuel fixe" },
],
},
})L'agent peut aussi proposer jusqu'à deux options recommandées, chacune avec sa justification (`recommended: { justification }`) — une aide à la décision, jamais une décision prise à l'avance.
Le cycle : qui a le droit de poser quelle étape
Un arbitrage traverse jusqu'à six étapes, et chacune appartient à un camp précis — jamais l'un à la place de l'autre.
| Étape | Posée par | Ce qu'elle veut dire |
|---|---|---|
| propose | agent | la question est posée, avec ses options |
| arbitre | humain | l'humain a choisi — l'agent peut commencer |
| conteste | humain | l'humain refuse — l'agent doit reformuler |
| en_cours | agent | l'agent a démarré le travail |
| clos | agent | le travail est fait, preuve à l'appui |
| caduc | l'un ou l'autre | la question ne se pose plus |
Le trajet normal est `propose → arbitre → en_cours → clos`. Si l'humain conteste au lieu d'arbitrer, l'agent reformule la question (`repropose`) et le cycle repart de `propose`. Rien ne force un aller simple : une question mal posée se corrige sans perdre l'historique.
Le verrou : deux vocabulaires qui ne se rencontrent jamais
`validate`, `choose` et `contest` — les trois verbes qui font AVANCER un arbitrage vers une décision — n'existent, dans le code, que dans un type accessible à l'interface humaine. L'agent appelle une fonction DIFFÉRENTE, qui n'accepte qu'un second vocabulaire : `start`, `close`, `repropose`, `moot`, et un cinquième verbe décrit plus bas.
update_task({ taskId: "tk-refacturation", arbitrageAction: { type: "start" } })
update_task({
taskId: "tk-refacturation",
arbitrageAction: { type: "close", summary: "Migré vers le coût réel, effectif ce mois." },
})Il ne s'agit pas d'une règle qu'un développeur pourrait oublier d'appliquer un jour : les deux vocabulaires sont deux unions Zod disjointes, consommées par deux fonctions distinctes. Passer `type: "choose"` à la fonction agent est une erreur de TYPE — le code ne compile pas. Le verrou tient à la compilation, pas à la discipline de qui l'a écrit.
Le cinquième verbe : une décision déjà prise ailleurs
Le cycle formel suppose que la question soit tranchée VIA le panneau — quelqu'un clique une option. Mais une décision se prend parfois en conversation, avant même que l'agent ait ouvert un panneau d'arbitrage. `record_external_decision` couvre exactement ce cas : il clôt un arbitrage directement depuis `propose`, sans passer par `arbitre`/`en_cours`, à condition de citer la preuve.
update_task({
taskId: "tk-refacturation",
arbitrageAction: {
type: "record_external_decision",
verbatim: "On part au coût réel, Marc l'a validé en réunion ce matin.",
source: "Réunion produit du 12/09",
decidedAt: "2026-09-12",
},
})Ce que ce verbe ne fait PAS : il ne marque jamais l'arbitrage comme « validé via le panneau » (le champ `decision` réservé à ce mécanisme reste intact). La preuve rapportée par l'agent et une validation formelle humaine restent deux faits distincts, pour toujours, dans l'historique de la tâche.
Essaie sur ton propre cas
Décris ta situation en une phrase — OrgGen construit le schéma et fait le calcul.
Essaie sur ton propre cas