Les Hooks sont conçus pour les utilisateurs avancés et les équipes Enterprise qui ont besoin d’un contrôle précis sur le comportement de Cascade. Ils nécessitent des connaissances de base en scripting shell.
Ce que vous pouvez créer
- Journalisation et Analytics : suivez chaque fichier lu, chaque modification de code, chaque commande exécutée, chaque invite utilisateur ou chaque réponse de Cascade pour la conformité et l’analyse de l’usage
- Contrôles de sécurité : empêchez Cascade d’accéder à des fichiers sensibles, d’exécuter des commandes dangereuses ou de traiter des invites qui enfreignent les politiques
- Assurance qualité : exécutez automatiquement des linters, des formateurs ou des tests après des modifications de code
- Workflows personnalisés : intégrez-vous aux outils de suivi d’incidents, aux systèmes de notification ou aux pipelines de déploiement
- Standardisation d’équipe : appliquez des normes de codage et des meilleures pratiques dans toute votre organisation
Fonctionnement des hooks
- Reçoit un contexte (des détails sur l’action en cours) au format JSON via l’entrée standard
- Exécute votre script — Python, Bash, Node.js ou tout exécutable
- Renvoie un résultat via le code de sortie et les flux de sortie
2. Les pré-hooks sont donc idéaux pour appliquer des politiques de sécurité ou effectuer des validations.
Configuration
Niveau système
- macOS :
/Library/Application Support/Windsurf/hooks.json - Linux/WSL :
/etc/windsurf/hooks.json - Windows :
C:\ProgramData\Windsurf\hooks.json
Niveau utilisateur
- Emplacement :
~/.codeium/windsurf/hooks.json - Plugin JetBrains :
~/.codeium/hooks.json
Au niveau du workspace
- Emplacement :
.windsurf/hooks.jsonà la racine de votre workspace
Les hooks provenant 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 → workspace.
Structure de base
Options de configuration
À propos du paramètre
working_directory :- Dans les workspaces comportant plusieurs dépôts, la valeur par défaut est la racine du dépôt actuellement en cours d’utilisation
- Les chemins relatifs sont résolus à partir de l’emplacement par défaut (racine du workspace ou du dépôt)
- Les chemins absolus sont pris en charge
- L’utilisation de
~pour développer le chemin vers le répertoire personnel n’est pas prise en charge
Événements de hooks
Structure d’entrée commune
Dans les exemples suivants, les champs communs sont omis pour plus de concision. Il existe douze grands types d’événements de hook :
pre_read_code
file_path peut être un chemin de répertoire lorsque Cascade parcourt un répertoire de façon récursive.
post_read_code
file_path peut être un chemin de 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 planificateur, les actions d’outils (lectures et écritures de fichiers, commandes), ainsi que toute autre étape effectuée par Cascade. Il inclut également des informations sur les règles qui ont été déclenchées. Voir 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 intégré, ce hook écrit la transcription complète de la conversation (depuis le début de la conversation) dans un fichier JSONL local et fournit le chemin du fichier.
Cas d’usage : journalisation d’audit et de conformité pour Enterprise, suivi des contributions générées par l’IA, envoi des transcriptions vers des outils externes d’observabilité ou d’Analytics
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 des champs type et status, ainsi que des données propres à cette étape. Par exemple :
0600. Windsurf limite automatiquement le répertoire de 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 différences clés 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 les dépendances, exécuter des scripts de configuration
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 est à true.
Exemples d’utilisations
Journalisation de toutes les actions Cascade
log_input.py) :
Restriction de l’accès aux fichiers
block_read_access.py) :
Blocage des commandes dangereuses
block_dangerous_commands.py) :
Blocage des 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 activesModel Decision- Règles dont les descriptions ont été présentées au modèle d’IA pour une application conditionnelleManual- Règles explicitement mentionnées avec @ dans la saisie utilisateurGlobal- Règles globales provenant deglobal_rules.mdGlob- Règles déclenchées par l’accès à des fichiers correspondant à des motifs glob
Cela indique quelles règles ont été présentées au modèle d’IA ou déclenchées par l’accès aux fichiers, mais n’indique pas si le modèle d’IA a effectivement suivi une règle. Les règles déjà affichées récemment dans la conversation sont dédupliquées et peuvent ne pas réapparaître avant un certain temps.
Exécuter des formatteurs de code après modification
format_code.sh) :
Mise en place 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 validation, en particulier pour les chemins de fichiers et les commandes.
- Utilisez des chemins absolus : Utilisez toujours des chemins absolus dans vos configurations de hooks pour éviter toute ambiguïté.
- Protégez les données sensibles : Évitez de journaliser des informations sensibles comme des clés d’API ou des identifiants.
- Vérifiez les permissions : Assurez-vous que vos scripts de hook disposent des permissions appropriées sur le système de fichiers.
- Auditez avant le déploiement : Passez en revue chaque commande et chaque script de hook avant de l’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 sur les performances
- Gardez les hooks rapides : Des hooks lents dégraderont la réactivité de Cascade. Visez des temps d’exécution inférieurs à 100 ms.
- Utilisez des opérations asynchrones : Pour des hooks non bloquants, envisagez de journaliser vers une file d’attente ou une base de données de façon asynchrone.
- Filtrez dès le début : Vérifiez le type d’action au démarrage de votre script pour éviter tout traitement inutile.
Gestion des erreurs
- Toujours valider le JSON : Utilisez des blocs try-catch pour gérer proprement les entrées malformées.
- Journalisez correctement les erreurs : Écrivez-les sur
stderrafin qu’elles soient visibles lorsqueshow_outputest activé. - Échec sécurisé : 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 : Implémentez d’abord un hook de journalisation simple pour 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 pré-hooks.
- Couvrez tous les chemins d’exécution : Testez les scénarios de réussite comme d’échec dans vos scripts.
Distribution Enterprise
- Cloud Dashboard - Configurez les hooks via les paramètres d’équipe dans le tableau de bord Windsurf
- Fichiers au niveau du système - Déployez les hooks via des outils MDM ou de gestion de configuration
Configuration du tableau de bord Cloud
- Offre Enterprise
- Autorisation
TEAM_SETTINGS_UPDATE
- Accédez à Team Settings dans le tableau de bord Windsurf
- Recherchez la section Cascade Hooks
- Saisissez votre configuration de hooks au format JSON
- Enregistrez vos modifications
Lorsque plusieurs configurations d’équipe sont fusionnées, les hooks sont combinés par action plutôt que remplacés. Cela signifie que les hooks de toutes les configurations d’équipe applicables s’exécuteront ensemble.
Déploiement de fichiers au niveau du système
hooks.json aux emplacements spécifiques au système d’exploitation suivants :
macOS :
/usr/local/share/windsurf-hooks/ sur les systèmes Unix).
Les hooks au niveau du système ont priorité sur les hooks utilisateur et de workspace et ne peuvent pas être désactivés par les utilisateurs finaux sans privilèges root.
MDM et gestion de configuration
- Jamf Pro (macOS) - Déployez via des profils de configuration ou des scripts
- Microsoft Intune (Windows/macOS) - Utilisez des scripts PowerShell ou un déploiement de stratégies
- Workspace ONE, Google Endpoint Management, et autres solutions MDM
- Ansible, Puppet, Chef, SaltStack - Utilisez votre automatisation d’infrastructure existante
- 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 sécurité. Windsurf ne déploie ni ne gère de fichiers dans des emplacements système. Veillez à ce que vos équipes internes se chargent du déploiement, des mises à jour et de la conformité conformément aux politiques de votre organisation.
Hooks de workspace pour les projets d’équipe
Ressources supplémentaires
- Intégration MCP : En savoir plus sur le Model Context Protocol dans Windsurf
- Workflows : Découvrez comment combiner des hooks avec les workflows Cascade
- Analytics : Suivez l’utilisation de Cascade avec les Analytics d’équipe