redop has two lifecycle layers:
- global hooks for framework-wide observability
- tool-local hooks for tool-specific logic
Canonical order
Global hooks
Use global hooks for:- logging every tool call
- aggregate analytics
- tracing
- generic error reporting
onTransformonBeforeHandleonAfterHandleonErrormapResponse
Tool-local hooks
Use tool-local hooks when logic belongs to one tool:beforeafter
Recommended split
- middleware = control flow
- global hooks = cross-cutting observability
- tool-local hooks = per-tool analytics or post-processing