Os Hooks foram projetados para usuários avançados e equipes Enterprise que precisam de controle granular sobre o comportamento do Cascade. Eles exigem conhecimento básico de shell scripting.
- Registro e Analytics: Acompanhe cada arquivo lido, alteração de código, comando executado, prompt de usuário enviado ao Cascade ou resposta do Cascade para fins de conformidade e análise de uso
- Controles de segurança: Impeça o Cascade de acessar arquivos sensíveis, executar comandos perigosos ou processar prompts que violem políticas
- Garantia de qualidade: Execute linters, formatadores ou testes automaticamente após modificações no código
- Fluxos de trabalho personalizados: Integre com rastreadores de issues, sistemas de notificação ou pipelines de deploy
- Padronização da equipe: Faça cumprir padrões de codificação e melhores práticas em toda a organização
- Recebe contexto (detalhes sobre a ação em execução) via JSON na entrada padrão
- Executa seu script — Python, Bash, Node.js ou qualquer executável
- Retorna um resultado por meio de código de saída e fluxos de saída
2. Isso torna os pré-hooks ideais para implementar políticas de segurança ou validações.
Os hooks são configurados em arquivos JSON que podem ser colocados em três níveis diferentes. O Cascade carrega e combina os hooks de todos os locais, dando às equipes flexibilidade para distribuir e gerenciar as configurações de hooks.
Hooks em nível de sistema são ideais para políticas organizacionais aplicadas em máquinas de desenvolvimento compartilhadas. Por exemplo, você pode usá-los para impor políticas de segurança, requisitos de conformidade ou fluxos de trabalho obrigatórios de revisão de código. Equipes Enterprise também podem configurar hooks por meio do cloud dashboard sem precisar gerenciar arquivos locais.
- macOS:
/Library/Application Support/Windsurf/hooks.json - Linux/WSL:
/etc/windsurf/hooks.json - Windows:
C:\ProgramData\Windsurf\hooks.json
- IDE Windsurf:
~/.codeium/windsurf/hooks.json - Plugin JetBrains:
~/.codeium/hooks.json
- Local:
.windsurf/hooks.jsonna raiz do seu workspace
Hooks de todas as três origens são mesclados. Se o mesmo evento de hook estiver configurado em várias origens, todos os hooks serão executados na seguinte ordem: sistema → usuário → workspace.
Sobre o parâmetro
working_directory:- Em workspaces com múltiplos repositórios, o padrão é a raiz do repositório em que você está trabalhando no momento
- Caminhos relativos são resolvidos em relação à localização padrão (raiz do workspace ou do repositório)
- Caminhos absolutos são suportados
- Não há suporte ao uso de
~para expansão do diretório home
Nos exemplos a seguir, os campos comuns são omitidos para brevidade. Existem doze tipos principais de eventos de hook:
Acionado antes de o Cascade ler um arquivo de código. Isso pode bloquear a ação se o hook terminar com o código 2.
Casos de uso: Restringir acesso a arquivos, registrar operações de leitura, verificar permissões
JSON de entrada:
file_path pode ser um caminho de diretório quando o Cascade lê uma pasta de forma recursiva.
Acionado após o Cascade ler um arquivo de código com sucesso.
Casos de uso: Registrar leituras bem-sucedidas, acompanhar padrões de acesso a arquivos
JSON de entrada:
file_path pode ser um caminho de diretório quando o Cascade lê um diretório de forma recursiva.
Acionado antes de o Cascade escrever ou modificar um arquivo de código. Pode bloquear a ação se o hook encerrar com o código 2.
Casos de uso: Impedir modificações em arquivos protegidos, fazer backup dos arquivos antes de alterações
JSON de entrada:
show_output não se aplica a este hook.
Acionado de forma assíncrona depois que o Cascade conclui uma resposta ao prompt de um usuário. Esse hook recebe a resposta completa do Cascade desde a última interação do usuário.
Casos de uso: registrar todas as respostas do Cascade para fins de auditoria, analisar padrões de resposta, enviar respostas a sistemas externos para revisão de conformidade
JSON de entrada:
response contém o conteúdo em formato markdown da resposta do Cascade desde a última entrada do usuário. Isso inclui respostas do planner, ações de ferramentas (leituras de arquivos, gravações, comandos) e quaisquer outras etapas que o Cascade executou. Ele também inclui informações sobre quais rules foram acionadas. Veja o exemplo Tracking Triggered Rules para saber como analisar o uso de regras.
A opção de configuração show_output não se aplica a este hook.
Acionado de forma assíncrona após o Cascade concluir uma resposta ao prompt de um usuário, semelhante a post_cascade_response. Em vez de fornecer um resumo em markdown inline, este hook grava a transcrição completa da conversa (desde o início da conversa) em um arquivo JSONL local e fornece o caminho desse arquivo.
Casos de uso: registro de auditoria e conformidade em Enterprise, rastreamento de contribuições geradas por IA, envio de transcrições para ferramentas externas de observabilidade ou Analytics
JSON de entrada:
transcript_path aponta para um arquivo JSONL em ~/.windsurf/transcripts/{trajectory_id}.jsonl. Cada linha é um objeto JSON que representa uma única etapa da conversa, com campos type e status, além de dados específicos dessa etapa. Por exemplo:
0600. O Windsurf limita automaticamente o diretório de transcrições a, no máximo, 100 arquivos, removendo os mais antigos com base no horário de modificação.
A opção de configuração show_output não se aplica a este hook.
Esta tabela mostra as principais diferenças entre os hooks post_cascade_response e post_cascade_response_with_transcript:
Acionado depois que um novo git worktree é criado e configurado. O hook é executado dentro do novo diretório do worktree.
Casos de uso: Copiar arquivos
.env ou outros arquivos não versionados para o worktree, instalar dependências, executar scripts de configuração
Variáveis de ambiente:
JSON de entrada:
Lembre-se de que o usuário pode ver qualquer saída padrão e erro padrão gerados pelos hooks na interface do Cascade se
show_output for true.
Acompanhe cada ação que o Cascade executa para fins de auditoria.
Config:
log_input.py):
block_read_access.py):
block_dangerous_commands.py):
block_bad_prompts.py):
log_cascade_response.py):
track_rules.py):
Always On- Regras que estão sempre incluídasModel Decision- Regras cujas descrições foram mostradas ao modelo de IA para aplicação condicionalManual- Regras explicitamente mencionadas com @ na entrada do usuárioGlobal- Regras globais deglobal_rules.mdGlob- Regras acionadas por acesso a arquivos que correspondam a padrões glob
Isso registra quais regras foram apresentadas ao modelo de IA ou acionadas por acesso a arquivos, mas não indica se o modelo realmente seguiu uma regra. Regras que já foram mostradas recentemente na conversa são deduplicadas e podem não aparecer novamente até mais tarde.
format_code.sh):
.windsurf/hooks.json):
hooks/setup_worktree.sh):
- Valide todas as entradas: Nunca confie no JSON de entrada sem validação, especialmente para caminhos de arquivo e comandos.
- Use caminhos absolutos: Sempre use caminhos absolutos nas configurações de hooks para evitar ambiguidades.
- Proteja dados sensíveis: Evite registrar informações sensíveis, como chaves de API ou credenciais.
- Revise as permissões: Certifique-se de que seus scripts de hooks tenham permissões adequadas no sistema de arquivos.
- Audite antes da implantação: Revise cada comando e script de hooks antes de adicioná-los à sua configuração.
- Teste em isolamento: Execute hooks em um ambiente de teste antes de habilitá-los na sua máquina principal de desenvolvimento.
- Mantenha os hooks rápidos: Hooks lentos afetarão a responsividade do Cascade. Mire em tempos de execução abaixo de 100 ms.
- Use operações assíncronas: Para hooks não bloqueantes, considere registrar em uma fila ou em um banco de dados de forma assíncrona.
- Filtre o quanto antes: Verifique o tipo de ação no início do script para evitar processamento desnecessário.
- Sempre valide o JSON: Use blocos try-catch para tratar entradas malformadas de forma adequada.
- Registre os erros corretamente: Escreva os erros em
stderrpara que fiquem visíveis quandoshow_outputestiver ativado. - Falhe com segurança: Se o seu hook encontrar um erro, avalie se ele deve bloquear a ação ou permitir que ela continue.
- Comece registrando logs: Implemente um hook simples de logging para entender o fluxo de dados.
- Use
show_output: true: Ative a exibição de saída durante o desenvolvimento para ver o que seus hooks estão fazendo. - Teste o comportamento de bloqueio: Verifique se o código de saída 2 bloqueia corretamente as ações em pre-hooks.
- Verifique todos os caminhos de código: Teste cenários de sucesso e de falha nos seus scripts.
- Cloud Dashboard - Configure hooks via Team Settings no dashboard do Windsurf
- System-Level Files - Implemente hooks via MDM ou ferramentas de gerenciamento de configuração
- Plano Enterprise
- Permissão
TEAM_SETTINGS_UPDATE
- Acesse Team Settings no painel do Windsurf
- Encontre a seção Cascade Hooks
- Insira a configuração de seus hooks em formato JSON
- Salve suas alterações
Quando várias configurações de equipe são combinadas, os hooks são agregados por ação em vez de substituídos. Isso significa que os hooks de todas as configurações de equipe aplicáveis serão executados em conjunto.
hooks.json nestes locais específicos do sistema operacional:
macOS:
/usr/local/share/windsurf-hooks/ em sistemas Unix).
Hooks em nível de sistema têm precedência sobre hooks de usuário e de workspace e não podem ser desativados por usuários finais sem permissões de root.
As equipes de TI do Enterprise podem implantar hooks em nível de sistema usando ferramentas padrão:
Gerenciamento de Dispositivos Móveis (MDM)
- Jamf Pro (macOS) - Implante por meio de perfis de configuração ou scripts
- Microsoft Intune (Windows/macOS) - Use scripts do PowerShell ou implantação por políticas
- Workspace ONE, Google Endpoint Management e outras soluções de MDM
- Ansible, Puppet, Chef, SaltStack - Use sua automação de infraestrutura existente
- Scripts de implantação personalizados - Scripts de shell, PowerShell ou suas ferramentas preferidas
Importante: Hooks em nível de sistema são totalmente gerenciados pela sua equipe de TI ou segurança. O Windsurf não implanta nem gerencia arquivos em caminhos de sistema. Certifique-se de que suas equipes internas cuidem da implantação, das atualizações e da conformidade de acordo com as políticas da sua organização.
- Integração MCP: Saiba mais sobre o Model Context Protocol no Windsurf
- Workflows: Descubra como combinar hooks com os Workflows do Cascade
- Analytics: Acompanhe o uso do Cascade com Team Analytics