Skip to main content

Command Palette

Search for a command to run...

Comenzar

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ónRutaDescripción
Local del proyecto.claude/settings.local.jsonAnulaciones específicas del proyecto, ignoradas por git
Proyecto.claude/settings.jsonHooks a nivel de proyecto, incluidos en el repo
Usuario~/.claude/settings.jsonHooks 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):

  1. Hooks de Enterprise (implementación gestionada)
  2. Hooks de equipo (configurados en el panel de control)
  3. Hooks de proyecto (.cursor/hooks.json)
  4. Hooks de usuario (~/.cursor/hooks.json)
  5. Proyecto local de Claude (.claude/settings.local.json)
  6. Proyecto de Claude (.claude/settings.json)
  7. 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 CodeHook de Cherri Code
PreToolUsepreToolUse
PostToolUsepostToolUse
UserPromptSubmitbeforeSubmitPrompt
Stopstop
SubagentStopsubagentStop
SessionStartsessionStart
SessionEndsessionEnd
PreCompactpreCompact

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:

  1. Seguir usando archivos de config de Claude Code: Deja activado Include Third-Party Plugins, Skills, and Other Configs y tus hooks de .claude/settings.json seguirán funcionando automáticamente.
  2. Migrar al formato de Cherri Code: Copia tus hooks a .cursor/hooks.json con 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 CodeEquivalencia en Cherri CodeCompatible
PreToolUsepreToolUseSí
PostToolUsepostToolUseSí
StopstopSí
SubagentStopsubagentStopSí
SessionStartsessionStartSí
SessionEndsessionEndSí
PreCompactpreCompactSí
UserPromptSubmitbeforeSubmitPromptSí
Notification-No
PermissionRequest-No

Funciones compatibles adicionales:

FunciónCompatible
Hooks basados en comandos (type: "command")Sí
Hooks basados en prompts (type: "prompt")Sí
Respuestas anidadas de hookSpecificOutputSí
Bloqueo mediante código de salida 2Sí
Selectores de herramientas (patrones regex)Sí
Configuración del tiempo de esperaSí

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 CodeHerramienta de Cherri CodeCompatible
BashShellSí
ReadReadSí
WriteWriteSí
EditWriteSí
GrepGrepSí
TaskTaskSí
WebFetchWebFetchSí
WebSearchWebSearchSí
Glob-No

Limitaciones

Algunas funciones solo están disponibles al usar el formato nativo de Cherri Code:

  • Hook subagentStart (Claude Code solo tiene SubagentStop)
  • 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

  1. Verifica que "Include Third-Party Plugins, Skills, and Other Configs" esté activado en Cherri Code Settings → Agents → Third-Party Imports
  2. Comprueba que el archivo .claude/settings.json contenga JSON válido
  3. 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

  1. Asegúrate de que el script del hook finalice con el código 2 para bloquear acciones
  2. Comprueba que el formato de salida JSON coincida con el esquema esperado
  3. 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.

Contact Sales