Aller au contenu

Fichiers générés

Une tâche, une conversation dans l’assistant ou une requête API peut produire un fichier : classeur Excel, document Word, CSV, texte, JSON ou HTML. Le fichier est stocké chiffré, téléchargeable là où il a été produit, et peut partir en pièce jointe de la livraison d’une tâche.

Le choix n’est pas cosmétique : il décide de ce que coûte le fichier et de sa fiabilité.

Ce que vous produisezQuand
create_fileLe modèle rédige le contenuUn rapport, une synthèse, une note
miraca.file.write() (dans un script)Le script calcule le contenuUn export, un tableau issu d’une base ou d’un connecteur

La règle : si les lignes viennent d’une source, passez par un script. Si les phrases viennent du modèle, create_file suffit.

Pourquoi c’est important : le contenu de create_file transite par la réponse du modèle, donc il est facturé en tokens de sortie et plafonné. Un tableau de plusieurs centaines de lignes dicté de cette manière sera coupé. Un script, lui, traite les données sans qu’elles n’entrent jamais dans le contexte du modèle : l’export est exact, et il ne coûte presque rien.

Dans un script run_code, l’objet miraca.file écrit un fichier à partir de données récupérées par les autres ponts (miraca.kb, miraca.connector) :

const factures = [];
let cursor = null;
do {
const page = await miraca.connector("pennylane").call("list-customer-invoices", { cursor });
factures.push(...page.invoices);
cursor = page.next_cursor;
} while (cursor);
const impayees = factures.filter((f) => f.status !== "paid");
await miraca.file.write({
format: "xlsx",
filename: "impayees-2026",
sheets: [
{
name: "Impayées",
columns: ["Numéro", "Client", "Montant HT", "Échéance"],
rows: impayees.map((f) => [f.number, f.customer.name, Number(f.total_ht), f.due_date]),
},
],
});
console.log(`${impayees.length} factures impayées exportées`);
FormatChamp à fournirNature
xlsxsheets: [{ name, columns, rows }], ou rows + columns pour une feuille uniquetableur
csv, tsvrows, et columns pour l’en-têtetableur
docx, rtftext — du markdown (titres, listes, tableaux, gras) ; du HTML y est convertidocument mis en forme
htmltext — du HTML, écrit tel quel (styles compris), ou du markdown, mis en formepage web
pptxslides: [{ title, bullets, notes }], ou text markdown (chaque titre ouvre une diapositive) ; du HTML y est convertiprésentation
md, txt, jstext, écrit tel queltexte ou code
svgtext — le balisage SVG complet, écrit tel quelschéma ou illustration vectorielle
jsondata (objet ou tableau)données

Le html accepte les deux matières, et c’est voulu : demander « une page web » donne le plus souvent une page complète (<!DOCTYPE html>, styles compris), qui est alors écrite intégralement, sans rien réinterpréter. Un contenu en markdown reste mis en forme dans une page sobre. Un fichier HTML est toujours servi en téléchargement, jamais affiché sur nos domaines.

Une page HTML produite est autonome. Elle s’ouvre hors ligne, sans rien charger d’Internet : les styles et les scripts sont dans la page, les graphiques sont dessinés en SVG inline par le code qui produit la page, les images sont encodées en data URI. Une page qui charge un script, une feuille de style, une police, une image ou un cadre depuis une adresse distante (un CDN, par exemple) est refusée à l’écriture, avec le correctif à appliquer ; les liens <a href> vers des sites restent permis. C’est ce qui garantit qu’un livrable se lit dans dix ans sur un poste sans réseau, et qu’ouvrir un rapport ne signale rien à un tiers.

Ce refus est doublé d’une politique de sécurité du contenu inscrite dans chaque page produite : le navigateur y interdit lui-même toute sortie réseau — script distant, police, image, fetch, WebSocket, envoi de formulaire — pendant que les styles et le JavaScript de la page continuent de fonctionner normalement. Le refus à l’écriture attrape ce qui se voit dans le code ; la politique couvre ce qui ne s’y voit pas, comme une requête construite à l’exécution. Elle s’applique aussi bien dans l’aperçu du portail qu’au double-clic sur le fichier téléchargé.

Le svg est la seule image qu’un modèle puisse produire, et c’est parce qu’il s’agit de balisage : un modèle écrit du texte, pas des pixels. Un schéma, un organigramme, un badge s’écrivent donc directement, s’ouvrent dans n’importe quel navigateur, s’importent dans un traitement de texte ou un logiciel de présentation, et ne pixellisent jamais. Un contenu qui ne comporte pas de balise <svg> est refusé plutôt que produit : un fichier .svg qui ne s’ouvre nulle part serait pire qu’une erreur. Le PNG et le JPEG ne sont pas proposés, pour la même raison que le PDF : ils demanderaient un moteur de rendu, et le rendu du texte y dépendrait des polices installées sur le serveur.

Le rtf s’ouvre partout sans rien installer (TextEdit, WordPad, outils métier anciens) : c’est le format de repli quand on ignore ce dont dispose le destinataire. Le js, comme md et txt, est écrit sans aucun reformatage — un script réindenté ne s’exécute plus.

Exemple de présentation :

{
"format": "pptx",
"filename": "bilan-2026",
"slides": [
{ "title": "Bilan 2026", "bullets": ["Recettes en hausse", "Deux recrutements"],
"notes": "Insister sur la trésorerie" },
{ "title": "Perspectives", "bullets": ["Nouveau marché"] }
]
}

Envoyez les montants et les quantités comme des nombres, pas comme des chaînes : sinon le destinataire ne peut ni trier ni sommer sa colonne dans Excel.

Un graphique ne se dessine pas : il se décrit, et la plateforme le trace aux couleurs de la charte, avec une échelle graduée, des nombres au format français et des libellés qui ne se chevauchent jamais. La description est un objet JSON, placé dans un bloc de code graphique (dans le markdown d’une page html, d’un document Word ou d’un diaporama), dans une balise <graphique> (dans du HTML), ou dans le champ graphique d’une diapositive :

```graphique
{"type": "barres", "titre": "Taux de complétion par quête", "unite": "%",
"categories": ["Carton Plein", "Curieux"], "valeurs": [12.5, 0], "source": "Base Greentaf"}
```
ChampRôle
typebarres, barres-horizontales, courbe, anneau (8 parts au plus) ou jauge
categoriesle nom de chaque barre, point ou part
valeursune valeur par catégorie (une seule série)
seriesplusieurs séries : [{"nom": "2025", "valeurs": [...]}]
unite%, €… collés aux nombres, ou un mot (« jeunes ») indiqué à part
titre, sourceaffichés au-dessus et au-dessous du graphique
empile, trierbarres empilées ; barres classées de la plus grande à la plus petite
maxmaximum de l’axe, ou valeur pleine d’une jauge ({"type": "jauge", "valeur": 62, "max": 100})

L’unité est dite une fois, à droite du titre (« en % »), jamais répétée sur chaque graduation. Une jauge dont le maximum est un petit nombre entier (40 au plus) devient un pictogramme : le chiffre en grand, « sur 12 · 8,3 % », puis un bloc par unité, plein pour ce qui est atteint.

Le même graphique est un dessin vectoriel dans une page html, une image dans un document Word (ou un tableau des mêmes données si l’image ne peut pas être produite) et un vrai graphique PowerPoint, modifiable, dans une présentation. Les classeurs Excel n’ont pas de graphique. Une description invalide est refusée avec ce qu’il faut corriger.

La plateforme tient la forme (proportions, marges, filets, titres, numérotation) ; le contenu n’en déclare que la structure.

En-tête de document (page html et document Word), en toute première ligne, facultatif :

---
organisation: Association Rivages
type: Guide
version: 2
date: 9 octobre 2026
---

L’organisation s’affiche à gauche de l’en-tête de page, la nature, la version et la date à droite. S’y ajoutent titre, sous-titre et auteur, puis quatre options : couverture: oui (page de garde), sommaire: oui (sommaire à liens), numerotation: oui (sections « 01 », sous-sections « 1.1 ») et orientation: paysage.

Marqueurs, chacun sur une ligne seule : [[sommaire]], [[saut de page]], [[paysage]] et [[portrait]] (une section de document Word change d’orientation ; une page html n’a qu’une orientation d’impression). Notes de bas de page : texte[^1], puis [^1]: la note, rendues en vraies notes dans un document Word et en fin de page en html.

Composants, à nommer sans écrire de couleur ni de CSS :

ComposantBalisage
Chapôle paragraphe qui suit le titre #, ou <p class="chapeau">…</p>
Chiffres clés<div class="kpis"><div class="kpi"><span>Libellé</span><strong>12</strong><small>précision</small></div></div> ; le chiffre principal : <div class="kpi principal">
Encadré<div class="encadre"><strong>À retenir :</strong> texte</div> (variantes attention, reussite, alerte)
Étiquette<span class="badge"> (variantes accent, discret)
Couleurs de la charteclasse couleur-1, couleur-2… sur une étiquette, un encadré ou un chiffre clé
Deux colonnes<div class="colonnes">…</div>
Fiche<dl class="cartouche"><dt>Lieu</dt><dd>…</dd></dl>
Lettre<p class="expediteur">, <p class="destinataire">, <p class="objet">, <p class="signature">
Source<p class="source">Source : …</p>

Dans un tableau, les colonnes de nombres sont alignées à droite et les cellules « Oui » et « Non » prennent une pastille. Une citation markdown (> texte) est composée dans la police des titres. La couleur d’un texte posé sur un aplat de la charte est calculée pour rester lisible (une étiquette jaune s’écrit en sombre). Les mêmes composants sont traduits dans un document Word.

Diaporama : une diapositive accepte, en plus de title, bullets, notes et graphique, jusqu’à trois chiffres clés ([{ "valeur": "1 / 4", "libelle": "quête terminée" }], posés à gauche du graphique), une phrase clé sous le titre (un mot en *italique* y prend la police des titres) et miseEnAvant: true (fond de la couleur principale, à réserver à une diapositive sur trois ou quatre). Le champ entete, à côté de slides, donne le nom du projet écrit en tête de chaque diapositive. La première diapositive sans graphique sert d’ouverture ; une diapositive faite d’un titre seul, de section.

Chaque fichier est rouvert et relu avant d’être livré, par un lecteur indépendant de celui qui l’a écrit. La relecture juge ce que le destinataire verra : aucun balisage ni markdown affiché en toutes lettres (dans une page, un document Word ou une présentation), des graphiques SVG bien formés dont les libellés tiennent dans le cadre, des couleurs qui existent dans la charte, des scripts qui compilent, et un fichier .svg que tout logiciel saura ouvrir. Un fichier qui ne passe pas n’est ni stocké ni livré : la raison et le correctif reviennent au modèle, qui renvoie un fichier corrigé.

Dans une page html écrite en markdown, les blocs HTML (figures SVG, cartes, tableaux) sont gardés tels quels. Dans une présentation, le gras et l’italique markdown des puces sont rendus en vraie mise en forme.

Le fichier est aussi regardé tel que le destinataire le verra. Il est rendu en images sur nos serveurs, sans aucun accès à Internet : une page dans un navigateur, un document Word, une présentation ou un classeur dans une suite bureautique. Deux contrôles suivent :

  • une mesure de la page rendue : texte trop peu contrasté, textes qui se chevauchent, texte coupé ou sorti de son cadre ;
  • une relecture de l’image par le modèle de la conversation, s’il sait lire les images : graphique faux, valeur différente de la demande, zone vide.

Les défauts relevés reviennent au modèle, qui refait le fichier sous le même nom : la version corrigée remplace la précédente, et vous ne recevez qu’un fichier. Chaque fichier est relu deux fois au plus par réponse. L’étape « Relecture visuelle » du déroulé dit ce qui a été trouvé. Quand la pseudonymisation est active, aucune capture n’est faite.

La relecture ne garantit pas la justesse d’un graphique (une part d’anneau mal proportionnée peut lui échapper), ni la mise en page fine, qui dépend du logiciel qui ouvre le fichier.

Un classeur peut porter des cellules calculées, qui suivent les données quand le destinataire les modifie : un total, une moyenne, une recherche. Une formule se déclare comme un objet { "formula": "…" } à la place d’une valeur, avec ou sans le = initial :

{
"format": "xlsx",
"filename": "analyses",
"sheets": [
{ "name": "Transactions", "columns": ["Date", "Libellé", "Montant"],
"rows": [["2026-01-04", "Cotisation", 120], ["2026-01-09", "Loyer", -800]] },
{ "name": "Analyses", "columns": ["Indicateur", "Valeur"],
"rows": [
["Total", { "formula": "SUM(Transactions!C2:C3)" }],
["Moyenne", { "formula": "AVERAGE(Transactions!C2:C3)" }]
] }
]
}

Ce qui est admis :

  • les fonctions de calcul, de texte, de dates et de recherche courantes, en anglais comme en français (SUM/SOMME, AVERAGE/MOYENNE, COUNTIF/NB.SI, IF/SI, IFERROR, ROUND, INDEX, MATCH, VLOOKUP, XLOOKUP, SUMPRODUCT, TEXT, LEFT, YEAR, EOMONTH, UNIQUE, SORT, FILTER, MEDIAN, STDEV…) ; un nom français est enregistré sous son nom anglais, le seul que le fichier connaisse (Excel l’affiche ensuite dans la langue du lecteur) ;
  • les références aux feuilles du même classeur : Feuille!A1:B9, ou 'Ma feuille'!A1 quand le nom comporte des espaces ;
  • 500 caractères au plus par formule.

Ce qui est refusé, avec un message qui dit pourquoi :

  • toute fonction hors de cette liste ;
  • les fonctions qui ouvrent une porte sur le poste du destinataire : appel réseau (WEBSERVICE, FILTERXML, IMPORTXML…), exécution ou échange dynamique (DDE, CALL, EXEC, RTD), lien cliquable (HYPERLINK), référence construite depuis une donnée (INDIRECT), divulgation du système (CELL, INFO) ;
  • les références à un classeur externe ([Autre.xlsx]Feuil1!A1) ;
  • une formule qui se cite elle-même (E7/B7 posée en E7, ou une plage qui contient sa propre cellule) : le tableur afficherait une erreur au lieu du résultat.

Les nombres sont mis en forme par colonne, d’après leur en-tête : séparateurs de milliers, unité « € », pourcentage pour une colonne « % » ou « taux », une décimale pour un quotient ; une colonne d’années, de codes ou de numéros n’est pas touchée. Une ligne qui commence par « Total » est graissée sous un filet.

Deux règles à connaître. Une chaîne qui commence par = n’est jamais une formule : elle est écrite comme du texte, exactement comme avant. Seule la forme objet déclare un calcul, et c’est ce qui garantit qu’une donnée venue d’une source (site web, connecteur) ne devient pas une formule à votre insu. Quand c’est l’assistant qui dicte le classeur, une telle chaîne (« =C2-B2 ») lui est renvoyée avec la forme objet à employer. Et les formats csv et tsv refusent les formules : un fichier délimité est du texte, et le tableur qui l’ouvre évalue ce qu’il y trouve. Envoyez la valeur calculée, ou choisissez xlsx.

Le classeur demande le recalcul à l’ouverture : les formules n’emportent pas de résultat en cache, Excel ou LibreOffice les évalue au premier affichage. À la relecture du fichier, la plateforme vérifie que les formules présentes sont exactement celles déclarées, ni plus ni moins ; elle ne les évalue pas, et ne vérifie donc pas qu’une référence vise la bonne colonne.

Le nom de fichier est assaini et l’extension est imposée par le format : un .xlsx qui contiendrait du CSV serait un piège pour la personne qui l’ouvre.

Trois règles d’écriture, apprises sur de vrais classeurs : le séparateur d’arguments est la virgule (SUMIF(A:A,">0",B:B)) et un point-virgule est traduit automatiquement ; un nom de feuille qui contient une espace se met entre apostrophes ('Transactions triées'!E2:E173), sinon la cellule s’ouvre en #NAME? ; et un intervalle ne se met jamais entre guillemets (SUMIF(E2:E173,"<0"), pas SUMIF("E2:E173","<0")), sinon Excel le lit comme un texte. Les deux derniers cas sont refusés à l’écriture avec un message qui dit comment corriger.

Créer un fichier ne l’envoie pas. Pour le transmettre, l’agent appelle deliver en précisant les fichiers à joindre :

{ "content": "Voici l'export des impayés.", "file_ids": ["…"] }

Les fichiers partent alors vers les destinations configurées de la tâche (le modèle ne choisit jamais le destinataire), sous la forme adaptée à chaque canal :

CanalCe qui part
Emailpièce jointe
Slackfichier téléversé dans le canal ou le message direct
Webhookun lien signé dans files[], valable 7 jours

Si l’agent ne livre rien de lui-même, le repli automatique envoie la réponse et les fichiers produits.

Au-delà d’environ 25 Mo cumulés, les fichiers ne sont pas joints à l’email : celui-ci le signale et ils restent téléchargeables depuis l’historique d’exécution.

Le webhook reçoit des liens plutôt que le contenu, pour ne pas gonfler le corps JSON :

{
"task": { "slug": "impayes" },
"run_id": "…",
"output": "12 factures impayées.",
"files": [
{
"filename": "impayees.xlsx",
"url": "https://app.miraca.fr/api/files/…?token=…",
"expires_at": "2026-09-11T08:00:00.000Z"
}
]
}

Le lien porte un jeton signé : il n’ouvre que ce fichier, et il expire. Make et n8n savent télécharger une URL directement.

Le bot peut lui aussi produire un fichier : demandez-lui un tableau, il le dépose dans le fil. Cela demande la même réinstallation que ci-dessus.

Le contenu du fichier transite alors par Slack, comme les messages du bot : c’est un canal de confort, pas la voie souveraine. Pour un livrable sensible, préférez l’assistant.

À partir du niveau de réflexion Rapide, l’assistant peut produire un fichier sans réglage préalable : demandez-lui un tableau ou un document, et une carte de téléchargement apparaît sous sa réponse. Elle réapparaît quand vous rouvrez la conversation.

Un fichier produit dans une conversation appartient à vous, pas à l’organisation : il suit la confidentialité de la conversation qui l’a fait naître, comme les messages.

Chaque carte montre la première page du fichier sur toute sa largeur : un rapport se reconnaît à son titre, une présentation à sa première diapositive. Touchez cet aperçu (la pastille Voir le rappelle) pour ouvrir le fichier à côté de la conversation, en écran partagé : vous lisez le classeur ou le rapport pendant que vous continuez à écrire à l’assistant, sans passer par un autre logiciel. Sur un écran étroit (téléphone, fenêtre réduite), l’aperçu prend tout l’écran et se referme d’un geste.

Tous les formats que l’assistant sait produire s’affichent :

FormatCe que vous voyez
Classeur Excel, CSV, TSVUn tableau par feuille (onglets), nombres alignés, lignes par tranches de 200
Document Word, MarkdownLe texte mis en forme (titres, listes, tableaux, gras)
Présentation PowerPointUne carte par diapositive : titre, points, notes du présentateur
Page HTMLLa page elle-même, scripts et graphiques compris
Image SVGL’image
Texte, RTF, JSON, JavaScriptLe contenu, réindenté pour le JSON

Ce que vous voyez est un aperçu du contenu, pas le fichier lui-même : la mise en page d’un document Word, les styles d’une présentation ou la largeur des colonnes d’un classeur ne sont pas reproduits, et les formules d’un classeur apparaissent vides tant qu’Excel ne les a pas calculées. Un tableau de plus de 2 000 lignes est coupé dans l’aperçu, et l’aperçu le dit ; le fichier téléchargé, lui, est toujours complet.

Une page HTML est affichée dans un cadre isolé : elle ne peut lire ni votre session, ni vos autres fichiers, ni la page qui l’entoure. C’est ce qui permet de montrer un document écrit par un modèle, dont le contenu peut venir d’une page web lue par l’agent, sans lui donner accès à quoi que ce soit.

Dans le volet Fichiers de la discussion (trombone en haut à droite), sur la page Mes fichiers de l’assistant et sur la page Fichiers du portail, chaque fichier montre sa page entière en petit ; survolez-la avec le pointeur pour l’agrandir. Sur un téléphone, toucher la vignette ou « Voir » ouvre l’aperçu.

Chaque fichier a une vignette : sa première page (le haut d’un document, la première diapositive d’une présentation, le début d’un classeur), en grand sur la carte de la conversation, en petit dans les listes. Vous reconnaissez un fichier avant de l’ouvrir, dans la conversation comme dans les listes de fichiers. Elle apparaît quelques secondes après la création du fichier ; un fichier plus ancien reçoit la sienne la première fois qu’il s’affiche. Une archive n’en a pas, et la carte garde alors l’icône de son format.

Télécharger propose deux choix quand le fichier peut l’être en PDF : son format d’origine (Word, Excel, PowerPoint, page HTML…) et PDF. Le PDF est fabriqué au moment où vous le demandez, avec les polices de la charte, puis téléchargé ; il n’est pas conservé à part. Tous les formats ont un PDF, sauf les images (PNG, JPEG, WebP, GIF, SVG), un fichier qui est déjà un PDF, et une archive.

Vignette et PDF sont fabriqués sur nos serveurs, par le même service que la relecture : le fichier ne part chez aucun tiers. La vignette est chiffrée comme le fichier, et effacée avec lui.

Partager, à côté de « Télécharger », crée un lien public : toute personne qui le reçoit ouvre le fichier sans compte. Elle le télécharge dans son format ou en PDF, et une page web s’affiche telle quelle, graphiques et scripts compris.

  • Le lien est valable 30 jours. Vous pouvez le prolonger de 30 jours (même adresse) ou le désactiver à tout moment ; il disparaît aussi avec le fichier.
  • La première fois, Miraca vous dit ce qu’implique un lien public avant de le créer. Seule une personne crée un lien : l’assistant ne publie jamais rien de lui-même.
  • Les liens vivent sur un domaine à part, miraca.page, jamais sur celui de l’application. Une page publiée y est isolée : elle ne peut ni lire vos données ou votre session, ni envoyer quoi que ce soit sur Internet, ni envoyer de formulaire, ni rediriger la personne ailleurs. Une barre au-dessus rappelle de n’y saisir aucun mot de passe et permet de signaler la page.
  • Les administrateurs d’une organisation peuvent fermer les liens publics de fichiers (Portail → Fichiers). Fermés, aucun lien ne se crée et les liens existants cessent de fonctionner.
  • Les téléchargements par un lien comptent dans le quota de téléchargement du compte qui possède le fichier.

Modifier un fichier, ou le reprendre dans une autre discussion

Section intitulée « Modifier un fichier, ou le reprendre dans une autre discussion »

Pour faire évoluer un fichier, demandez simplement la modification dans la conversation (« ajoute une section sur le budget », « passe la troisième diapositive en graphique ») : l’assistant relit le fichier tel qu’il l’a écrit, puis en produit une nouvelle version sous le même nom. Rien n’est refait de mémoire : un long rapport garde toutes ses sections.

Miraca garde pour cela la source de chaque document, présentation, page ou classeur produit : le texte et sa structure (titres, graphiques décrits, composants de la charte, diapositives, feuilles et formules d’un classeur). Elle est chiffrée comme le fichier et effacée avec lui. Un document Word produit avant le 11 octobre 2026 n’a pas de source : son texte en est extrait (titres, listes et tableaux), mais sa mise en page et ses graphiques sont à redécrire.

Reprendre (la bulle marquée d’un plus), sur la carte d’un fichier ou dans Mes fichiers, ouvre une nouvelle discussion où le fichier est copié. Le champ de saisie est prérempli (« À partir du fichier … : ») : complétez-le avec ce que vous voulez changer, puis envoyez. Rien ne part tout seul.

  • C’est une copie : supprimer la discussion d’origine, ou le fichier d’origine, ne touche pas au fichier repris. La copie compte dans votre espace de stockage.
  • Seuls vos fichiers produits se reprennent : ni les livrables d’une tâche de l’organisation, ni les fichiers joints à une note.
  • La reprise est un geste de votre part : l’assistant ne va jamais chercher seul un fichier d’une autre discussion.

Un fichier produit par l’assistant n’est pas écrit tel quel : Miraca l’habille. Le modèle fournit le contenu, la plateforme pose l’identité (logo, en-tête, couleurs, polices, pied de page). Deux modèles qui produisent la même analyse rendent ainsi deux documents de la même famille.

La charte se règle à trois niveaux, fusionnés champ par champ, chacun ne remplaçant que ce qu’il pose :

  1. Miraca : le défaut, une charte éditoriale : beaucoup de blanc, des filets plutôt que des cartes, des titres en Newsreader et le texte en Instrument Sans, un violet et un ocre pour accents. Aucun logo ni pied de page : un fichier ne porte aucune mention de Miraca, seulement le logo et le pied que votre organisation (ou la personne) a écrits.
  2. L’organisation : page Gestion : Charte graphique (owner ou admin). Couleurs, couleurs de la charte, police du texte et police des titres, titre et sous-titre d’en-tête, logo, pied de page, composants et CSS personnalisé. Un aperçu, à droite des réglages, montre une page produite au fil des réglages.
  3. La personne : dans l’assistant, Mes préférences → Charte des livrables. Ce qu’elle pose prime sur l’organisation ; ce qu’elle laisse vide en hérite. Sa charte la suit dans toutes ses organisations.

Ce qui est garanti, quel que soit le niveau :

  • Aucune ressource distante. Une police Google et le logo sont intégrés au fichier (le logo fait 140 Ko au plus). Un document s’ouvre hors ligne et ne signale sa lecture à personne, pas même à Google.
  • Une charte n’injecte rien. Les textes (titre, sous-titre, pied) sont échappés ; un logo n’est accepté qu’en image (PNG, JPEG, SVG, WebP).
  • Le contenu du modèle est conservé tel quel. S’il envoie un document complet, son titre sert d’en-tête et ses propres styles s’appliquent après les nôtres.

Dans un script (exécution de code), les valeurs résolues sont lisibles dans miraca.style (palette, chartPalette, font, headingFont, locale, currency) : un graphique dessiné en SVG peut ainsi reprendre les couleurs de la charte. Dans une page html, le modèle est invité à employer les variables CSS (var(--color-primary), var(--chart-1) à var(--chart-8)) et les classes .grid, .card, .kpi, plutôt que des couleurs en dur.

De 1 à 12 couleurs, dans l’ordre : elles colorent les séries des graphiques, et aussi les étiquettes, les encadrés et les chiffres clés qui en demandent une (couleur-1, couleur-2…). Une couleur s’ajoute ou se retire dans la page de la charte.

RéglageChoix
Arrondi des blocs, épaisseur des borduresen pixels (0 à 24 ; 0 à 4)
Taille du texte13 à 19 px (10,5 pt dans un document Word pour 16 px)
Densitécompacte, normale, aérée (espacements et marges)
Ombre des blocsaucune, légère, marquée
Indicateurs et graphiquesentre des filets (défaut) ou dans des cartes
Ouverture des sectionspar un filet ou par un espace
Titreséchelle (sobre, normale, affirmée), graisse (normale, grasse), couleur (le texte par défaut), numérotation
Tableauxen-tête souligné, plein ou discret ; lignes alternées
Encadrés, étiquettesteinté, barre latérale ou contour ; pilule, arrondie ou carrée
Orientation par défautportrait ou paysage

Réservé à la charte de l’organisation : une feuille de style (20 000 caractères au plus) ajoutée en dernier dans les pages html produites, pour régler ce que les composants ne couvrent pas. Elle ne s’applique ni aux documents Word ni aux diaporamas. Toute ressource distante (@import, url(https://…)) est refusée : une page produite s’ouvre hors ligne.

Deux réglages : la police du texte et la police des titres (vide : celle du texte). Chacune se choisit parmi les quatre polices du système (sans empattement, humaniste, avec empattement, à chasse fixe) ou dans tout le catalogue Google Fonts, par une recherche et des catégories.

Une police Google n’est jamais chargée depuis Google par la personne qui lit le fichier : Miraca télécharge ses fichiers au moment où vous la choisissez, réduits aux caractères latins et à la typographie française (accents, « œ », « € », guillemets, espaces fines), puis les intègre dans chaque fichier produit. L’aperçu du formulaire passe lui aussi par Miraca.

FormatPolice Google
Page htmlintégrée (environ 60 Ko par graisse)
Document Wordintégrée (normal, gras, italique, gras italique) ; Word la garde au réenregistrement
Classeur Excelpolice système la plus proche (le format ne sait pas intégrer une police)
Diaporamaintégrée (normal, gras, italique, gras italique), au format qu’écrit PowerPoint ; PowerPoint la garde au réenregistrement

Une police de titres qui a une taille optique (Newsreader, la police par défaut) est intégrée en deux dessins : un pour les grands titres (titre du document, page de garde), un pour les intertitres. Les grands titres sont ainsi plus fins et plus contrastés, comme le ferait un navigateur. Les graisses mi-grasse et demi-grasse du texte (chiffres clés, légendes) sont intégrées dans les pages html quand la famille les a.

La police système la plus proche dépend de la catégorie de la famille : avec empattement pour une police à empattement, à chasse fixe pour une police de code, sans empattement sinon.

FormatCe que la charte y pose
Page htmlen-tête (logo et organisation à gauche, nature et date à droite), feuille de style complète, pied de page ; variables CSS pour le contenu du modèle
Classeur Excelligne d’en-tête à la couleur principale, couleur d’onglet, police, pied de page à l’impression
Document Wordmarges, police et encre du corps, titres dans leur police et à leur couleur, sections numérotées, en-tête courant (logo, organisation, nature et date), pied de page numéroté
Diaporamafond, titres dans leur police, police du texte, en-tête (projet, numéro), pied (source, logo), diapositives mises en avant sur la couleur principale
csv, tsv, md, txt, json, js, svg, rtfrien : ces formats n’ont pas de mise en forme à habiller

La charte de l’organisation habille aussi la page publique d’une note et son mode lecture (voir Notes) : couleurs, polices, logo, titre d’en-tête, forme des titres, des tableaux, des encadrés et des sections. Ni la charte personnelle, ni le CSS personnalisé n’y entrent : la page est celle de l’organisation, et son bandeau de signalement ne doit pouvoir être ni masqué ni fondu dans la page.

Sur un classeur, la charte ne déplace jamais une ligne : elle n’insère pas de titre au-dessus de l’en-tête. C’est ce qui garantit que les formules écrites par l’assistant (SUM(E2:E173)) continuent de porter sur les bonnes cellules.

⚠️ Le format du logo décide où il apparaît. Un PNG ou un JPEG s’affiche partout, y compris dans les classeurs, les documents Word et les diaporamas. Un SVG ou un WebP n’apparaît que dans les pages html : les formats bureautiques n’acceptent que des images matricielles. Si vos livrables incluent des documents Word ou des diaporamas, déposez donc un PNG.

Activez l’outil avec le jeton files :

{
"model": "mistral-small",
"messages": [{ "role": "user", "content": "Fais-moi un CSV des trois premiers mois." }],
"tools_enabled": ["files"]
}

La réponse porte alors un champ miraca_files :

{
"miraca_files": [
{ "id": "…", "filename": "mois.csv", "format": "csv", "bytes": 128 }
]
}

Le contenu se télécharge ensuite par GET /api/files/{id} avec la même clé.

  • Assistant / bac à sable : la carte sous la réponse qui les a produits.
  • Portail : dans le tableau de bord de la tâche, ouvrez une exécution — la section « Fichiers produits » liste les fichiers avec un bouton de téléchargement.
  • Assistant, « Mes fichiers » : ce que vous avez produit dans vos conversations. Ces fichiers vous sont personnels — les autres personnes de l’organisation n’y ont pas accès, y compris les administrateurs. C’est la vue disponible à tous les rôles, et la seule pour un membre cantonné à l’assistant. D’un projet de design, seuls les plans validés y figurent, et leur origine ramène au projet.
  • Portail, page « Fichiers » : la liste de tout ce que vos conversations et vos tâches ont produit, avec son origine (un lien ramène à la conversation ou à la tâche), sa date, sa taille, et un bouton pour le supprimer. Les livrables de tâches appartiennent à l’organisation et sont visibles des personnes de l’organisation : c’est ce qui permet à l’équipe de les consulter. C’est aussi là que se lit votre consommation de stockage.
  • API : GET /v1/files liste les fichiers du compte, GET /v1/tasks/{slug}/runs/{run_id} ceux d’une exécution précise.
  • Téléchargement direct : GET /api/files/{id}, avec votre clé sk- ou votre session.
Fenêtre de terminal
curl -H "Authorization: Bearer sk-…" \
https://app.miraca.fr/api/files/<id> -o export.xlsx

Les fichiers du compte, les plus récents d’abord. Paramètres : limit (1-200, défaut 50), offset, et run_id pour ne garder que ceux d’une exécution.

Fenêtre de terminal
curl -H "Authorization: Bearer sk-…" \
"https://app.miraca.fr/v1/files?limit=20"
{
"files": [
{
"id": "8f3c…",
"filename": "export-adherents.xlsx",
"format": "xlsx",
"mime": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"bytes": 48213,
"created_at": "2026-09-04T09:12:00.000Z",
"run_id": "b21e…",
"conversation_id": null,
"download_path": "/api/files/8f3c…",
"pdf_path": "/api/files/8f3c…/pdf",
"thumbnail_path": "/api/files/8f3c…/vignette"
}
],
"total": 37,
"offset": 0,
"page_size": 20,
"has_more": true,
"quota": {
"storage_bytes": 481209,
"storage_limit_bytes": 5368709120,
"storage_peak_bytes": 902144,
"egress_bytes": 0,
"egress_limit_bytes": 107374182400,
"compute_ms": 0,
"compute_limit_ms": 144000000
}
}

Le bloc quota répond à la question qui suit immédiatement « que contient mon espace ? ». Il ne porte aucun montant : ce sont des plafonds, pas des postes de facturation. storage_bytes additionne tout ce qui est stocké pour le compte : les fichiers produits, les espaces de travail, et les images jointes aux messages de l’assistant. Il peut donc dépasser la somme des fichiers listés.

pdf_path donne le fichier converti en PDF, et thumbnail_path sa vignette (JPEG de la première page, 640 pixels de large). Les deux s’appellent avec la même clé que download_path, et valent null pour un format qui n’en a pas (une image n’a pas de PDF, une archive n’a ni l’un ni l’autre).

Fenêtre de terminal
curl -H "Authorization: Bearer sk-…" -o rapport.pdf \
https://app.miraca.fr/api/files/<id>/pdf

Le PDF est converti à chaque demande (quelques secondes pour un gros document) : gardez-le de votre côté si vous le réutilisez. Il répond 503 si la conversion est momentanément indisponible (réessayez), 422 si le fichier ne peut pas être converti, et suit le même quota de téléchargement que le fichier. La vignette répond 404 tant qu’elle n’existe pas.

Le premier renvoie les métadonnées (le contenu reste sur /api/files/{id}, qui répond en binaire). Le second supprime le fichier, et réussit même s’il était déjà supprimé : une automatisation qui rejoue son nettoyage ne doit pas échouer sur un travail déjà fait.

Fenêtre de terminal
curl -X DELETE -H "Authorization: Bearer sk-…" \
https://app.miraca.fr/v1/files/<id>

Un fichier effacé répond 410 avec sa date, jamais 404 : vous avez prouvé votre accès, vous laisser croire à une erreur d’identifiant vous ferait chercher un lien qui n’existe plus. Un identifiant qui n’est pas à vous reste un 404.

Les fichiers sont chiffrés au repos et ne sont lisibles que par le compte propriétaire.

Les fichiers sont compris dans les sauvegardes de la plateforme, comme la base de données : une copie chiffrée, en France et chez un second hébergeur européen. Un fichier effacé, par vous ou par la durée de conservation, reste dans les sauvegardes 30 jours, le temps qu’elles expirent ; cette copie ne sert qu’à une reprise après incident. L’audio d’une réunion n’est jamais sauvegardé.

Une image déposée dans une note suit la note : elle est effacée avec la dernière note qui la cite, et avec les notes d’une personne qui quitte l’organisation.

Un administrateur fixe la durée de conservation des fichiers de l’organisation dans Réglages → Préférences & alertes : moins d’une heure, 1 jour, 7 jours, 30 jours, 3 mois, 6 mois, ou jamais. Passé ce délai, le fichier est effacé définitivement.

Trois durées peuvent s’appliquer à un même fichier — celle-ci, celle de la conversation ou de l’exécution qui le porte, et les 30 jours d’un fichier produit hors de tout contexte (appel API direct). La plus courte l’emporte : régler les fichiers sur 7 jours dans une organisation qui conserve ses conversations 30 jours donne bien 7 jours.

Le réglage « jamais » n’efface rien : l’espace de stockage se remplit alors au fil du temps, et c’est la cause la plus fréquente d’une saturation.

Un fichier effacé ne devient pas introuvable : le télécharger répond explicitement qu’il a été supprimé, avec la date (410 Gone). Pour quelqu’un qui n’y avait pas accès, la réponse reste un 404 — l’existence d’un identifiant n’est jamais révélée.

Trois consommations sont bornées par compte. Ce ne sont pas des postes de facturation : elles ne débitent aucun crédit et n’apparaissent sur aucune facture. Ce sont des garde-fous.

RessourcePlafond par défautCe qu’elle mesure
Stockage5 GoLes fichiers actuellement conservés
Téléchargement100 Go / moisLes octets servis par GET /api/files/{id}, aperçus compris
Calcul40 h / moisLe temps d’exécution cumulé des scripts du bac à sable

La page Fichiers du portail affiche les trois jauges, et prévient avant qu’un plafond soit atteint. Une fois le plafond franchi, la production de fichiers s’arrête : le modèle vous le dit dans sa réponse plutôt que d’échouer en silence.

Deux leviers pour repartir : supprimer des fichiers ou raccourcir la conservation (l’espace se libère immédiatement dans le premier cas, au prochain passage de la purge dans le second). Si votre usage dépasse durablement ces plafonds, contactez-nous : ils se relèvent par compte.

  • Un fichier ne dépasse pas 15 Mo, et une exécution en produit au plus 10.
  • Une feuille est plafonnée à 100 000 lignes. Au-delà, il s’agit d’un export de base de données, pas d’un livrable : filtrez ou agrégez en amont.
  • Un diaporama est plafonné à 100 diapositives et 20 puces par diapositive. Sa mise en page est sobre et fixe : appliquez votre thème dans PowerPoint si vous en avez un.
  • Le PDF n’est pas encore proposé. Un document Word s’exporte en PDF depuis Word ou LibreOffice.
  • Le .ppt binaire (Office 97-2003) non plus : plus aucune bibliothèque ne le produit, et PowerPoint ouvre le .pptx depuis 2007.