Format de fichier .blueprint.json¶
Page générée — ne pas éditer
Rendue au build par scripts/gen_doc_reference.py,
depuis schemas/blueprint-v1.schema.json.
Une modification manuelle serait perdue au build suivant.
Le format compilable lu par la Forge (grimoire serve) et par grimoire ext publish / grimoire ext add-blueprint. Un blueprint v1 déclare des nodes typés dont les pins portent un contrat ; une edge ne relie que deux pins qui portent le même. Les brouillons du Studio (blueprintVersion 2, ou des nodes sans clé pins) ne relèvent pas de ce schéma : la Forge les projette en v1 avant de valider, simuler ou compiler.
Racine¶
| Champ | Type | Obligation | Contraintes | Rôle |
|---|---|---|---|---|
blueprintVersion |
1 |
requis | — | Version du format. Vaut l'entier 1, et rien d'autre : grimoire ext publish refuse toute autre valeur. C'est la présence d'une clé pins sur les nodes qui distingue un vrai v1 d'un brouillon de Studio. |
id |
string |
requis | motif ^[a-z0-9]+(-[a-z0-9]+)*$ |
Identifiant du blueprint : minuscules et chiffres séparés par des traits d'union simples (web-pipeline). Il sert aussi de nom de fichier (<id>.blueprint.json) et de nom du mission pack compilé (.github/prompts/<id>.blueprint.prompt.md) — le renommer déplace donc deux artefacts, pas un. |
name |
string |
facultatif | — | Nom d'affichage. Facultatif ; à défaut, c'est l'id qui s'affiche dans les listes et dans le mission pack compilé. |
description |
string |
facultatif | — | Description libre. Facultative ; recopiée telle quelle dans le mission pack compilé. |
catalogRef |
object |
facultatif | — | Épingle la version du catalogue de patterns contre laquelle le blueprint a été écrit. Le compilateur trace catalogRef.version dans l'artefact généré, ce qui permet de détecter après coup qu'un flow a été composé contre un catalogue plus ancien que celui du projet. |
catalogRef.version |
string |
facultatif | — | Version du catalogue (1.0.0). Correspond au catalogVersion de l'export de catalogue. |
nodes |
array |
requis | min. éléments 1 | Les nodes du flow. Au moins un. Chaque node doit porter une clé pins, quitte à ce que la liste soit vide : si aucun node n'en porte, le fichier est traité comme un brouillon de Studio et re-projeté, ce qui contourne le typage déclaré. |
edges |
array |
requis | — | Les connexions typées entre pins. La clé est obligatoire, la liste peut être vide (flow à un seul node). Chaque extrémité s'écrit <nodeId>.<pinId>, et les deux pins reliés doivent déclarer le même contrat. |
boundaries |
array |
facultatif | — | Les régions d'isolation. Une boundary est une annotation transversale qui regroupe plusieurs nodes dans une même fenêtre mise en quarantaine (orchestrateur-worker) ; la région compile vers un seul dispatch de sub-agent. Facultative et additive — son absence signifie « pas de région ». Une région à un seul membre est le cas dégénéré de l'isolation déclarée sur le node lui-même (config.context.isolation). |
boundaries[].id |
string |
requis | — | Identifiant de la région. |
boundaries[].mode |
isolation |
requis | — | Nature de la région. isolation : fenêtre partagée mise en quarantaine. |
boundaries[].members |
array |
requis | — | Les ids des nodes contenus dans la région. Chaque id doit exister. Une edge qui sort de la région doit porter un contrat de digest. |
extensions |
array |
facultatif | — | Les extensions dont le blueprint dépend. grimoire ext add-blueprint compare ces ids aux extensions installées et signale celles qui manquent, avec la commande d'installation à lancer. |
extensions[].id |
string |
requis | motif ^[a-z0-9]+(-[a-z0-9]+)*$ |
Id de l'extension tel que publié au registre (par exemple crewai). |
compiled |
object |
facultatif | — | Écrite par le compilateur après une compilation réussie : horodatage, version de catalogue et empreintes des artefacts produits. Ne s'écrit pas à la main — toute valeur saisie ici sera écrasée. |
compiled.at |
string |
facultatif | — | Horodatage ISO 8601 de la compilation (UTC). |
compiled.catalogVersion |
string |
facultatif | — | Version du catalogue au moment de la compilation. |
compiled.artifacts |
array |
facultatif | — | Les artefacts produits, un par entrée. |
compiled.artifacts[].path |
string |
facultatif | — | Chemin de l'artefact généré, relatif à la racine du projet. |
compiled.artifacts[].hash |
string |
facultatif | — | Empreinte sha256:<hex> du contenu de l'artefact. |
compiled.artifacts[].sourceNode |
string |
facultatif | — | Id du blueprint (ou du node) dont l'artefact est issu. |
meta |
object |
facultatif | — | Métadonnées d'éditeur : marqueurs « validé » / « simulé », horodatages. Ignorée par le compilateur. |
Node¶
Un node du flow. kind décide comment ref est résolu et quels prérequis la simulation vérifie ; role décrit, indépendamment, ce que le node fait structurellement.
| Champ | Type | Obligation | Contraintes | Rôle |
|---|---|---|---|---|
id |
identifier |
requis | — | Id du node, unique dans le blueprint. Un doublon est une erreur bloquante. |
kind |
pattern · artifact · extension-node · composite · composite-inline · agent-spec |
requis | — | D'où vient le node. pattern : un pattern du catalogue (ref = son id). artifact : un fichier gouverné du projet (ref = chemin relatif, qui doit exister au moment de la validation). extension-node : un node fourni par une extension (ref = <extId>/<nodeId>, l'extension doit être installée pour compiler). composite : un sous-flow (ref = use-case:<id> ou un chemin .blueprint.json). composite-inline : un groupe de Studio aplati, informatif. agent-spec : une esquisse d'agent ou de déclencheur venue du Studio, informative. |
role |
Unit · Route · Scatter · Gather · Gate · Boundary · Reference |
facultatif | — | Classe sémantique du node, orthogonale à kind : kind dit d'où il vient, role dit ce qu'il fait. L'une des 7 primitives. Facultative et additive ; les 17 cases de la palette ne sont que des configurations de ces 7 (voir la page Palette). |
ref |
string |
requis | — | La cible pointée. Sa forme dépend de kind — les contraintes par kind sont détaillées plus bas. |
label |
string |
facultatif | — | Libellé d'affichage. Facultatif ; utilisé dans les listes, les étapes de simulation et le mission pack compilé. |
description |
string |
facultatif | — | Note libre sur le rôle du node dans le flow. Facultative, informative. |
pins |
array |
requis | — | Les points de connexion typés. Obligatoire sur tout node v1, une liste vide étant valide pour un node non relié : l'absence de cette clé sur tous les nodes rétrograde le fichier en brouillon de Studio. |
Formes de ref selon kind¶
ref quand kind vaut pattern — Id de pattern du catalogue, par exemple ORC-01 ou QUA-04 — trois majuscules, un tiret, deux chiffres. Vérifié contre le catalogue quand il y en a un.
ref quand kind vaut extension-node — <extensionId>/<nodeId>, tel que déclaré dans le manifeste de l'extension sous provides.nodes (par exemple crewai/crewai-crew). La compilation est bloquée tant que l'extension n'est pas installée dans le projet.
ref quand kind vaut composite — Soit use-case:<id d'un cas d'usage du catalogue>, soit un chemin relatif au projet vers un sous-blueprint, terminé par .blueprint.json.
Pin¶
Un point de connexion typé porté par un node. Une extrémité d'edge <nodeId>.<pinId> se résout en un pin, et les contrats des deux extrémités doivent être identiques — pas compatibles, identiques.
| Champ | Type | Obligation | Contraintes | Rôle |
|---|---|---|---|---|
id |
identifier |
requis | — | Id du pin, unique au sein de son node (in, out, mission, result…). |
direction |
in · out |
requis | — | in : le pin reçoit. out : le pin émet. |
contract |
string |
requis | long. min 1 | Le contrat porté par le pin (task-envelope, handoff-packet, evidence-pack…). Vérifié contre les contrats du catalogue quand il y en a un. C'est le type du système de types. |
Edge¶
Une connexion entre deux pins. Les deux extrémités doivent exister et porter le même contrat ; un contract déclaré sur l'edge doit être égal à celui des pins. Les edges définissent aussi l'ordre d'exécution : le flow doit être acyclique pour compiler.
| Champ | Type | Obligation | Contraintes | Rôle |
|---|---|---|---|---|
from |
string |
requis | motif ^[^.\s]+\.[^.\s]+$ |
Extrémité source, <nodeId>.<pinId>. Le pin visé doit avoir la direction out. |
to |
string |
requis | motif ^[^.\s]+\.[^.\s]+$ |
Extrémité destination, <nodeId>.<pinId>. Le pin visé doit avoir la direction in. |
contract |
string |
facultatif | — | Contrat explicite, facultatif. S'il est présent, il doit être égal au contrat des deux pins reliés — une divergence est une erreur bloquante. |
channel |
happy · failure · escalation |
facultatif | défaut happy |
Le canal d'exécution de l'edge. happy (par défaut) est le chemin nominal ; failure porte le routage de reprise, de repli, de compensation et de rebut ; escalation route vers un humain ou une autorité supérieure. L'absence vaut happy — les blueprints existants migrent sans perte. |
Politique de porte¶
La porte universelle paramétrée, portée par config.gate sur un node. Une primitive, six modes : une porte affirme une précondition et gouverne le passage — elle ne transforme jamais rien. Sa présence dérive role: "Gate". Le rejet réutilise les canaux d'edge typés.
| Champ | Type | Obligation | Contraintes | Rôle |
|---|---|---|---|---|
mode |
human · budget · evidence · output-contract · guardrail · mcp-trust |
requis | — | Ce que la porte vérifie. human : validation par une personne. budget : plafond de jetons ou de dollars. evidence : présence d'une preuve exigée. output-contract : conformité de la sortie à un schéma. guardrail : contrôles de contenu en entrée ou en sortie. mcp-trust : périmètre autorisé d'un serveur MCP. |
onReject |
escalation · failure · block |
facultatif | défaut block |
Comment le rejet se propage : escalation (par une edge d'escalade), failure (par une edge d'échec), ou block (arrêt net, valeur par défaut). |
params |
object |
facultatif | — | Paramètres propres au mode — human : action, approbateurs, seuil de confiance, pourcentage ; budget : maxTokens, maxUsd, portée ; evidence : ce qui est exigé et sous quel format ; output-contract : le schéma ; guardrail : direction et contrôles ; mcp-trust : serveur, outils autorisés, permissions. |
Politique de résilience¶
Politique locale à un node, portée par config.resilience. Ce qui n'a pas besoin d'une edge vit ici : la reprise bornée et le délai d'expiration. Le repli, la compensation et l'escalade, eux, sont des edges failure ou escalation portant un error-envelope. Additive ; son absence signifie « pas de politique ».
| Champ | Type | Obligation | Contraintes | Rôle |
|---|---|---|---|---|
retry |
object |
facultatif | — | La reprise. Bornée par construction. |
retry.max |
integer |
requis | min 1, max 10 | Nombre maximal de tentatives, entre 1 et 10. Une reprise sans max ne compile pas — c'est le garde-fou contre la boucle infinie. |
retry.backoffMs |
integer |
facultatif | min 0 | Délai d'attente entre deux tentatives, en millisecondes. |
retry.strategy |
fixed · linear · exponential |
facultatif | — | Progression du délai : fixed (constant), linear (croissance proportionnelle), exponential (doublement). |
timeoutMs |
integer |
facultatif | min 1 | Délai d'expiration du node, en millisecondes. |
onExhaustion |
escalate · deadletter · compensate |
facultatif | — | Ce qui se passe quand les tentatives sont épuisées : escalate (route vers une edge escalation), deadletter (met au rebut), compensate (déclenche la compensation). Dans les trois cas, la sortie passe par une edge typée. |
Suite d'évaluation¶
Une suite d'évals comportementales, portée par config.evals sur un node ou par evals à la racine du blueprint. Elle attache une preuve versionnée du comportement attendu. Elle est exécutée par l'hôte, pas par le Studio — le Studio ne fait jamais tourner un flow. Additive ; son absence signifie « pas de suite ».
| Champ | Type | Obligation | Contraintes | Rôle |
|---|---|---|---|---|
version |
string |
requis | — | Version de la suite, suivie avec le fichier .blueprint.json. Une suite non versionnée n'est pas une preuve : on ne saurait pas de quoi. |
cases |
array |
requis | — | Les cas de la suite, au moins un par assertion utile. |
cases[].id |
string |
requis | — | Id du cas. |
cases[].input |
object |
requis | — | L'entrée soumise au cas. |
cases[].assert |
array |
requis | min. éléments 1 | Les assertions du cas. Au moins une : un cas sans assertion ne prouve rien. |
cases[].assert[].kind |
contract · cost · no-refusal · verdict · path-taken |
requis | — | Ce qui est affirmé. contract : la sortie honore un contrat nommé. cost : le coût reste sous un plafond de jetons ou de dollars. no-refusal : l'agent ne doit pas refuser. verdict : le verdict attendu. path-taken : sous panne injectée, le chemin réellement emprunté. |
Identifiant¶
Les ids de node et de pin ne peuvent contenir ni point ni espace : une extrémité d'edge est lue en coupant <nodeId>.<pinId> au premier point. Un point dans un id rendrait la coupe ambiguë.