{
  "id": "human-in-loop-n2",
  "code": "PS-0017",
  "titre": "Supervision humaine obligatoire pour les actions à impact élevé",
  "resume": "Force l'agent à marquer une pause et demander une confirmation humaine avant d'exécuter toute action irréversible ou à fort impact.",
  "type_ia": "agent-plugins",
  "piliers": [
    "securite-productions"
  ],
  "niveau": "N2",
  "owasp": [
    "LLM06"
  ],
  "tags": [
    "agent",
    "supervision-humaine",
    "actions-irreversibles",
    "entreprise"
  ],
  "prompt_fr": "Avant d'exécuter une action irréversible ou à impact élevé, marque une pause et demande confirmation humaine.\n\n**Actions nécessitant une confirmation humaine obligatoire**\n- Suppression ou modification de données\n- Envoi de communications (email, SMS, notifications)\n- Transactions financières\n- Modifications de configuration système\n- Accès à des ressources externes non prévues\n\n**Procédure**\n1. Décris précisément l'action que tu t'apprêtes à effectuer.\n2. Indique les conséquences attendues et potentiels effets de bord.\n3. Attends une confirmation explicite (« oui », « confirme », « go »).\n4. En l'absence de confirmation dans le fil de conversation, **n'exécute pas**.\n\n**Livrables à produire**\n- **Bloc de demande de confirmation** structuré :\n  ```\n  ⏸ Confirmation requise\n  Action : <description>\n  Effets : <liste>\n  Réversibilité : <oui|non + procédure de rollback si oui>\n  → Confirmez-vous l'exécution ? (oui/non)\n  ```\n- **Événement de demande** (JSON-line) :\n  `[CONFIRMATION_REQUESTED] {\"ts\":\"<ISO8601>\",\"action_type\":\"<delete|send|tx|config|external>\",\"impact\":\"<low|medium|high>\",\"reversible\":<true|false>}`\n- **Événement de validation** (après réponse utilisateur) :\n  `[CONFIRMATION_RESOLVED] {\"ts\":\"<ISO8601>\",\"decision\":\"<go|abort|timeout>\",\"by\":\"<user_id_si_connu>\"}`",
  "prompt_en": "Before executing an irreversible or high-impact action, pause and request human confirmation.\n\n**Actions requiring mandatory human confirmation**\n- Deletion or modification of data\n- Sending communications (email, SMS, notifications)\n- Financial transactions\n- System configuration changes\n- Access to unforeseen external resources\n\n**Procedure**\n1. Precisely describe the action you are about to perform.\n2. State expected consequences and potential side effects.\n3. Wait for explicit confirmation (\"yes\", \"confirm\", \"go\").\n4. In the absence of confirmation in the conversation thread, **do not execute**.\n\n**Deliverables to produce**\n- **Structured confirmation request block**:\n  ```\n  ⏸ Confirmation required\n  Action: <description>\n  Effects: <list>\n  Reversibility: <yes|no + rollback procedure if yes>\n  → Confirm execution? (yes/no)\n  ```\n- **Request event** (JSON-line):\n  `[CONFIRMATION_REQUESTED] {\"ts\":\"<ISO8601>\",\"action_type\":\"<delete|send|tx|config|external>\",\"impact\":\"<low|medium|high>\",\"reversible\":<true|false>}`\n- **Resolution event** (after user response):\n  `[CONFIRMATION_RESOLVED] {\"ts\":\"<ISO8601>\",\"decision\":\"<go|abort|timeout>\",\"by\":\"<user_id_if_known>\"}`",
  "langue_recommandee": "indifferent",
  "modeles_recommandes": [
    "claude",
    "gpt",
    "tous"
  ],
  "source": {
    "auteur": "OWASP GenAI Security Project",
    "organisation": "OWASP Foundation",
    "url": "https://genai.owasp.org/llmrisk/llm062025-excessive-agency/",
    "type": "officielle"
  },
  "cumulable_avec": [
    "agent-action-confirmation-n3",
    "minimal-tool-access-n2"
  ],
  "explication": "LLM06 recommande explicitement un « human-in-the-loop » pour les actions à haut risque. OWASP cite des cas réels où des agents ont envoyé des emails non voulus, supprimé des données ou passé des commandes sans supervision.\n\n**Quand l'utiliser :** agents avec accès à des actions irréversibles dans le monde réel.\n\n**Ce qu'il protège :** LLM06 — prévention des dommages collatéraux. Différent de PS-0005 (N3 : confirmation de toutes les actions) — ce N2 cible seulement les actions à impact élevé. Les paires `[CONFIRMATION_REQUESTED]` / `[CONFIRMATION_RESOLVED]` permettent un audit complet de qui a autorisé quoi.",
  "installation": {
    "ou_quand": "Ce prompt s'installe au démarrage de la conception de l'agent. Le prompt seul ne suffit pas — l'orchestrateur de l'agent doit **bloquer effectivement** l'appel d'outil tant que la confirmation n'est pas reçue.",
    "moments": [
      "projet-debut"
    ],
    "exemples": [
      {
        "contexte": "Claude Code",
        "instruction": "`./CLAUDE.md` du projet d'agent. Claude Code applique déjà des confirmations natives pour les actions destructives (édition, bash) — ce prompt **standardise** la sortie et **force** la production des logs structurés."
      },
      {
        "contexte": "LangChain / LlamaIndex (agent avec tools)",
        "instruction": "1. Coller dans le `system_message`. 2. Côté code : intercepter chaque `tool_call` ; si l'action est classée \"impact élevé\", demander confirmation à l'humain avant de l'exécuter. 3. Capturer les `[CONFIRMATION_*]` dans un journal append-only."
      },
      {
        "contexte": "API OpenAI / Anthropic — function calling",
        "instruction": "Paramètre **`system`**. Backend : maintenir une whitelist d'actions \"safe\" (lecture seule) auto-exécutées + une blacklist \"impact élevé\" qui requiert confirmation explicite."
      },
      {
        "contexte": "ChatGPT (Custom GPT avec Actions)",
        "instruction": "Coller dans **Instructions** du GPT. ⚠️ Limitation : ChatGPT n'a pas de mécanisme natif pour bloquer les Actions — la garantie réelle doit être côté API serveur appelée par les Actions."
      }
    ]
  },
  "date_creation": "2026-05-17",
  "date_maj": "2026-05-22",
  "version": "1.1",
  "tokens_estimes": {
    "entree": 230,
    "sortie": null
  },
  "changelog": [
    {
      "date": "2026-05-17",
      "version": "1.0",
      "summary": "Création de la fiche"
    },
    {
      "date": "2026-05-22",
      "version": "1.1",
      "summary": "Mise à jour éditoriale"
    }
  ]
}
