Skip to main content
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
Available globals:
  • onTransform
  • onBeforeHandle
  • onAfterHandle
  • onError
  • mapResponse

Tool-local hooks

Use tool-local hooks when logic belongs to one tool:
  • before
  • after
Example:
app.tool("create_post", {
  input: z.object({ title: z.string() }),
  handler: ({ input }) => createPost(input),
  after: ({ result }) => {
    console.log("created post", result.id);
  },
});
  • middleware = control flow
  • global hooks = cross-cutting observability
  • tool-local hooks = per-tool analytics or post-processing