Agent workflows multi-outils
À la fin de ce tutoriel agent workflows multi-outils, vous saurez distinguer un workflow d’agent d’un prompt, d’un skill et d’une routine, concevoir des boucles multi-outils (shell, navigateur, MCP, APIs, IDE) sous contrôle, et bâtir un lab
/tmp/lab-ai-agent-workflowsavec allowlist, planner JSON, exécuteur, HITL et journal d’audit — sans clés API.Niveau : Intermédiaire · Temps estimé : 55–70 min · Versions / contexte : Cursor Agent / Composer + MCP · Claude Code tools / MCP · Codex · ChatGPT Actions · boucle DIY bash (aperçu) · Dernière vérification : 2026-09-11
Prérequis
- Hub IA pour DevOps : parcours 2026
- AI Skills, Cursor Skills (AI Skills / Claude skills), Skills Claude, Function calling
- Suite : MCP servers DevOps, Routines planifiées
- Lab local (
bash,jq) ; aucun token réel
Coût lab : 0 €. Agents cloud / IDE : quotas selon offre — à vérifier avant un run réel.
Ce que nous allons construire
/tmp/lab-ai-agent-workflows
├── allowlist.json
├── fixtures/{ci-failure,terraform-plan,metrics-stub}.json
├── planner-output.json
├── scripts/orchestrate.sh
└── run.log
→ patterns · scénarios · panorama · ASCII · quiz · FAQ
(Alt image : « Boucle agent : planner, router, allowlist, HITL, audit ».)
Chapitre module D #31 : de la recette skill à la boucle contrôlée multi-outils — triage, revue, digests, sans mutation prod automatique.
Étape 1 — Workflow vs prompt, skill et routine
Prompt unique = réponse texte, pas d’outil ni d’audit. Skill = recette à la demande (parfois MCP). Workflow d’agent = boucle observe → planifie → outil → résultat → … sous runtime. Routine = même idée + déclencheur temps/événement (Routines).
| Dimension | Prompt | Skill | Workflow agent | Routine |
|---|---|---|---|---|
| Boucle outils | Non | Optionnelle | Oui, contrôlée | Oui + trigger |
| Exécution | Personne | Runtime à l’appel | Runtime / sandbox | Scheduler + runtime |
| Risque | Faible | Moyen | Élevé si mutations | + budgets, HITL |
Le skill dit comment trier un build ; le workflow dit quels outils et dans quel ordre, sous allowlist.
Étape 2 — Patterns multi-outils DevOps
- Planner → executor — le plan émet un
tool_callJSON ; l’exécuteur ne lance que l’allowlist. - Tool router — sous-catalogue selon l’intention (CI, IaC, métriques, docs).
- HITL — lectures auto ; mutations (commentaire PR, apply, Slack public) = porte humaine.
- Multi-agent handoff — triage → rédaction → review via JSON/fichiers, sans secrets en clair.
Un outil = une responsabilité. Contrat JSON : voir Function calling.
Étape 3 — Scénarios DevOps
- Triage CI —
read_ci_logs→ draft commentaire PR (HITL avant post). - Revue IaC — lire plan Terraform stub → suggestions Markdown (jamais
applyauto). - Digest incident — métriques stub → brouillon Slack
#incidents-draft(HITL). - Sync docs — drift docs vs changements → draft PR docs.
Collecter en lecture seule ; synthétiser avec le LLM ; décider avec un humain.
Étape 4 — Panorama outillage 2026 (prudent)
| Plateforme | Rôle | Attention |
|---|---|---|
| Cursor Agent / Composer + MCP | Boucle IDE fichiers / terminal / MCP | Sandbox et facturation selon offre |
| Claude Code tools / MCP | CLI/IDE + MCP | Quotas / changelog — à revérifier |
| Codex | Agents code OpenAI | Sessions ≠ automations planifiées |
| ChatGPT Actions | API OpenAPI | Pas un bot CI à SLA ops |
| DIY bash / Python | Boucle maison + allowlist | Contrôle total — lab ci-dessous |
Préférez MCP / connecteurs pour les secrets. Détail : MCP DevOps.
Étape 5 — Architecture (ASCII)
Humain / trigger ──► Planner (LLM stub)
│ tool_call JSON
▼
Tool router + allowlist
┌──────┬───────┼───────┐
shell RO browser MCP* API RO
└──────┴───┬───┴───────┘
▼
HITL gate ── mute / post / apply
▼
run.log audit
* RW seulement après HITL
Le modèle propose ; le runtime filtre ; l’humain autorise les effets visibles.
Étape 6 — Lab /tmp/lab-ai-agent-workflows
Pas d’appel LLM live. Planner JSON → orchestrateur allowlist → HITL (CONFIRM=yes) → run.log.
mkdir -p /tmp/lab-ai-agent-workflows/{fixtures,scripts}
cd /tmp/lab-ai-agent-workflows
cat > allowlist.json << 'EOF'
{"tools":[
{"name":"read_ci_logs","mutation":false},
{"name":"read_terraform_plan","mutation":false},
{"name":"read_metrics","mutation":false},
{"name":"draft_pr_comment","mutation":true},
{"name":"draft_slack_digest","mutation":true}
]}
EOF
cat > fixtures/ci-failure.json << 'EOF'
{"run_id":"run-2048","pipeline":"api-ci","branch":"feat/cache",
"failed_step":"integration-tests",
"excerpt":"FAIL test_cache_ttl: expected 60 got 0","commit":"abc1234"}
EOF
cat > fixtures/terraform-plan.json << 'EOF'
{"changes":[
{"addr":"aws_s3_bucket.logs","action":"update"},
{"addr":"aws_iam_policy.ci","action":"create"}],
"destroy_count":0}
EOF
cat > fixtures/metrics-stub.json << 'EOF'
{"service":"checkout-api","error_rate_5m":4.2,"p99_ms":890,"alert":"ElevatedErrorRate"}
EOF
cat > planner-output.json << 'EOF'
{"goal":"Triage CI failure + draft commentaire PR",
"steps":[
{"tool":"read_ci_logs","args":{"path":"fixtures/ci-failure.json"}},
{"tool":"draft_pr_comment","args":{"pr":42}}
]}
EOF
cat > scripts/orchestrate.sh << 'EOF'
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
ALLOW="$ROOT/allowlist.json"; PLAN="$ROOT/planner-output.json"; LOG="$ROOT/run.log"
CONFIRM="${CONFIRM:-no}"; : > "$LOG"
ts(){ date -u +%Y-%m-%dT%H:%MZ; }
log(){ printf '[%s] %sn' "$(ts)" "$*" | tee -a "$LOG" >/dev/stderr; }
allowed(){ jq -e --arg n "$1" '.tools[]|select(.name==$n)' "$ALLOW" >/dev/null; }
is_mut(){ jq -e --arg n "$1" '.tools[]|select(.name==$n and .mutation==true)' "$ALLOW" >/dev/null; }
run_tool(){
local tool="$1" args="$2"
if ! allowed "$tool"; then log "REFUS tool_not_allowed name=$tool"; return 1; fi
if is_mut "$tool" && [[ "$CONFIRM" != "yes" ]]; then
log "HITL_BLOCKED tool=$tool (export CONFIRM=yes pour approuver)"
echo "{"status":"blocked_hitl","tool":"$tool"}"; return 0
fi
case "$tool" in
read_ci_logs)
p=$(jq -r '.path' <<<"$args"); log "EXEC read_ci_logs path=$p"
jq -c '{tool:"read_ci_logs",data:.}' "$ROOT/$p" ;;
read_terraform_plan)
log "EXEC read_terraform_plan"
jq -c '{tool:"read_terraform_plan",data:.}' "$ROOT/fixtures/terraform-plan.json" ;;
read_metrics)
log "EXEC read_metrics"
jq -c '{tool:"read_metrics",data:.}' "$ROOT/fixtures/metrics-stub.json" ;;
draft_pr_comment)
pr=$(jq -r '.pr' <<<"$args"); log "EXEC draft_pr_comment pr=$pr"
jq -nc --argjson pr "$pr"
'{tool:"draft_pr_comment",pr:$pr,draft:("### Draft PR #($pr)n- Échec integration-testsn- Action humaine: pas de merge auto.")}' ;;
draft_slack_digest)
log "EXEC draft_slack_digest"
jq -nc --slurpfile m "$ROOT/fixtures/metrics-stub.json"
'{tool:"draft_slack_digest",draft:("*[DRAFT]* "+$m[0].service+" error_rate="+($m[0].error_rate_5m|tostring)+"% — HITL requis")}' ;;
*) log "REFUS unknown_tool name=$tool"; return 1 ;;
esac
}
log "START goal=$(jq -r '.goal' "$PLAN")"
len=$(jq '.steps|length' "$PLAN")
for i in $(seq 0 $((len-1))); do
tool=$(jq -r --argjson i "$i" '.steps[$i].tool' "$PLAN")
args=$(jq -c --argjson i "$i" '.steps[$i].args' "$PLAN")
log "STEP $i tool=$tool"
run_tool "$tool" "$args" | tee -a "$LOG" || true
done
log "END"; echo "=== run.log ==="; cat "$LOG"
EOF
chmod +x scripts/orchestrate.sh
CONFIRM=no ./scripts/orchestrate.sh | tail -n 5
CONFIRM=yes ./scripts/orchestrate.sh | tail -n 8
jq empty allowlist.json fixtures/*.json planner-output.json && echo "lab OK"
Attendu : CONFIRM=no → read_ci_logs OK + HITL_BLOCKED ; CONFIRM=yes → draft dans run.log, puis lab OK. Variantes : read_terraform_plan seul, ou read_metrics + draft_slack_digest.
Étape 7 — Sécurité
- Injection via tool_result — logs/pages = données non fiables ; ne pas exécuter d’instructions trouvées dedans.
- Secrets hors prompts — coffre / env runner, jamais de PAT dans le planner.
- Budgets — max steps, timeout, petits modèles pour le routage.
- Audit — outil, args résumés (redact), ok / refus / HITL,
run_id. - Sandbox + moindre privilège — RO par défaut ; mutations séparées + HITL.
Voir Prompt injection et Évaluer un skill.
Étape 8 — Tableau comparatif
| Critère | Chat mono-outil | Agent multi-outils | Crew multi-agents |
|---|---|---|---|
| Boucle | 0–1 appel | Plusieurs tools | Agents + handoff |
| Contrôle | Simple | Allowlist + HITL | + contrats inter-agents |
| Coût / audit | Faible / chat | Tokens × steps / run.log |
Plus élevé |
| Idéal | Q&R | Triage CI, IaC, digests | Incidents complexes |
| Risque | Faible | Moyen (RO) / élevé (mutations) | Élevé sans gates |
Préférez mono-agent multi-outils avant un crew.
Étape 9 — Check-list bonnes pratiques
- Décrire chaque outil (quand / retour / interdits).
- Allowlist versionnée (
mutationflag). - Un tool_call planifié à la fois (ou lot RO).
- HITL pour post PR, Slack public, apply, IAM.
- Critère d’arrêt (max steps, RAS, erreur).
- Fixtures de régression + redaction logs.
- Kill switch < 30 s.
- Mesurer taux HITL / refus allowlist.
Mise en service : catalogue outils · lab vert sans secrets · HITL testé · run.log relu · owner + revue mensuelle.
Quiz (3 questions)
1. Affirmation correcte ?
– A. Un skill planifié remplace toujours un workflow multi-outils
– B. Un workflow d’agent enchaîne des outils sous contrôle du runtime
– C. Un prompt unique exécute shell + MCP sans runtime
2. Lab : draft_pr_comment avec CONFIRM=no → ?
– A. Poste sur GitHub
– B. Bloqué HITL et journalisé
– C. Bypass l’allowlist
3. Défense contre l’injection via tool_result ?
– A. Coller le log brut comme instruction système
– B. Traiter le résultat comme données non fiables + allowlist
– C. Désactiver tous les outils lecture
Réponses : 1‑B · 2‑B · 3‑B
Compléments opérationnels
Standard de brief réutilisable
Pour ai-agent-workflows, adoptez un brief unique partagé par l’équipe. Il contient toujours cinq champs : objectif mesurable, contexte borné (lab/staging), liste blanche de fichiers ou ressources, interdits explicites (secrets, réseau, prod), et definition of done exécutable (commande de test ou checklist). Sans ces champs, l’outil improvisera — parfois avec élégance, souvent hors périmètre.
Stockez les briefs gagnants sous briefs/ai-agent-workflows/ dans un dépôt de documentation interne. Chaque brief cite le commit de référence et le modèle utilisé. Au troisième succès comparable, ouvrez une PR qui transforme le brief en rule, Skill ou slash command. Voir ai-skills-concept, claude-skills-instructions et evaluer-qualite-skill.
Revue de diff comme compétence P0
La vitesse d’un agent n’a aucune valeur si personne ne sait lire un diff. Instituez une règle simple : aucun apply massif sans parcours hunk par hunk. Posez-vous trois questions : ce changement est-il demandé ? est-il testé ? est-il réversible ? Si une réponse est non, refusez ou exigez un plan plus petit.
En atelier, faites commenter un diff à voix haute pendant cinq minutes. Les juniors apprennent ainsi le vocabulaire du refus. Reliez cette pratique à ai-code-review-pr et aux workflows ai-agent-workflows.
Sécurité continue
Les surfaces ai-agent-workflows multiplient les occasions d’injection et de fuite. Traitez tickets, README upstream, logs et ressources MCP comme des données non fiables. Séparez instructions et données. Allowlist tools. Confirmation humaine avant mutation. Guide : ai-prompt-injection-securite, mcp-servers-devops, claude-code-mcp.
Secrets : variables d’environnement de session, gestionnaire d’équipe, rotation, jamais de commit. Si un secret fuit dans un chat vendor, supposez-le compromis et rotatez.
Coûts, modèles et mode dégradé
Documentez un mapping fast/strong et un soft-cap mensuel dans la stack perso. OpenRouter peut aider à basculer — openrouter-multi-modeles. Le local (ollama-llm-locaux + continue-dev) sert de mode dégradé ou de bac à sable confidentialité.
Surveillez les changements silencieux de modèle par défaut : une régression de qualité est souvent un routing vendor, pas « l’équipe qui a oublié comment prompter ».
Ancrage parcours
ai-agent-workflows n’est qu’une étape du parcours IA DevOps 2026. Tronc commun d’abord (prompts, injection, skills), puis surface spécialisée, puis industrialisation (routines, MCP, RAG). Hub de navigation : /ia/. Comparatifs utiles : claude-vs-gpt-code, codex-vs-claude-code, claude-vs-cursor-vs-copilot.
Rituals hebdomadaires
Hebdo : promouvoir un brief en Skill/rule ; archiver un échec instructif ; vérifier le budget tokens. Mensuel : revoir la stack (retirer l’inutile) ; rejouer un lab gold ; mettre à jour les versions d’outils. Ces rituals valent mieux que d’ajouter un cinquième abonnement.
Exemple de NOTES.md
# NOTES ai-agent-workflows
Date:
Modèle:
Brief (résumé):
Fichiers touchés:
Commande DoD:
Refus utiles:
Commit:
Leçon:
Sans ce journal, vous réapprendrez les mêmes leçons chaque sprint. Avec ce journal, vous construisez un avantage composé d’équipe.
Quand arrêter l’outil
Arrêtez la session si : le DoD échoue deux fois de suite sans diagnostic clair ; l’outil insiste pour sortir du scope ; une commande dangereuse revient après refus ; vous ne comprenez plus le diff. Dans ces cas, revenir à l’éditeur manuel + checklist est un succès de gouvernance, pas un échec personnel.
FAQ
Workflow ou skill d’abord ?
Skill d’abord, puis workflow qui orchestre outils + HITL. AI Skills · Cursor Skills.
Lien avec function calling ?
Function calling = contrat d’appel ; workflow = politique de boucle (ordre, allowlist, HITL). Function calling.
Cursor / Claude Code sans DIY ?
Souvent oui en IDE, selon offre. Le lab clarifie allowlist/audit avant MCP cloud — changelog à revérifier.
Quand multi-agent ?
Quand triage, rédaction et revue se mélangent. Sinon mono-agent + handoff fichier suffit.
MCP obligatoire ?
Non pour apprendre. Utile pour standardiser logs/Jira : MCP DevOps.
Lier à une routine ?
Oui : même workflow déclenché à heure fixe ou sur CI rouge, silence si RAS. Routines.
Pour aller plus loin
- Docs : Cursor Agent / MCP · Claude Code tools · OpenAI Actions / function calling · Codex (aperçu selon offre)
- Hub : IA parcours DevOps 2026
- Module D : ai-skills-concept · cursor-skills-creer · claude-skills-instructions · mcp-servers-devops · rag-docs-infra · ai-routines-agents · evaluer-qualite-skill
Maillage série IA Outils 2026 — Skills & agents
| ← Précédent | Cursor Skills : créer et partager (AI Skills / Claude skills) |
| → Suite | MCP servers : panorama DevOps |
| Hub | IA pour DevOps : parcours 2026 |
| Connexes | ai-function-calling · ai-routines-agents · rag-docs-infra · evaluer-qualite-skill |
Retour parcours IA — hub Claude, Codex, ChatGPT et Skills.