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.

OutilRôleEntrées clésRetourCodes de refus
workflow_create_draftCré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_draftRemplacer 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_materializeInjecter 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_controlEnregistrer 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_draftValidation à blanc — le même validateur que publish, qui agrège tous les problèmes en une seule passe. Ne change rien.idla liste complète des problèmes— (les problèmes sont renvoyés, pas levés)
workflow_publishValider, 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_renameDé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_archiveArchiver 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_draftSupprimer 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.

OutilRôleEntrées clésRetourCodes de refus
workflow_tile_catalogLister 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_flowrefRepointer 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 ciblele draft mis à jourNOT_FOUND · CONFLICT (pas un draft)
workflow_referenced_byLister 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.workflowIdla liste des consommateurs—

Découverte et observation (6 outils)

OutilRôleEntrées clésRetour
workflow_catalogLa 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_listToutes les versions d'un workflow, de la plus récente à la plus ancienne.workflowIdles versions avec status, checksum, dates
workflow_list_allLa dernière version de chaque workflow du tenant.—une ligne par workflow
workflow_getUne version avec son payload de graphe complet. version=0 (ou omis) signifie la dernière version publiée.workflowId ; optionnel versionla version complète, y compris graphJson
workflow_runsLes runs lancés depuis un workflow, du plus récent au plus ancien.workflowId ; filtre de version optionnella liste des runs
workflow_run_nodesLe 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 runles 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), optionnels objective, model, provider, paramsJson, projectId, presetId (+ forceOnAllCallSites), agentBudgetJson (+ forceBudgetOnAllAgentSites).
  • Les paramètres se lient à la compilation. Les valeurs de paramsJson sont 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. model et provider sont 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. presetId exécute cette invocation avec un preset nommé plutôt qu'un model brut ; un preset inconnu refuse avec NOT_FOUND au 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 aussi forceOnAllCallSites.
  • Budgets d'agent par run. agentBudgetJson ajuste 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 aussi forceBudgetOnAllAgentSites, qui impose les axes indiqués à chaque site agent, au-dessus de ce que le step a rédigé. Une surcharge malformée refuse avec VALIDATION_ERROR avant 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 avec NOT_FOUND et un projet non-Active avec CONFLICT, 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 missionId avec 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_get pour suivre la mission, decision_list pour trouver les gates en attente, workflow_run_nodes pour le statut par node.

Clonage (2 outils)

OutilRôleEntrées clésRetour
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_systemCloner 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)

OutilRôleEntrées clésRetour
workflow_system_listLister les 22 templates de la galerie, en lecture seule.—les résumés des templates
workflow_system_getUn template avec son graphe complet, pour l'inspecter avant de le cloner.workflowKeyle 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.

OutilRôleEntrées clésRetour
workflow_node_instructions_getLire 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 optionnellerédigé, liaison, effectif
workflow_node_instructions_setDéfinir le texte d'instruction manuel à une portée donnée.la référence du node, la portée, le textele slot mis à jour
workflow_node_instructions_clearRetirer l'instruction manuelle à une portée donnée.la référence du node, la portéele 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.

OutilRôleEntrées clésRetourStatuts
mission_run_startDé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 groupIdl'id du run + un token de statutles 11 statuts de démarrage de run
mission_run_getUn 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 runle détail du run—
mission_run_acceptL'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 runle changement en cas de succèsles 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 runconfirmation—
mission_changement_stackLes 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 missionla pile—
mission_revert_previewPré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 changementla cascade—
mission_revertExé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 changementla 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.

TokenSensQue faire
StartedLe 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.
FeatureDisabledWorkflows:MissionRuns:StartEnabled est désactivé dans cet environnement.Demandez à votre opérateur de l'activer — voir Refus et modes d'échec.
AgenticMissionUnsupportedLe 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.
MissionTerminalLa mission est déjà Completed, Failed ou Cancelled.Démarrez le run sur une mission vivante, ou invoquez-en une neuve.
MissionNotPlannedLa mission n'a pas encore atteint un état planifié.Attendez la fin de la planification, puis réessayez.
ChildSpawnerDisallowedLe graphe contient un node qui engendre des missions filles — interdit dans un run de mission.Exécutez ce workflow via workflow_invoke à la place.
RunAlreadyOpenStrict-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.
TipUnavailableLe tip de la mission n'a pas pu être résolu.Réessayez ; si cela persiste, voir Refus et modes d'échec.
WorkflowNotFoundAucun workflow ne correspond à ce workflowId et cette version.Vérifiez avec workflow_list.
NotInvocableCette version n'est pas Published.Publiez le draft, ou choisissez une version publiée.
MaterializationFailedLa 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.

TokenSensQue faire
AcceptedValidé et fusionné ; exactement un changement enregistré ; le tip de la mission a avancé et reste vert.Lisez la pile avec mission_changement_stack.
StaleRefusedLe 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.
MergeConflictLa branche du run ne fusionne plus proprement sur le tip.Écartez-le et démarrez un run neuf depuis le tip courant.
GroupAlreadyWonUn 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.
ValidationRefusedL'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.
NotProposedLe run n'est pas en Proposed — il a déjà été accepté ou écarté.Vérifiez avec mission_run_get.
TipUnavailableLe 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.

TokenSensQue faire
ProposedÉtat de naissance : les changements du run existent sur sa branche et nulle part ailleurs.Inspectez-le, puis acceptez ou écartez.
AcceptedLa fusion a passé la validation physique ; un changement a atterri.—
RejectedDécliné — écarté via discard, ou rejeté automatiquement quand un frère concurrent a été accepté ; la branche est supprimée ; rien n'a atterri.—
SupersededRemplacé par un autre run ; n'est plus en jeu.—

Statuts de version

Les seules transitions légales sont Draft → Published → Archived.

TokenSensQue faire
DraftÉditable — le seul état qu'acceptent workflow_update_draft et workflow_delete_draft.Itérez, validez, publiez.
PublishedGelé et sommé ; exécutable ; jamais muté en silence.Pour le changer, ouvrez une nouvelle version draft.
ArchivedTerminal ; 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.

TokenSensQue faire
PendingLes steps en amont ne sont pas finis ; le node n'est pas encore éligible.Rien — normal.
ReadyÉligible, en attente de dispatch.Rien — normal.
DispatchedRemis à son exécuteur, pas encore de progression rapportée.Rien — normal.
InProgressEn cours d'exécution.Suivez via workflow_run_nodes.
CompletedTerminé avec succès.—
FailedTerminé en échec ; le récapitulatif porte la raison de l'échec.Voir Refus et modes d'échec.
CancelledArrêté par la mission ou un opérateur.—
PausedEn attente d'une décision humaine ou d'un événement.Pour les gates : decision_list, puis decision_respond.
AwaitingGateDérivé de Paused : cette pause précise est une gate en attente de décision.Résolvez-la avec decision_respond.