Découvrir le Hub › Parcours

Parcours · administrateur de la plateforme

Confier une tâche à Alfred

Choisir les actions qu'Alfred pourra appeler, lui confier un relevé quotidien des certificats, le régler, puis le suivre au cockpit et dans l'historique.

Avant de commencer

Claire Martin veut savoir chaque matin quels certificats TLS du Hub d'Exemplia arrivent à échéance. Elle confie ce relevé à Alfred, l'agent du Hub : un prompt, confié à un modèle de langage, qui appelle des actions du Hub pour y répondre. Il vous faut un compte SUPERADMIN : tous les écrans d'Alfred sont sous /hub/**.

Rejouer tout le parcours dans le Hub

  1. Choisir la liste blanche

    Alfred agit par les actions des workers du Hub. Chaque run reçoit un profil (une whitelist) : le modèle ne voit que les actions de ce profil, les autres ne lui sont même pas proposées.

    Trois profils sont livrés avec le Hub et ne se suppriment pas :

    Profil Contenu
    readonly toutes les actions en lecture seule ; profil par défaut
    mail lecture seule, lecture et envoi de courrier, appel des applications
    apps lecture seule, démarrage et redémarrage d'applications

    Lister des certificats est une lecture : readonly suffit. Choisissez toujours le plus étroit. Un profil sur mesure se crée avec + Whitelist custom, en nommant les actions au format worker__action, séparées par des virgules ; @readonly y ajoute toute la lecture seule.

    À droite, la deny-list globale : delete_*, drop_*, purge_*, revoke_*, arrêts, restaurations, écritures de secrets… Aucun profil ne peut accorder ces actions, même en les nommant. Elle est écrite dans le code.

    ⚠ Un nom d'action mal écrit est ignoré sans message, à la création du profil comme au lancement d'un run. Vérifiez le nom exact dans la liste des outils MCP (tools/list) ou dans MCPagger.

    Faire cette étape dans le Hub → Pour aller plus loin : alfred.whitelists.ecran alfred.whitelists.creer.actions alfred.whitelists.denylist alfred.whitelists.profil.seede

  2. Créer la tâche

    Une tâche dit à Alfred quoi faire, quand, avec quels droits et dans quelles limites : un prompt, un déclencheur (CRON, EVENT, MANUAL), une whitelist et des budgets.

    L'écran Tâches ne crée pas de tâche. La création passe par l'action alfred_admin.create_task, par MCP ou par REST :

    { "name": "alfred_admin__create_task",
      "arguments": { "task_name": "Relevé quotidien des certificats",
                     "prompt": "Liste les certificats TLS gérés par le Hub et signale ceux qui expirent dans moins de 21 jours.",
                     "trigger_type": "CRON", "cron_expr": "0 7 * * *", "whitelist": "readonly" } }
    

    Une tâche CRON exige une expression valide. La tâche apparaît aussitôt dans cet écran, en carte : c'est la première, « Relevé quotidien des certificats ».

    ⚠ Aucun bouton « Exécuter maintenant » : pour un premier essai sans attendre 7 h, appelez alfred_admin.run_now avec le numéro de la tâche (task).

    Action du Hub : alfred_admin.create_task

    Faire cette étape dans le Hub → Pour aller plus loin : alfred.tasks.ecran alfred.tasks.declencheur

  3. Régler prompt, horaire et budgets

    Éditer déplie le formulaire de la carte. On y écrit le prompt comme à un collègue : ce qu'il faut vérifier, sous quelle forme rendre le résultat. Le prompt n'élargit jamais les droits : une action hors de la whitelist reste inaccessible, quoi qu'il dise.

    Le CRON s'écrit en cinq champs, à l'heure de Paris : 0 7 * * *, tous les jours à 7 h. Les budgets bornent chaque run ; à 0, ils prennent leur valeur par défaut :

    Champ À 0 Au-delà
    max_steps 15 étapes le run s'arrête
    budget_tokens 100 000 tokens budget_exceeded
    timeout_seconds 300 s timeout
    max_runs_per_hour sans limite déclenchement refusé

    Enregistrer : le prochain run applique les changements ; un run en cours garde les anciens.

    ⚠ Choisir « (défaut readonly) » dans Whitelist ne change rien : la tâche garde son ancien profil. Choisissez readonly explicitement. ⚠ La case Tâche activée est toujours envoyée : enregistrer avec la case décochée désactive la tâche. ⚠ La définition publiée de update_task n'annonce pas les budgets ; le code les accepte pourtant.

    Action du Hub : alfred_admin.update_task

    Faire cette étape dans le Hub → Pour aller plus loin : alfred.tasks.form.prompt alfred.tasks.form.cron_expr alfred.tasks.form.whitelist alfred.tasks.form.budget_tokens alfred.tasks.form.enabled alfred.tasks.form.enregistrer

  4. Suivre la tâche au cockpit

    Le cockpit réunit ce qu'Alfred fait en ce moment (Runs en cours, étapes en direct), ce qu'il vient de faire (Derniers runs, les huit derniers) et ce qu'il fera ensuite (Prochaines exécutions, les tâches CRON actives).

    La ligne du relevé affiche 2026-10-29T06:00:00Z : c'est bien 7 h à Paris, l'heure d'hiver étant décalée d'une heure. Les heures du cockpit sont en UTC.

    Deux boutons par tâche :

    • ⏭ saute une seule occurrence, un jour de maintenance : la tâche reste active et repart à l'échéance suivante ;
    • ⏸ désactive la tâche, durablement. Elle se réactive dans Tâches, case Tâche activée.

    En haut, le kill-switch suspend tout Alfred d'un clic : plus aucun déclenchement, et les runs en cours s'arrêtent à leur prochaine étape.

    ⚠ Sur le Hub 3.77.0, le message de ⏸ et de ⏭ s'affiche même si l'action a échoué : sur une tâche sans CRON, l'écran annonce « sautée » alors que rien n'a changé. ⚠ La pause du kill-switch vit en mémoire : un redémarrage du Hub la lève. ⚠ Les runs queued n'apparaissent pas dans « Runs en cours ».

    Action du Hub : alfred_admin.skip_next

    Faire cette étape dans le Hub → Pour aller plus loin : alfred.cockpit.ecran alfred.cockpit.col.prochaine alfred.cockpit.sauter alfred.cockpit.pause_tache alfred.cockpit.kill_switch

  5. Lire le run dans l'historique

    L'historique répond à « qu'a fait Alfred, et pourquoi ? ». Chaque run y figure avec son statut, sa tâche, ses tokens, ses étapes et sa durée. Le run #1040 est le relevé du 28 octobre : success, quatre étapes.

    Un clic l'ouvre à droite, en entier : le déclencheur, le prompt effectif (figé au départ du run : modifier la tâche ne le change pas), l'erreur s'il y en a une, la synthèse finale, puis chaque étape : un tour du modèle (llm) ou une action appelée (tool), avec ses paramètres et sa réponse.

    Le détail ouvert à droite est celui d'un autre run, #1041, né d'un mail : la page du relevé est la même, avec ses propres étapes.

    ⚠ La liste s'arrête à 200 runs, sans pagination : filtrez par statut. Les heures sont en UTC.

    Action du Hub : alfred_admin.get_run

    Faire cette étape dans le Hub → Pour aller plus loin : alfred.history.ecran alfred.history.run alfred.history.detail.prompt alfred.history.detail.steps

  6. Comprendre un run qui dépasse son budget

    Le run #1039, d'une autre tâche (« Contrôle des quotas des tenants »), s'est arrêté au statut budget_exceeded : ses tokens, entrée et sortie additionnées, ont atteint le plafond de sa tâche, 100 000 par défaut. Le budget a fait son travail : la consommation est bornée.

    Ouvrez le run pour voir où partent les tokens : un prompt trop large, une action qui rend beaucoup de données. Resserrez la consigne, ou relevez budget_tokens dans Tâches si la tâche en a vraiment besoin.

    Le filtre statut isole ces runs : error, timeout, budget_exceeded, aborted, rejected… Au-dessus de toutes les tâches, le budget journalier global (2 000 000 tokens par défaut) reste appliqué.

    ⚠ Le statut stuck (run coupé par le garde-fou anti-boucle) existe, mais le filtre ne le propose pas : ces runs ne s'isolent pas depuis l'écran.

    Faire cette étape dans le Hub → Pour aller plus loin : alfred.history.filtre.status alfred.tasks.form.budget_tokens alfred.tasks.budget_note

Ce que vous avez obtenu

Alfred lit, il n'écrit pas : la whitelist et la deny-list l'en empêchent, quoi que dise le prompt.

Pièges