.devin/ de tu proyecto (o en una configuración a nivel de usuario) y Devin CLI los ejecutará en los eventos del ciclo de vida que correspondan. Los hooks existentes en los directorios .claude/ también se detectan automáticamente — consulta Dónde se encuentran los hooks.
¿Qué pueden hacer los Hooks?
Aplicar políticas
Bloquear comandos peligrosos, exigir confirmación para acciones específicas o restringir el acceso a archivos.
Agregar contexto
Inyectar instrucciones o información adicional cuando se llaman herramientas específicas.
Ejecutar efectos secundarios
Ejecutar scripts, enviar notificaciones o registrar eventos cuando ocurren.
Modificar permisos
Otorgar o restringir permisos dinámicamente según la situación.
Ejemplo rápido
.devin/hooks.v1.json en tu proyecto:
./scripts/check-command.sh antes de ejecutar cada comando de shell. El script recibe los datos del evento por stdin y puede impedir la ejecución devolviendo un código de salida distinto de cero.
Eventos de hooks
| Evento | Cuándo se activa |
|---|---|
PreToolUse | Antes de que se ejecute una herramienta |
PostToolUse | Después de que una herramienta termine |
PermissionRequest | Cuando se requiere una decisión sobre permisos |
UserPromptSubmit | Cuando el usuario envía un mensaje |
Stop | Cuando el agente quiere detenerse |
SessionStart | Cuando comienza una sesión |
SessionEnd | Cuando termina una sesión |
Formato de los hooks
command o prompt), un matcher opcional (una regex sobre el tool_name del evento del hook) y una configuración:
| Campo | Descripción |
|---|---|
matcher | Expresión regular que se compara con tool_name del evento del hook. Una cadena vacía o la omisión de matcher coincide con todos los nombres de herramientas. |
type | "command" para ejecutar un comando de shell, o "prompt" para evaluar un prompt de LLM. |
command | Comando de shell que se debe ejecutar (para el tipo command). |
prompt | Prompt de LLM que se debe evaluar (para el tipo prompt). |
timeout | Tiempo de espera en segundos (opcional). |
Hooks de comando
DEVIN_PROJECT_DIR se establece automáticamente como el directorio raíz del proyecto.
Consulta Cómo usar el Matcher para conocer los nombres de las herramientas integradas y el formato de nombre de herramienta de MCP con los que puedes hacer coincidencias.
Formato de salida
decision en el nivel superior (con un reason opcional):
additionalContext dentro de un objeto hookSpecificOutput identificado con el nombre del evento:
| Campo de salida | Descripción |
|---|---|
decision | "approve" para permitir la acción, o "block" para denegarla |
reason | Explicación que se muestra al agente |
hookSpecificOutput.hookEventName | Evento al que se aplica este resultado (p. ej., UserPromptSubmit, SessionStart, PostToolUse) |
hookSpecificOutput.additionalContext | Texto que se inyecta en el contexto del agente (para UserPromptSubmit, SessionStart, PostToolUse) |
Códigos de salida
| Código | Significado |
|---|---|
| 0 | Éxito — el hook continúa con normalidad |
| 2 | Bloqueo — la acción se deniega |
| Otro | Error — se registra, pero no bloquea |
Dónde se encuentran los hooks
Nivel de proyecto
| Ubicación | Descripción |
|---|---|
.devin/hooks.v1.json | Archivo de hooks independiente (recomendado) |
.devin/config.json | clave "hooks" en el archivo de configuración |
.devin/config.local.json | clave "hooks" (anulación local, incluida en .gitignore) |
.claude/settings.json | clave "hooks" (formato de Claude Code) |
.claude/settings.local.json | clave "hooks" (formato de Claude Code) |
A nivel de usuario (global)
| Ubicación | Descripción |
|---|---|
~/.config/devin/config.json (%APPDATA%\devin\config.json en Windows) | clave "hooks" en la configuración del usuario |
~/.claude.json | clave "hooks" (formato de Claude Code) |
~/.claude/settings.json | clave "hooks" (formato de Claude Code) |
~/.claude/settings.local.json | clave "hooks" (formato de Claude Code) |
En
.devin/hooks.v1.json, el objeto hooks es el archivo completo (no se necesita una clave contenedora). En todas las demás ubicaciones, hooks está anidado bajo la clave "hooks" dentro de un archivo de configuración.Los hooks de las rutas
.claude/ se cargan cuando read_config_from.claude está habilitado (de forma predeterminada). Si es necesario, puedes desactivarlo en tu configuración de usuario.Verificar hooks
/hooks para ver todos los hooks cargados actualmente y sus archivos de origen:
Próximos pasos
Hooks del ciclo de vida
Profundiza en cada tipo de evento y en qué datos hay disponibles.
Configuración
Controla de qué ubicaciones de configuración lee los hooks Devin CLI.

