Les hooks sont conçus pour les utilisateurs avancés et les équipes Enterprise qui ont besoin d’un contrôle fin sur le comportement de Cascade. Ils nécessitent des connaissances de base en scripting shell.
Ce que vous pouvez mettre en place
- Journalisation et analyse : suivez chaque fichier lu, chaque modification de code, chaque commande exécutée, chaque prompt utilisateur ou chaque réponse de Cascade à des fins de conformité et d’analyse de l’utilisation
- Contrôles de sécurité : empêchez Cascade d’accéder à des fichiers sensibles, d’exécuter des commandes dangereuses ou de traiter des prompts non conformes aux politiques
- Assurance qualité : exécutez automatiquement des linters, des outils de formatage ou des tests après des modifications de code
- Workflows personnalisés : intégrez des outils de suivi des problèmes, des systèmes de notification ou des pipelines de déploiement
- Standardisation des équipes : appliquez des normes de codage et des bonnes pratiques dans toute votre organisation
Fonctionnement des Hooks
- Reçoit le contexte (les détails de l’action en cours) au format JSON sur l’entrée standard
- Exécute votre script - Python, Bash, Node.js ou tout autre exécutable
- Renvoie un résultat via le code de sortie et les flux de sortie
2. Les pre-hooks sont donc idéaux pour mettre en œuvre des politiques de sécurité ou des contrôles de validation.
Configuration
Au niveau système
- macOS:
/Library/Application Support/Windsurf/hooks.json - Linux/WSL:
/etc/windsurf/hooks.json - Windows:
C:\ProgramData\Windsurf\hooks.json
Niveau utilisateur
- Devin Desktop IDE:
~/.codeium/windsurf/hooks.json - JetBrains Plugin:
~/.codeium/hooks.json
Au niveau de l’espace de travail
- Emplacement:
.windsurf/hooks.jsonà la racine de votre espace de travail
Les hooks des trois emplacements sont fusionnés. Si le même événement de hook est configuré à plusieurs emplacements, tous les hooks s’exécuteront dans l’ordre : système → utilisateur → espace de travail.
Structure de base
pre_read_code spécifie à la fois une commande pour macOS/Linux et une commande PowerShell pour Windows. Le hook post_write_code ne spécifie que command ; il s’exécutera donc sur macOS/Linux et utilisera PowerShell par défaut sous Windows.
Options de configuration
Comportement multiplateforme
command et powershell permettent de définir, dans une même configuration, des commandes adaptées à chaque plateforme. C’est utile pour les équipes ayant un parc mixte macOS/Linux et Windows.
À propos du paramètre
working_directory :- Dans les espaces de travail multi-repo, la valeur par défaut est la racine du repo en cours de traitement
- Les chemins relatifs sont résolus depuis l’emplacement par défaut (espace de travail ou racine du repo)
- Les chemins absolus sont pris en charge
- L’utilisation de
~pour développer le home directory n’est pas prise en charge
Événements de hook
Structure d’entrée commune
Dans les exemples suivants, les champs communs sont omis par souci de concision. Il existe douze principaux types d’événements de hook :
pre_read_code
file_path peut correspondre au chemin d’un répertoire lorsque Cascade lit un répertoire de façon récursive.
post_read_code
file_path peut être le chemin d’un répertoire lorsque Cascade lit un répertoire de façon récursive.
pre_write_code
post_write_code
pre_run_command
post_run_command
pre_mcp_tool_use
post_mcp_tool_use
pre_user_prompt
show_output ne s’applique pas à ce hook.
post_cascade_response
response contient le contenu au format Markdown de la réponse de Cascade depuis la dernière saisie de l’utilisateur. Cela inclut les réponses du planner, les actions des outils (lecture et écriture de fichiers, commandes) ainsi que toutes les autres étapes effectuées par Cascade. Il inclut également des informations sur les règles qui ont été déclenchées. Consultez l’exemple Suivi des règles déclenchées pour savoir comment analyser l’utilisation des règles.
L’option de configuration show_output ne s’applique pas à ce hook.
post_cascade_response_with_transcript
post_cascade_response. Au lieu de fournir un résumé Markdown inline, ce hook écrit la transcription intégrale de la conversation (depuis le début de la conversation) dans un fichier JSONL local et fournit le chemin vers ce fichier.
Cas d’usage : journalisation d’audit et de conformité pour Enterprise, suivi des contributions générées par l’IA, transmission des transcriptions à des outils externes d’observabilité ou d’analyse
JSON d’entrée :
transcript_path pointe vers un fichier JSONL situé à ~/.windsurf/transcripts/{trajectory_id}.jsonl. Chaque ligne est un objet JSON représentant une étape de la conversation, avec un champ type, un champ status et des données propres à cette étape. Par exemple :
0600. Devin Desktop limite automatiquement le répertoire des transcriptions à 100 fichiers, en supprimant les plus anciens selon leur date de modification.
L’option de configuration show_output ne s’applique pas à ce hook.
Ce tableau présente les principales différences entre les hooks post_cascade_response et post_cascade_response_with_transcript :
post_setup_worktree
.env ou d’autres fichiers non suivis dans le worktree, installer des dépendances, exécuter des scripts d’installation
Variables d’environnement :
JSON d’entrée :
Codes de sortie
Gardez à l’esprit que l’utilisateur peut voir toute sortie standard et toute erreur standard générées par un hook dans l’interface Cascade si
show_output a la valeur true.
Exemples de cas d’usage
Journalisation de toutes les actions de Cascade
log_input.py) :
Restreindre l’accès aux fichiers
block_read_access.py) :
Blocage des commandes dangereuses
block_dangerous_commands.py) :
Bloquer les prompts non conformes aux politiques
block_bad_prompts.py) :
Journalisation des réponses de Cascade
log_cascade_response.py) :
Suivi des règles déclenchées
track_rules.py) :
Always On- Règles toujours inclusesModel Decision- Règles dont la description a été présentée au modèle pour une application conditionnelleManual- Règles explicitement mentionnées avec @ dans la saisie de l’utilisateurGlobal- Règles globales issues deglobal_rules.mdGlob- Règles déclenchées par un accès à des fichiers correspondant à des motifs glob
Cela indique quelles règles ont été présentées au modèle ou déclenchées par un accès aux fichiers, mais pas si le modèle a réellement respecté une règle. Les règles déjà montrées récemment dans la conversation sont dédupliquées et peuvent ne réapparaître que plus tard.
Exécuter le formatage du code après les modifications
format_code.sh) :
Configuration des worktrees
.windsurf/hooks.json) :
hooks/setup_worktree.sh) :
Bonnes pratiques
Sécurité
- Validez toutes les entrées : ne faites jamais confiance au JSON d’entrée sans l’avoir validé, en particulier pour les chemins de fichiers et les commandes.
- Utilisez des chemins absolus : utilisez toujours des chemins absolus dans vos configurations de hook afin d’éviter toute ambiguïté.
- Protégez les données sensibles : évitez de journaliser des informations sensibles comme des clés API ou des identifiants.
- Vérifiez les autorisations : assurez-vous que vos scripts de hook disposent des autorisations du système de fichiers appropriées.
- Auditez avant le déploiement : examinez chaque commande et script de hook avant de les ajouter à votre configuration.
- Testez en isolation : exécutez les hooks dans un environnement de test avant de les activer sur votre machine de développement principale.
Considérations relatives aux performances
- Gardez les hooks rapides : des hooks lents nuiront à la réactivité de Cascade. Visez des temps d’exécution inférieurs à 100 ms.
- Utilisez des opérations asynchrones : pour les hooks non bloquants, envisagez une journalisation asynchrone vers une file d’attente ou une base de données.
- Filtrez dès le début : vérifiez le type d’action au début de votre script afin d’éviter tout traitement inutile.
Gestion des erreurs
- Validez toujours le JSON : utilisez des blocs try-catch pour gérer proprement les entrées mal formées.
- Consignez correctement les erreurs : écrivez les erreurs dans
stderrafin qu’elles soient visibles lorsqueshow_outputest activé. - Prévoyez un échec sans risque : si votre hook rencontre une erreur, déterminez s’il doit bloquer l’action ou la laisser se poursuivre.
Tester vos hooks
- Commencez par la journalisation : commencez par mettre en place un hook de journalisation simple pour mieux comprendre le flux de données.
- Utilisez
show_output: true: activez l’affichage de la sortie pendant le développement pour voir ce que font vos hooks. - Testez le comportement de blocage : vérifiez que le code de sortie 2 bloque correctement les actions dans les hooks de pré-exécution.
- Vérifiez tous les chemins d’exécution du code : testez à la fois les scénarios de réussite et d’échec dans vos scripts.
Déploiement Enterprise
- Cloud Dashboard - Configurez les hooks via Team Settings dans le tableau de bord Devin Desktop
- System-Level Files - Déployez les hooks via MDM ou des outils de gestion de configuration
Configuration du tableau de bord Cloud
- plan Enterprise
- autorisation
TEAM_SETTINGS_UPDATE
- Accédez à Team Settings dans le tableau de bord Devin Desktop
- Repérez la section Cascade Hooks
- Saisissez la configuration des hooks au format JSON
- Enregistrez vos modifications
Lorsque plusieurs configurations de Team sont fusionnées, les hooks sont combinés par action au lieu d’être remplacés. Cela signifie que les hooks de toutes les configurations de Team applicables s’exécutent ensemble.
Déploiement des fichiers au niveau système
hooks.json dans les emplacements propres à chaque système d’exploitation :
macOS :
/usr/local/share/windsurf-hooks/ sur les systèmes Unix).
Les hooks au niveau système ont priorité sur les hooks utilisateur et d’espace de travail, et ne peuvent pas être désactivés par les utilisateurs finaux sans privilèges root.
MDM et gestion de la configuration
- Jamf Pro (macOS) - Déploiement via des profils de configuration ou des scripts
- Microsoft Intune (Windows/macOS) - Utilisez des scripts PowerShell ou un déploiement par stratégie
- Workspace ONE, Google Endpoint Management et d’autres solutions MDM
- Ansible, Puppet, Chef, SaltStack - Utilisez vos outils existants d’automatisation de l’infrastructure
- Scripts de déploiement personnalisés - Scripts shell, PowerShell ou l’outil de votre choix
Vérification et audit
Important : les hooks système sont entièrement gérés par votre équipe informatique ou de sécurité. Devin Desktop ne déploie ni ne gère de fichiers dans des emplacements système. Assurez-vous que vos équipes internes prennent en charge le déploiement, les mises à jour et la conformité, conformément aux politiques de votre organisation.
Hooks d’espace de travail pour les projets Team
Ressources supplémentaires
- Intégration MCP : En savoir plus sur le Model Context Protocol dans Devin Desktop
- Workflows : Découvrez comment combiner des Hooks avec les Cascade Workflows
- Analyse : Suivez l’utilisation de Cascade avec Team Analytics

