Référence agent : outils workflow & run
Cette page est la surface de référence des 33 outils MCP qui créent, exécutent et acceptent les workflows : 23 outils workflow_*, 3 outils workflow_node_instructions_* et 7 outils mission-run/changement, en huit groupes. Pour les procédures pas à pas, utilisez les recettes ; quand un appel refuse, la page des refus associe chaque token à sa récupération.
À qui s'adresse cette page
Vous êtes un agent connecté en MCP — ou l'opérateur qui le pilote. Chaque outil de cette page renvoie la même enveloppe : { success, data } en cas de succès, { success: false, error, code } en cas de refus. Tous ces outils exigent des droits tenant-admin ; si un appel échoue à l'autorisation, c'est un problème de permissions, pas un problème de workflow.
Cette page dit ce que fait chaque outil et ce qu'il renvoie. Pour la mécanique sous-jacente — compilation, branches, seals — lisez le chapitre d'architecture des workflows.
Les deux surfaces d'entrée légales
Un workflow publié ne s'exécute que par deux surfaces : workflow_invoke et mission_run_start — tout le reste de cette page crée, inspecte ou accepte.
workflow_invoke— workflow d'abord. Compile une version publiée en une mission neuve qu'il crée pour vous. À utiliser quand le travail n'a pas encore de mission.mission_run_start— un run sur une mission existante. Le run reçoit sa propre branche à partir du tip de la mission et entre dans la boucle d'acceptation : néProposed, puis vous l'acceptez ou l'écartez. À utiliser quand le travail appartient à une mission que vous avez déjà.
Le parcours côté humain de cette boucle est Runs, acceptation et changements.
Création et cycle de vie (9 outils)
Ces outils mènent un graphe du draft vide à la version publiée gelée. Les drafts sont le seul état éditable ; publier gèle le graphe — voir Cycle de vie d'un workflow.
| Outil | Rôle | Entrées clés | Retour | Codes de refus |
|---|---|---|---|---|
workflow_create_draft | Créer une nouvelle version draft à partir d'un payload de graphe. Omettez workflowId pour une identité neuve en version 1 ; fournissez-le pour ouvrir la version suivante. | graphJson ; optionnels workflowId, tunnelsJson | { id, workflowId, version, status } | — |
workflow_update_draft | Remplacer le graphe et les tunnels d'un draft. Drafts uniquement. | id, graphJson ; optionnel tunnelsJson | { id, workflowId, version, status } | NOT_FOUND · CONFLICT (pas un draft) |
workflow_materialize | Injecter dans un draft les contrôles de gouvernance requis, de façon déterministe, depuis le catalogue de contrôles actif. À lancer avant publish sur les graphes gouvernés ; idempotent. | id | { id, workflowId, version, status } | NOT_FOUND |
workflow_waive_control | Enregistrer une dérogation explicite, motivée et auditée pour un contrôle requis manquant. Certains contrôles ne sont pas dérogeables et refusent. | id, controlId, reason | { id, workflowId, version, status } | NOT_FOUND ; contrôle non dérogeable |
workflow_validate_draft | Validation à blanc — le même validateur que publish, qui agrège tous les problèmes en une seule passe. Ne change rien. | id | la liste complète des problèmes | — (les problèmes sont renvoyés, pas levés) |
workflow_publish | Valider, puis geler le draft en une version publiée immuable et sommée. | id | { id, workflowId, version, status, checksum, publishedAt } | VALIDATION_ERROR (tous les problèmes listés d'un coup) |
workflow_rename | Définir le nom d'affichage, partagé par toutes les versions. Le nom vit hors du checksum : renommer un workflow publié est donc permis. | workflowId, name | { workflowId, name, updatedVersions } | NOT_FOUND |
workflow_archive | Archiver une version publiée — terminal, conservé pour la provenance. | id | { id, workflowId, version, status } | CONFLICT (pas Published, ou un workflow publié la référence encore — vérifiez d'abord workflow_referenced_by) |
workflow_delete_draft | Supprimer définitivement une version draft. Destructif. | id | { id } | CONFLICT (pas Draft) |
Composition (3 outils)
Les workflows se composent par référence : un node FlowRef intègre un autre workflow publié comme sous-workflow.
| Outil | Rôle | Entrées clés | Retour | Codes de refus |
|---|---|---|---|---|
workflow_tile_catalog | Lister les tiles publiés que vous pouvez intégrer comme sous-workflows — y compris les briques sys- — chacun avec la surface de pins qu'il projette. | — | la liste des tiles | — |
workflow_rebind_flowref | Repointer un FlowRef d'un draft vers un autre workflow ou une autre version cible. Repointer invalide la ratification des gates : les approbations données sur l'ancien lien doivent être redonnées. | id du draft, le node FlowRef, la nouvelle cible | le draft mis à jour | NOT_FOUND · CONFLICT (pas un draft) |
workflow_referenced_by | Lister les workflows publiés qui référencent celui-ci. À appeler avant d'archiver : l'archivage refuse tant que cette liste n'est pas vide. | workflowId | la liste des consommateurs | — |
Découverte et observation (6 outils)
| Outil | Rôle | Entrées clés | Retour |
|---|---|---|---|
workflow_catalog | La palette des types de nodes : les 138 types répartis en 17 catégories, chacun avec ses pins d'entrée/sortie typés. lifecycle vaut Standard ou Legacy ; placer un node Legacy dans un nouveau draft bloque le publish. À lire avant de créer, pour câbler des pins compatibles. | — | le catalogue avec les pins par type |
workflow_list | Toutes les versions d'un workflow, de la plus récente à la plus ancienne. | workflowId | les versions avec status, checksum, dates |
workflow_list_all | La dernière version de chaque workflow du tenant. | — | une ligne par workflow |
workflow_get | Une version avec son payload de graphe complet. version=0 (ou omis) signifie la dernière version publiée. | workflowId ; optionnel version | la version complète, y compris graphJson |
workflow_runs | Les runs lancés depuis un workflow, du plus récent au plus ancien. | workflowId ; filtre de version optionnel | la liste des runs |
workflow_run_nodes | Le statut par node d'un run — fait correspondre les tâches du run aux ids de nodes du graphe d'origine. | l'id de mission du run | les statuts par node (voir États des nodes d'un run) |
Exécution (1 outil)
workflow_invoke — exécuter une version publiée, workflow d'abord.
- Entrées :
workflowId,version(doit être ≥ 1 — exécuter « la dernière, quelle qu'elle soit » n'est jamais implicite), optionnelsobjective,model,provider,paramsJson,projectId,presetId(+forceOnAllCallSites),agentBudgetJson(+forceBudgetOnAllAgentSites). - Les paramètres se lient à la compilation. Les valeurs de
paramsJsonsont liées quand le graphe est compilé en plan de la nouvelle mission ; rien ne se relie en cours de run. - La résolution du modèle est explicite.
modeletprovidersont requis sauf si les défauts du tenant les résolvent — il n'y a pas de repli silencieux de modèle. - Les presets sont le levier à préférer.
presetIdexécute cette invocation avec un preset nommé plutôt qu'unmodelbrut ; un preset inconnu refuse avecNOT_FOUNDau lieu de se replier. Par défaut, il ne remplace que le preset par défaut du workflow — un step qui a épinglé son propre preset à l'édition le garde — sauf si vous passez aussiforceOnAllCallSites. - Budgets d'agent par run.
agentBudgetJsonajuste les budgets d'agent pour ce run uniquement, axe par axe. Par défaut, un axe indiqué ne se substitue qu'au défaut moteur — il ne comble que les axes que le budget rédigé par le step laisse non renseignés, et un step qui a rédigé cet axe garde sa propre valeur — sauf si vous passez aussiforceBudgetOnAllAgentSites, qui impose les axes indiqués à chaque site agent, au-dessus de ce que le step a rédigé. Une surcharge malformée refuse avecVALIDATION_ERRORavant toute création de mission. - Le ciblage de projet est explicite et échoue bruyamment.
projectId(id ou slug) dirige les écritures du run vers un projet : une cible inconnue refuse avecNOT_FOUNDet un projet non-Active avecCONFLICT, dans les deux cas avant toute création de mission. Omettez-le et le run atterrit dans le projet par défaut du tenant — enregistré comme tel dans la provenance de la mission. - Retour : le nouveau
missionIdavec les comptes de steps, de gates et de contrôles. Chaque gate naît en pause derrière une décision en attente. - Suites :
mission_getpour suivre la mission,decision_listpour trouver les gates en attente,workflow_run_nodespour le statut par node.
Clonage (2 outils)
| Outil | Rôle | Entrées clés | Retour |
|---|---|---|---|
workflow_clone_from_mission | « Sauvegarder ce run comme workflow. » Clone une mission en un nouveau draft — ne publie jamais. Une mission née d'un workflow est re-draftée à l'identique depuis sa source ; une mission organique est reconstruite depuis ses tâches, et notes liste chaque réparation faite en chemin. | l'id de la mission | { id, workflowId, version, status, source, notes } ; source = workflow-born | organic |
workflow_clone_from_system | Cloner un template système en un draft neuf que votre tenant possède. | la clé du template | { id, workflowId, version, status } |
Templates système (2 outils)
| Outil | Rôle | Entrées clés | Retour |
|---|---|---|---|
workflow_system_list | Lister les 22 templates de la galerie, en lecture seule. | — | les résumés des templates |
workflow_system_get | Un template avec son graphe complet, pour l'inspecter avant de le cloner. | workflowKey | le template, y compris graphJson |
Les templates sont représentatifs : le clonage vous donne un graphe à posséder et éditer, pas un branchement sur les flux internes de la plateforme. L'énumération complète des 22 se trouve sur Templates système.
Instructions de node (3 outils)
Les nodes coder et agent peuvent porter une liaison d'instructions — un texte de surcharge qui remplace les instructions rédigées du node au prochain dispatch, sans toucher au graphe publié ni à son checksum. Une seule liaison s'applique — la plus spécifique gagne : run > project > tenant > global.
| Outil | Rôle | Entrées clés | Retour |
|---|---|---|---|
workflow_node_instructions_get | Lire le texte rédigé d'un node, la liaison gagnante (s'il y en a une) et le texte effectif que le dispatch utiliserait. | la référence du node ; portée optionnelle | rédigé, liaison, effectif |
workflow_node_instructions_set | Définir le texte d'instruction manuel à une portée donnée. | la référence du node, la portée, le texte | le slot mis à jour |
workflow_node_instructions_clear | Retirer l'instruction manuelle à une portée donnée. | la référence du node, la portée | le slot vidé |
Seuls les slots définis manuellement sont modifiables par ces outils ; un slot détenu par la machinerie de prompt-engineering de la plateforme refuse avec CONFLICT. ARDS ne propose pas encore lui-même d'améliorations de prompts en v1 ; si cela arrive, les propositions arriveront comme des décisions que vous approuvez — rien ne s'appliquera jamais tout seul. Voir Gouvernance pour la vue côté humain.
Runs de mission et changements (7 outils)
La boucle d'acceptation sur une mission existante. Strict-séquentiel par défaut : un seul run non décidé à la fois, chaque run accepté atterrissant comme un changement sur la branche de la mission. Passez le même groupId à plusieurs démarrages pour ouvrir une compétition à la place — un gagnant, les autres rejetés.
| Outil | Rôle | Entrées clés | Retour | Statuts |
|---|---|---|---|---|
mission_run_start | Démarrer un run d'une version publiée sur une mission existante. Le run se branche depuis le tip de la mission et naît Proposed. | l'id de la mission, workflowId, version ; optionnel groupId | l'id du run + un token de statut | les 11 statuts de démarrage de run |
mission_run_get | Un run avec son récapitulatif par node, son changement une fois accepté, et ses ancres de seal. isAnchored n'est vrai qu'une fois le run accepté, son changement appliqué et son seal passé. | l'id du run | le détail du run | — |
mission_run_accept | L'unité d'acceptation : revérifie la base du run contre le tip de la mission, exécute le plancher de validation physique (fail-closed), fusionne et enregistre exactement un changement. | l'id du run | le changement en cas de succès | les 7 statuts d'acceptation de run |
mission_run_discard | Écarter un run non accepté : le marque Rejected et supprime sa branche. Rien n'a atterri, donc rien à défaire. | l'id du run | confirmation | — |
mission_changement_stack | Les changements de la mission en ordre ordinal, chacun avec ses fichiers touchés et les changements antérieurs dont il dépend. | l'id de la mission | la pile | — |
mission_revert_preview | Prévisualiser un revert : le changement plus la fermeture transitive de ses dépendants, dans l'ordre inverse où ils seraient annulés. Ne change rien. | l'id de la mission, le changement | la cascade | — |
mission_revert | Exécuter la cascade prévisualisée, du plus récent au plus ancien, fail-closed : un conflit interrompt proprement et nomme le membre fautif — rien de partiel n'atterrit. | l'id de la mission, le changement | la liste des annulés | — |
Le parcours côté humain — accepter, écarter, revert, compétition — est Runs, acceptation et changements.
Contexte mission
Quatre outils voisins que vous croiserez dans chaque session workflow ; la surface mission complète est documentée dans Missions & tasks.
mission_propose rédige une mission et la route vers approbation au lieu de la créer directement — la proposition arrive comme une décision qu'un humain accepte ou rejette. Vous n'approuvez jamais votre propre proposition.
mission_create crée une mission directement. Attachez un workflow à la création, ou démarrez des runs dessus plus tard avec mission_run_start.
mission_decompose demande au planificateur de découper en tâches une mission née d'une conversation. Les missions qui portent un workflow sautent cette étape : le graphe est déjà le plan.
decision_respond est l'unique verbe de résolution de gate. Ses résolutions s'appliquent à une gate en pause ainsi : approve libère la gate une fois les steps précédents terminés ; skip annule le step gardé ; fail le fait échouer. Laisser la décision sans réponse maintient le run en pause. Les gates en attente sont listées par decision_list et apparaissent dans la file Decisions (« Décisions »).
Vocabulaires de statuts
Tables de tokens normatives. Les tokens sont renvoyés tels quels ; comparez-les exactement. Le détail de récupération par token vit dans Refus et modes d'échec.
Statuts de démarrage de run
Renvoyés par mission_run_start. Un token de succès, dix refus.
| Token | Sens | Que faire |
|---|---|---|
Started | Le run a été créé sur sa propre branche depuis le tip de la mission, né Proposed. | Suivez-le avec mission_run_get ; résolvez les gates via decision_respond. |
FeatureDisabled | Workflows:MissionRuns:StartEnabled est désactivé dans cet environnement. | Demandez à votre opérateur de l'activer — voir Refus et modes d'échec. |
AgenticMissionUnsupported | Le type de cette mission ne peut pas héberger de runs de workflow. | Utilisez une mission standard, ou créez-en une avec workflow_invoke. |
MissionTerminal | La mission est déjà Completed, Failed ou Cancelled. | Démarrez le run sur une mission vivante, ou invoquez-en une neuve. |
MissionNotPlanned | La mission n'a pas encore atteint un état planifié. | Attendez la fin de la planification, puis réessayez. |
ChildSpawnerDisallowed | Le graphe contient un node qui engendre des missions filles — interdit dans un run de mission. | Exécutez ce workflow via workflow_invoke à la place. |
RunAlreadyOpen | Strict-séquentiel : un run non décidé est déjà ouvert sur cette mission. | Acceptez ou écartez d'abord le run ouvert — ou entrez en compétition avec le même groupId. |
TipUnavailable | Le tip de la mission n'a pas pu être résolu. | Réessayez ; si cela persiste, voir Refus et modes d'échec. |
WorkflowNotFound | Aucun workflow ne correspond à ce workflowId et cette version. | Vérifiez avec workflow_list. |
NotInvocable | Cette version n'est pas Published. | Publiez le draft, ou choisissez une version publiée. |
MaterializationFailed | La compilation du graphe en tâches du run a échoué. | Lisez l'erreur renvoyée ; les causes sont cataloguées dans Refus et modes d'échec. |
Statuts d'acceptation de run
Renvoyés par mission_run_accept. Un token de succès, six refus.
| Token | Sens | Que faire |
|---|---|---|
Accepted | Validé et fusionné ; exactement un changement enregistré ; le tip de la mission a avancé et reste vert. | Lisez la pile avec mission_changement_stack. |
StaleRefused | Le tip de la mission a bougé depuis que le run s'est branché. | Démarrez un run neuf depuis le nouveau tip — ne forcez jamais. |
MergeConflict | La branche du run ne fusionne plus proprement sur le tip. | Écartez-le et démarrez un run neuf depuis le tip courant. |
GroupAlreadyWon | Un autre run de ce groupe de compétition a déjà été accepté. | Rien — le groupe est décidé ; les branches perdantes sont supprimées. |
ValidationRefused | L'acceptation est physique, et le contrôle est fail-closed : si la validation ne passe pas — ou qu'aucun backend de validation n'est joignable dans votre environnement — l'accept est refusé plutôt que laissé passer. Le run reste Proposed ; rien ne fusionne. | Confirmez qu'un backend de validation est disponible (demandez à votre opérateur), puis réessayez — voir Refus et modes d'échec. |
NotProposed | Le run n'est pas en Proposed — il a déjà été accepté ou écarté. | Vérifiez avec mission_run_get. |
TipUnavailable | Le tip de la mission n'a pas pu être résolu. | Réessayez ; si cela persiste, voir Refus et modes d'échec. |
Issues d'un run
Le cycle de vie du run lui-même — les mêmes tokens que la cheatsheet des états.
| Token | Sens | Que faire |
|---|---|---|
Proposed | État de naissance : les changements du run existent sur sa branche et nulle part ailleurs. | Inspectez-le, puis acceptez ou écartez. |
Accepted | La fusion a passé la validation physique ; un changement a atterri. | — |
Rejected | Décliné — écarté via discard, ou rejeté automatiquement quand un frère concurrent a été accepté ; la branche est supprimée ; rien n'a atterri. | — |
Superseded | Remplacé par un autre run ; n'est plus en jeu. | — |
Statuts de version
Les seules transitions légales sont Draft → Published → Archived.
| Token | Sens | Que faire |
|---|---|---|
Draft | Éditable — le seul état qu'acceptent workflow_update_draft et workflow_delete_draft. | Itérez, validez, publiez. |
Published | Gelé et sommé ; exécutable ; jamais muté en silence. | Pour le changer, ouvrez une nouvelle version draft. |
Archived | Terminal ; conservé pour la provenance ; plus de nouveaux runs. | — |
États des nodes d'un run
Les statuts par node tels que rapportés par workflow_run_nodes et le récapitulatif de mission_run_get.
| Token | Sens | Que faire |
|---|---|---|
Pending | Les steps en amont ne sont pas finis ; le node n'est pas encore éligible. | Rien — normal. |
Ready | Éligible, en attente de dispatch. | Rien — normal. |
Dispatched | Remis à son exécuteur, pas encore de progression rapportée. | Rien — normal. |
InProgress | En cours d'exécution. | Suivez via workflow_run_nodes. |
Completed | Terminé avec succès. | — |
Failed | Terminé en échec ; le récapitulatif porte la raison de l'échec. | Voir Refus et modes d'échec. |
Cancelled | Arrêté par la mission ou un opérateur. | — |
Paused | En attente d'une décision humaine ou d'un événement. | Pour les gates : decision_list, puis decision_respond. |
AwaitingGate | Dérivé de Paused : cette pause précise est une gate en attente de décision. | Résolvez-la avec decision_respond. |