Saltar al contenido
NUEVOGuía práctica con 5 agentes Python para Odoo, verificada contra Odoo 20 →
Focuz/academy

Lección 5 de 7 · intermedio · 12 min

Hooks: audita y bloquea lo que hace el agente

Usa PreToolUse y PostToolUse para registrar cada acción y denegar escrituras cuando el agente solo debe revisar código.

Revisión de un addon sin riesgo de cambios

Un caso típico: quieres que el agente revise un addon de Odoo (permisos, record rules, uso de sudo(), SQL crudo) y que no pueda modificar nada.

from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, HookMatcher

async def deny_writes(input_data, tool_use_id, context):
    return {"hookSpecificOutput": {
        "hookEventName": input_data["hook_event_name"],
        "permissionDecision": "deny",
        "permissionDecisionReason": "Revisión de solo lectura",
    }}

async def audit(input_data, tool_use_id, context):
    print("AUDIT", input_data["tool_name"], tool_use_id)
    return {}

opts = ClaudeAgentOptions(
    cwd="./addons/mi_modulo",
    permission_mode="plan",
    allowed_tools=["Read", "Glob", "Grep"],
    hooks={
        "PreToolUse": [HookMatcher(matcher="Write|Edit|Bash", hooks=[deny_writes])],
        "PostToolUse": [HookMatcher(hooks=[audit])],
    },
)

async def review():
    async with ClaudeSDKClient(options=opts) as client:
        await client.query("Revisa el addon: ACL, record rules, sudo() y SQL crudo. Lista hallazgos por severidad.")
        async for msg in client.receive_response():
            print(msg)

Eventos disponibles en Python

PreToolUse, PostToolUse, PostToolUseFailure, UserPromptSubmit, Stop, SubagentStart, SubagentStop, PreCompact, Notification y PermissionRequest. Según la documentación de hooks, SessionStart y SessionEnd no están disponibles como callbacks en Python.

Practica con 5 casos reales

Descarga la guía gratuita con agentes Python para Odoo, de Junior a Senior.

Quiero la guía →