Agents

Importer et exporter un agent

Le format de fichier aidoo-agent/v1 : ce qu'il contient, ce qu'il laisse de côté, un exemple complet et la référence de chaque champ pour écrire ou adapter un agent à la main.

12 min de lectureMis à jour le 10 octobre 2026

Un agent Aidoo se décrit entièrement dans un fichier JSON. Vous pouvez l'exporter depuis sa fiche, le relire, le modifier dans un éditeur de texte, le versionner avec votre code ou le confier à un collègue, puis l'importer dans un autre espace de travail. Le fichier suit le format aidoo-agent/v1.

Trois usages courants :

  • Dupliquer entre espaces : un agent mis au point sur un premier Odoo se réinstalle en une minute chez un autre client ou sur une autre société.
  • Garder un historique : un fichier par agent dans un dépôt Git, et chaque changement de mission ou de règle devient une révision lisible.
  • Écrire un agent hors de l'interface : un intégrateur, un script ou un assistant d'IA peut produire le fichier ; Aidoo le valide à l'import et vous le montre dans l'assistant de création avant toute sauvegarde.

Exporter

Ouvrez la fiche de l'agent et cliquez sur le bouton JSON (icône de téléchargement) dans l'en-tête. Le navigateur télécharge agent-<nom-de-l-agent>.json. L'export est réservé aux propriétaires et administrateurs de l'espace.

Importer

Dans Agents > Nouvel agent, choisissez Importer un fichier JSON (aidoo-agent/v1). Aidoo vérifie le fichier, puis ouvre l'assistant de création prérempli. Rien n'est enregistré à ce stade : vous désignez l'identité Odoo, choisissez les utilisateurs Odoo qui verront l'agent dans le widget, relisez chaque étape, puis Créer l'agent le crée et l'active, comme n'importe quel autre agent. Un fichier invalide est refusé avec le champ en cause.

Si le fichier ne précise pas permissions.learning (et que l'agent n'est pas en mode workflowsOnly), il démarre en mode apprentissage et les règles du fichier servent de règles de départ.

Le fichier

{
  "schema": "aidoo-agent/v1",
  "exportedAt": "2026-09-16T10:00:00.000Z",
  "source": { "agentId": "64a1b2c3d4e5f6789012345a", "workspace": "ACME" },
  "agent": { "...": "la configuration, détaillée ci-dessous" }
}
CléRôle
schemaObligatoire, toujours "aidoo-agent/v1". C'est ce qui identifie le format.
exportedAtDate ISO 8601 de l'export. Informative, ignorée à l'import.
sourceAgent et espace d'origine. Informatif, ignoré à l'import.
agentLa configuration complète, décrite dans la référence plus bas.

Un fichier écrit à la main n'a besoin que de schema et agent.

Ce que l'export ne contient jamais

Le fichier est une configuration portable, pas un coffre. Il ne contient :

  • ni identité Odoo : à l'import, vous choisissez à nouveau le membre dont l'agent utilise les droits ;
  • ni clé API, ni jeton, ni identifiant de connexion ;
  • ni compétences, ni sources de connaissance, ni fichiers du Drive : ils appartiennent à l'espace ; réattachez-les après l'import ;
  • ni groupe d'agents : le groupe est propre à l'espace ; rangez l'agent dans un groupe après l'import ;
  • ni connexion aux apps externes : le fichier garde le nom de chaque app et les outils retenus, pas le compte connecté ; connectez l'app dans Intégrations de l'espace de destination ;
  • ni état d'exécution : historique de mission, observations du mode apprentissage, compteurs d'erreurs, curseurs d'événements.

Deux champs méritent un regard avant de partager un fichier : notifications.email.recipients (adresses e-mail) et assignedOdooLogins (identifiants Odoo des utilisateurs qui voient l'agent dans le widget). Videz-les si le fichier change de société. Les collaborators sont des identifiants d'agents de l'espace d'origine : à l'import dans un autre espace, ceux qui n'existent pas sont simplement ignorés. Les allowedWorkflowIds désignent eux aussi des workflows de l'espace d'origine : resélectionnez-les à l'étape Permissions. Les chemins de drive.folders sont repris tels quels : vérifiez que ces dossiers existent dans le Drive de destination.

Exemple complet

L'agent « Relance factures impayées » de la galerie, tel qu'il s'exporte :

{
  "schema": "aidoo-agent/v1",
  "agent": {
    "name": "Relance factures impayées",
    "avatar": { "seed": "finance-relance-impayes" },
    "mode": "scheduled",
    "instructions": "Chaque matin, liste les factures clients (account.move, move_type='out_invoice') validées, non payées et dont l'échéance est dépassée. Pour chacune, ajoute une note dans le chatter récapitulant le retard (jours, montant) et planifie une activité de relance pour le vendeur responsable. Termine par un résumé : nombre de factures en retard, montant total, top 5 des clients concernés.",
    "style": { "preset": "descriptive" },
    "model": { "provider": "auto", "modelId": "auto" },
    "environment": "production",
    "timezone": "Europe/Paris",
    "trigger": { "cron": "0 8 * * 1-5" },
    "permissions": {
      "workflowsOnly": false,
      "webAccess": false,
      "requireApproval": false,
      "email": false,
      "emailMode": "propose",
      "document": false,
      "askUser": false,
      "rules": [
        { "scope": { "groupKey": "facturation" }, "operations": ["query", "read"] },
        { "scope": { "models": ["mail.activity"] }, "operations": ["query", "read", "create"] },
        {
          "scope": { "models": ["account.move"] },
          "operations": ["query", "read", "write"],
          "valueConditions": [{ "field": "move_type", "operator": "=", "value": "out_invoice" }]
        }
      ],
      "learning": { "active": true }
    },
    "limits": { "timeoutSecondsPerRun": 300, "maxAutoEmailsPerRun": 10 },
    "autoPause": { "enabled": true, "maxConsecutiveErrors": 3 },
    "activeHours": { "enabled": false, "days": [1, 2, 3, 4, 5], "start": "08:00", "end": "18:00" },
    "notifications": {
      "email": { "enabled": false, "recipients": [], "frequency": "onlyOnError" },
      "odooChatter": { "enabled": false },
      "odooDiscuss": { "enabled": false },
      "questions": { "widget": true, "email": false }
    },
    "assignedOdooLogins": [],
    "commands": [
      {
        "id": "relance-client",
        "label": "Relancer un client",
        "prompt": "Relance toutes les factures en retard de ce client et résume ce que tu as fait.",
        "variables": [{ "name": "Client", "required": true }]
      }
    ]
  }
}

Référence des champs

Les valeurs marquées « défaut » peuvent être omises : Aidoo les complète à l'import.

Identité et mission

ChampTypeDescription
nametexte, 1 à 80 caractèresNom affiché.
avatar.seedtexte, 1 à 64 caractèresGraine de l'avatar généré. Défaut : aléatoire.
avatar.characterentier, 1 à 20Personnage illustré de l'agent. Absent : attribué automatiquement.
modescheduled, event ou conversationalPlanifié, déclenché par un événement Odoo, ou uniquement à la demande dans le chat.
instructionstexte, 1 à 20 000 caractèresLa mission. Voir Écrire une bonne mission.
style.presetdescriptive, concise, human, formal, technicalStyle des restitutions. Défaut : descriptive.
style.humanTonewarm, direct, enthusiastic, casualNuance du style human.
style.languagefr, en, es, de, pt, ar, nl, fiLangue des restitutions. Défaut : langue du compte.

Modèle et environnement

ChampTypeDescription
model.providerauto, anthropic, openai, google, moonshot, deepseek, nvidiaFournisseur. auto laisse Aidoo choisir un modèle éco à jour ; c'est le choix recommandé et le plus portable.
model.modelIdtexteIdentifiant du modèle chez le fournisseur ; auto avec le fournisseur auto. Un modèle absent du catalogue ou non couvert par le palier est signalé à l'activation.
environmentproduction ou stagingConnexion Odoo utilisée. Défaut : production.
timezonefuseau IANAFuseau des plannings et des plages horaires. Défaut : Europe/Paris.

Déclencheur (trigger)

ChampTypeDescription
cronexpression cron, 5 champsPlanning principal (mode scheduled). Exemple : 0 8 * * 1-5, du lundi au vendredi à 8 h.
extraCronsliste, 4 au plusCréneaux supplémentaires (5 créneaux au total).
event.modelmodèle OdooModèle surveillé (mode event), par exemple crm.lead.
event.oncreate, update ou dateRéagir à la création, à la modification, ou à l'approche d'une date.
event.conditionsliste de triplets [champ, opérateur, valeur]Filtre au format domaine Odoo, par exemple ["stage_id", "=", 3].
event.pointsliste, 1 à 3 entréesPour on: "date" : { "dateField": "date_deadline", "offsetMinutes": -1440, "label": "J-1" }. Décalage entre -10080 et 10080 minutes (une semaine).

Permissions (permissions)

ChampTypeDescription
workflowsOnlybooléenL'agent ne peut qu'exécuter les workflows listés. Défaut : false.
allowedWorkflowIdslisteWorkflows autorisés quand workflowsOnly est vrai. Identifiants propres à l'espace.
webAccessbooléenRecherche et lecture de pages web. Défaut : false.
requireApprovalbooléenChaque écriture attend votre validation. Défaut : false.
emailbooléenPeut proposer des e-mails Odoo, à valider avant envoi. Défaut : false.
emailModepropose ou autoauto envoie sans validation, dans la limite de limits.maxAutoEmailsPerRun. Défaut : propose.
documentbooléenLecture des pièces jointes (PDF, images) par un modèle de vision. Défaut : false.
askUserbooléenEn exécution autonome, l'agent peut poser une question à un humain et reprendre avec sa réponse. Défaut : false.
drive.enabledbooléenAccès au Drive Aidoo : son dossier privé en écriture, le dossier shared en lecture. Défaut : false.
drive.foldersliste, 10 au plusDossiers autorisés en plus : { "path": "compta/exports", "access": "read" } (read ou write). Chemins propres à l'espace.
ruleslisteRègles d'accès, voir ci-dessous.
learning.activebooléenMode apprentissage. true ouvre une fenêtre de 48 heures à la création. Voir Règles et permissions.
collaboratorsliste, 5 au plusIdentifiants d'agents que celui-ci peut interroger ou solliciter.
mcpAppsliste, 5 au plusApps externes : { "appSlug": "slack", "source": "composio", "enabledTools": [...] }. source vaut composio (catalogue d'apps, défaut), custom (un de vos serveurs MCP) ou native (connecteur fourni par Aidoo). enabledTools (100 au plus) restreint l'agent à ces outils ; absent : tous les outils de l'app. Voir Intégrations.

Sauf en mode workflowsOnly, un agent doit avoir au moins une règle, une app externe, l'accès web, l'accès au Drive ou le mode apprentissage.

Chaque règle :

ChampTypeDescription
scope.groupKeyclé de groupeUn groupe fonctionnel entier (facturation, ventes, crm, stock...).
scope.modelsliste de modèles OdooOu une liste explicite. L'un des deux est obligatoire.
operationsquery, read, create, write, workflow, execute, report, printOpérations permises. La suppression n'existe pas : un agent ne supprime jamais.
valueConditionslisteConditions sur les valeurs : { "field": "amount_total", "operator": "<", "value": 5000 }. Opérateurs : =, !=, >, >=, <, <=, in, not in, ilike.

Limites et pause automatique

ChampTypeDescription
limits.maxToolCallsPerRunentier, 1 au moinsNombre maximal d'actions par exécution. Absent : illimité (défaut).
limits.maxTokensPerRunentier, 1 000 à 4 000 000Budget de tokens par exécution. Absent : l'équivalent de 100 crédits pour le modèle choisi, qui est aussi le minimum.
limits.timeoutSecondsPerRunentier, 30 à 4 500Durée maximale d'une exécution, en secondes. Défaut : 300.
limits.monthlyCreditBudgetentier positifPlafond de crédits par mois calendaire.
limits.maxAutoEmailsPerRunentier, 1 à 100E-mails envoyés automatiquement par exécution. Défaut : 10.
autoPause.enabledbooléenPause automatique après des erreurs consécutives. Défaut : true.
autoPause.maxConsecutiveErrorsentier, 1 à 20Seuil de mise en pause. Défaut : 3.
autoPause.maxWritesPerRunentier, 1 au moinsAu-delà, l'exécution s'arrête et l'agent se met en pause. Absent : illimité (défaut).

Plages horaires, notifications, visibilité, commandes

ChampTypeDescription
activeHours.enabledbooléenRestreindre les exécutions à une plage. Défaut : false.
activeHours.daysliste de 0 (dimanche) à 6Défaut : [1, 2, 3, 4, 5].
activeHours.start, activeHours.endHH:MMDéfaut : 08:00 et 18:00.
notifications.email.enabledbooléenRapport par e-mail. Défaut : false.
notifications.email.recipientsliste d'adressesDestinataires.
notifications.email.frequencyeveryRun, onlyOnError, dailyDigestDéfaut : onlyOnError.
notifications.odooChatter.enabledbooléenNote dans le chatter des enregistrements traités.
notifications.odooDiscuss.enabledbooléenMessage dans Discuss.
notifications.questions.widgetbooléenQuestions de l'agent affichées dans le widget Odoo des utilisateurs assignés. Défaut : true.
notifications.questions.emailbooléenQuestions envoyées par e-mail aux destinataires, avec un lien de réponse. Défaut : false. Le tableau de bord les affiche toujours.
assignedOdooLoginsliste, 200 au plusUtilisateurs Odoo qui voient l'agent dans le widget. Vide : l'agent n'apparaît dans le widget de personne.
commandsliste, 6 au plusBoutons de commande rapide du chat : id, label (40 caractères), prompt (2 000 caractères), variables (3 au plus, { "name", "required" }).

Compatibilité

  • Les champs inconnus sont ignorés à l'import : un fichier produit par une version plus récente d'Aidoo s'importe, au prix des réglages qu'elle a ajoutés.
  • Les champs absents prennent leur valeur par défaut.
  • Un fichier dont schema n'est pas aidoo-agent/v1 est refusé. Un nouveau numéro de version ne sera introduit que pour un changement incompatible, avec une passerelle depuis les fichiers v1.
  • L'export passe par la même validation que l'import : un fichier exporté se réimporte toujours.

Étape suivante