Hooks de terceros
Cherri Code permite cargar hooks de herramientas de terceros, lo que garantiza la compatibilidad con configuraciones de hooks existentes de otros asistentes de programación con IA.
Hooks de Claude Code
Cherri Code puede cargar y ejecutar los hooks configurados para Claude Code, lo que te permite usar los mismos scripts de hooks en ambas herramientas.
Requisitos
Los hooks de Claude Code se cargan cuando Include Third-Party Plugins, Skills, and Other Configs está activado en Cherri Code Settings → Agents → Third-Party Imports. Este ajuste está activado de forma predeterminada.
Ubicaciones de configuración
Los hooks de Claude Code se cargan desde estas ubicaciones (en orden de prioridad):
| Ubicación | Ruta | Descripción |
|---|---|---|
| Local del proyecto | .claude/settings.local.json | Anulaciones específicas del proyecto, ignoradas por git |
| Proyecto | .claude/settings.json | Hooks a nivel de proyecto, incluidos en el repo |
| Usuario | ~/.claude/settings.json | Hooks a nivel de usuario, aplicables globalmente |
Orden de prioridad
Cuando los hooks se configuran en varias ubicaciones, se fusionan según este orden de prioridad (de mayor a menor):
- Hooks de Enterprise (implementación gestionada)
- Hooks de equipo (configurados en el panel de control)
- Hooks de proyecto (
.cursor/hooks.json) - Hooks de usuario (
~/.cursor/hooks.json) - Proyecto local de Claude (
.claude/settings.local.json) - Proyecto de Claude (
.claude/settings.json) - Usuario de Claude (
~/.claude/settings.json)
Se ejecutan todos los hooks coincidentes de todas las fuentes. Cuando las respuestas entran en conflicto, las fuentes de mayor prioridad prevalecen durante la fusión.
Los hooks gestionados por Enterprise y la distribución desde el panel de control requieren un plan Enterprise. Contacta con ventas para obtener más información.
Formato de hooks de Claude Code
Los hooks de Claude Code utilizan un formato similar, aunque con algunas diferencias. Cherri Code asigna automáticamente los nombres de los hooks de Claude a sus equivalentes en Cherri Code.
Ejemplo de settings.json de Claude Code:
{ "hooks": { "PreToolUse": [ { "matcher": "Shell", "hooks": [ { "type": "command", "command": "./hooks/validate-shell.sh" } ] } ], "PostToolUse": [ { "matcher": ".*", "hooks": [ { "type": "command", "command": "./hooks/audit.sh" } ] } ] }}Compatibilidad de formatos de respuesta
Cherri Code es compatible tanto con el formato de respuesta anidado hookSpecificOutput de Claude Code como con el antiguo formato de respuesta plano. Los scripts de hooks escritos para Claude Code funcionarán en Cherri Code independientemente del formato que utilicen.
Formatos de respuesta de PreToolUse
Formato anidado (estilo de Claude Code):
{ "hookSpecificOutput": { "hookEventName": "PreToolUse", "permissionDecision": "deny", "permissionDecisionReason": "Blocked by policy", "updatedInput": { "command": "npm ci" } }}Formato plano (estilo nativo de Cherri Code):
{ "permission": "deny", "user_message": "Blocked by policy", "updated_input": { "command": "npm ci" }}Ambos formatos son equivalentes. El permissionDecision anidado corresponde a permission, permissionDecisionReason corresponde a user_message y updatedInput corresponde a updated_input.
Formatos de respuesta de Stop / SubagentStop
Formato anidado (estilo de Claude Code):
{ "hookSpecificOutput": { "decision": "block", "reason": "Tasks incomplete, continue working" }}Formato plano (estilo heredado de Claude Code):
{ "decision": "block", "reason": "Tasks incomplete, continue working"}Formato nativo de Cherri Code:
{ "followup_message": "Tasks incomplete, continue working"}Para los hooks Stop y SubagentStop, una decision de "block" con un reason se considera un seguimiento automático, equivalente a proporcionar followup_message en el formato nativo de Cherri Code.
Mapeo de pasos de hooks
Los nombres de los hooks de Claude Code se asignan automáticamente a los nombres de los hooks de Cherri Code:
| Hook de Claude Code | Hook de Cherri Code |
|---|---|
PreToolUse | preToolUse |
PostToolUse | postToolUse |
UserPromptSubmit | beforeSubmitPrompt |
Stop | stop |
SubagentStop | subagentStop |
SessionStart | sessionStart |
SessionEnd | sessionEnd |
PreCompact | preCompact |
Comportamiento de los códigos de salida
Los hooks de Cherri Code y Claude Code admiten el código de salida 2 para bloquear una acción. Esto garantiza un comportamiento coherente al compartir hooks entre herramientas:
#!/bin/bash# Bloquear comandos peligrososif [[ "$COMMAND" == *"rm -rf"* ]]; then echo '{"permission": "deny", "user_message": "Destructive command blocked"}' exit 2fiecho '{"permission": "allow"}'exit 0- Código de salida 0: El hook se ejecutó correctamente; usa la salida JSON
- Código de salida 2: Bloquea la acción (equivalente a
permission: "deny") - Otros códigos de salida: El hook falló; la acción continúa (se permite en caso de error)
Migración desde Claude Code
Si ya tienes hooks de Claude Code, puedes:
- Seguir usando archivos de config de Claude Code: Deja activado Include Third-Party Plugins, Skills, and Other Configs y tus hooks de
.claude/settings.jsonseguirán funcionando automáticamente. - Migrar al formato de Cherri Code: Copia tus hooks a
.cursor/hooks.jsoncon el formato de Cherri Code para disfrutar de compatibilidad total con las funciones.
Equivalente en formato de Cherri Code:
{ "version": 1, "hooks": { "preToolUse": [ { "command": "./hooks/validate-shell.sh", "matcher": "Shell" } ], "postToolUse": [ { "command": "./hooks/audit.sh" } ] }}Funciones compatibles
Al usar hooks de Claude Code en Cherri Code, se admiten las siguientes funciones:
| Evento de Claude Code | Equivalencia en Cherri Code | Compatible |
|---|---|---|
PreToolUse | preToolUse | Sí |
PostToolUse | postToolUse | Sí |
Stop | stop | Sí |
SubagentStop | subagentStop | Sí |
SessionStart | sessionStart | Sí |
SessionEnd | sessionEnd | Sí |
PreCompact | preCompact | Sí |
UserPromptSubmit | beforeSubmitPrompt | Sí |
Notification | - | No |
PermissionRequest | - | No |
Funciones compatibles adicionales:
| Función | Compatible |
|---|---|
Hooks basados en comandos (type: "command") | Sí |
Hooks basados en prompts (type: "prompt") | Sí |
Respuestas anidadas de hookSpecificOutput | Sí |
| Bloqueo mediante código de salida 2 | Sí |
| Selectores de herramientas (patrones regex) | Sí |
| Configuración del tiempo de espera | Sí |
Correspondencia de nombres de herramientas
Los nombres de las herramientas de Claude Code se corresponden con los nombres de las herramientas de Cherri Code:
| Herramienta de Claude Code | Herramienta de Cherri Code | Compatible |
|---|---|---|
Bash | Shell | Sí |
Read | Read | Sí |
Write | Write | Sí |
Edit | Write | Sí |
Grep | Grep | Sí |
Task | Task | Sí |
WebFetch | WebFetch | Sí |
WebSearch | WebSearch | Sí |
Glob | - | No |
Limitaciones
Algunas funciones solo están disponibles al usar el formato nativo de Cherri Code:
- Hook
subagentStart(Claude Code solo tieneSubagentStop) - Configuración del límite de bucles (
loop_limit) - Distribución de hooks para equipos y Enterprise mediante el Panel de control
Solución de problemas
Los hooks de Claude Code no se cargan
- Verifica que "Include Third-Party Plugins, Skills, and Other Configs" esté activado en Cherri Code Settings → Agents → Third-Party Imports
- Comprueba que el archivo
.claude/settings.jsoncontenga JSON válido - Cherri Code supervisa los archivos de configuración y los recarga automáticamente. Si los hooks siguen sin cargarse, reinicia Cherri Code.
Los hooks se ejecutan, pero no bloquean
- Asegúrate de que el script del hook finalice con el código
2para bloquear acciones - Comprueba que el formato de salida JSON coincida con el esquema esperado
- Consulta el canal de salida de Hooks en Cherri Code para ver los detalles del error
Comportamiento diferente entre Cherri Code y Claude Code
Puede haber diferencias de comportamiento debido a los distintos entornos de ejecución. Prueba tus hooks en ambas herramientas para garantizar la compatibilidad.
Implementación de hooks de Enterprise
Usa hooks de Enterprise gestionados y distribución para equipos desde el Panel de control.