Skip to content

Hooks

3 methods on the Hooks resource.

3 methods · 0 available to app tokens36 pages in SDK Reference

import { Compozy } from "@compozy/client";

3 of 3

getHookCatalog

List the resolved hook catalog

compozy.hooks.getHookCatalog({ query }) → Promise<HookCatalogResponse>

Options

workspacestringquery
Workspace id or path
agentstringquery
Agent name
event"agent.instance.created" | "agent.instance.paused" | "agent.instance.resumed" | "agent.instance.archived" | "agent.instance.adopted" | "subagent.settled" | "session.pre_create" | "session.post_create" | "session.pre_resume" | "session.post_resume" | "session.pre_stop" | "session.post_stop" | "session.message_persisted" | "session.runtime_recovery.started" | "session.runtime_recovery.succeeded" | "session.runtime_recovery.exhausted" | "input.pre_submit" | "prompt.post_assemble" | "event.pre_record" | "event.post_record" | "automation.job.pre_fire" | "automation.job.post_fire" | "automation.trigger.pre_fire" | "automation.trigger.post_fire" | "automation.run.completed" | "automation.run.failed" | "agent.pre_start" | "agent.spawned" | "agent.crashed" | "agent.stopped" | "agent.soul.snapshot.resolved" | "agent.soul.mutation.after" | "agent.heartbeat.policy.resolved" | "agent.heartbeat.wake.before" | "agent.heartbeat.wake.after" | "session.health.update.after" | "turn.start" | "turn.end" | "message.start" | "message.delta" | "message.end" | "tool.pre_call" | "tool.post_call" | "tool.post_error" | "permission.request" | "permission.resolved" | "permission.denied" | "context.pre_compact" | "context.post_compact" | "coordinator.pre_spawn" | "coordinator.spawned" | "coordinator.decision" | "coordinator.stopped" | "coordinator.failed" | "task.blocked" | "task.unblocked" | "task.needs_attention" | "task.recovered" | "task.status_changed" | "task.run.enqueued" | "task.run.pre_claim" | "task.run.post_claim" | "task.run.lease_extended" | "task.run.lease_expired" | "task.run.lease_recovered" | "task.run.released" | "task.run.completed" | "task.run.failed" | "loop.started" | "loop.generation.pre" | "loop.generation.post" | "loop.gate.pre" | "loop.gate.post" | "loop.node.terminal" | "loop.terminal" | "spawn.pre_create" | "spawn.created" | "spawn.parent_stopped" | "spawn.ttl_expired" | "spawn.reaped" | "session.attention.changed" | "window_manager.layout.applied" | "window_manager.desktop.created" | "window_manager.desktop.deleted" | "window_manager.window.moved" | "window_manager.window.opened" | "window_manager.window.closed" | "window_manager.stack.grouped" | "window_manager.stack.ungrouped" | "window_manager.stack.activated" | "worktree.pre_create" | "worktree.pre_remove" | "worktree.created" | "worktree.adopted" | "worktree.removed" | "terminal.opened" | "terminal.closed" | "terminal.command_started" | "terminal.command_finished" | "terminal.input_requested" | "terminal.input_provided" | "terminal.recording_started" | "terminal.recording_stopped" | "terminal.subscriber_evicted" | "terminal.limit_rejected" | "agent.instance.proposal.picked"query
Hook event name
source"native" | "config" | "agent_definition" | "skill"query
Hook source
mode"sync" | "async"query
Hook mode

GET /api/hooks/catalogapp tokens denied

example.ts
import { Compozy } from "@compozy/client"; const compozy = await Compozy.connect();const result = await compozy.hooks.getHookCatalog();

getHookEvents

List supported hook taxonomy metadata

compozy.hooks.getHookEvents({ query }) → Promise<HookEventsResponse>

Options

family"session" | "input" | "prompt" | "event" | "agent" | "turn" | "message" | "tool" | "permission" | "context" | "terminal"query
Hook event family
sync_onlybooleanquery
Only return sync-eligible events

GET /api/hooks/eventsapp tokens denied

example.ts
import { Compozy } from "@compozy/client"; const compozy = await Compozy.connect();const result = await compozy.hooks.getHookEvents();

getHookRuns

List hook run history for one session

compozy.hooks.getHookRuns({ path, query }) → Promise<HookRunsResponse>

Options

workspace_idstringpathrequired
Workspace id
sessionstringqueryrequired
Session id
event"agent.instance.created" | "agent.instance.paused" | "agent.instance.resumed" | "agent.instance.archived" | "agent.instance.adopted" | "subagent.settled" | "session.pre_create" | "session.post_create" | "session.pre_resume" | "session.post_resume" | "session.pre_stop" | "session.post_stop" | "session.message_persisted" | "session.runtime_recovery.started" | "session.runtime_recovery.succeeded" | "session.runtime_recovery.exhausted" | "input.pre_submit" | "prompt.post_assemble" | "event.pre_record" | "event.post_record" | "automation.job.pre_fire" | "automation.job.post_fire" | "automation.trigger.pre_fire" | "automation.trigger.post_fire" | "automation.run.completed" | "automation.run.failed" | "agent.pre_start" | "agent.spawned" | "agent.crashed" | "agent.stopped" | "agent.soul.snapshot.resolved" | "agent.soul.mutation.after" | "agent.heartbeat.policy.resolved" | "agent.heartbeat.wake.before" | "agent.heartbeat.wake.after" | "session.health.update.after" | "turn.start" | "turn.end" | "message.start" | "message.delta" | "message.end" | "tool.pre_call" | "tool.post_call" | "tool.post_error" | "permission.request" | "permission.resolved" | "permission.denied" | "context.pre_compact" | "context.post_compact" | "coordinator.pre_spawn" | "coordinator.spawned" | "coordinator.decision" | "coordinator.stopped" | "coordinator.failed" | "task.blocked" | "task.unblocked" | "task.needs_attention" | "task.recovered" | "task.status_changed" | "task.run.enqueued" | "task.run.pre_claim" | "task.run.post_claim" | "task.run.lease_extended" | "task.run.lease_expired" | "task.run.lease_recovered" | "task.run.released" | "task.run.completed" | "task.run.failed" | "loop.started" | "loop.generation.pre" | "loop.generation.post" | "loop.gate.pre" | "loop.gate.post" | "loop.node.terminal" | "loop.terminal" | "spawn.pre_create" | "spawn.created" | "spawn.parent_stopped" | "spawn.ttl_expired" | "spawn.reaped" | "session.attention.changed" | "window_manager.layout.applied" | "window_manager.desktop.created" | "window_manager.desktop.deleted" | "window_manager.window.moved" | "window_manager.window.opened" | "window_manager.window.closed" | "window_manager.stack.grouped" | "window_manager.stack.ungrouped" | "window_manager.stack.activated" | "worktree.pre_create" | "worktree.pre_remove" | "worktree.created" | "worktree.adopted" | "worktree.removed" | "terminal.opened" | "terminal.closed" | "terminal.command_started" | "terminal.command_finished" | "terminal.input_requested" | "terminal.input_provided" | "terminal.recording_started" | "terminal.recording_stopped" | "terminal.subscriber_evicted" | "terminal.limit_rejected" | "agent.instance.proposal.picked"query
Hook event name
outcome"applied" | "denied" | "failed" | "skipped" | "dropped" | "rejected"query
Hook execution outcome
sincestringquery
Only runs recorded since this timestamp
lastintegerquery
Maximum number of records to return

GET /api/workspaces/{workspace_id}/hooks/runsapp tokens denied

example.ts
import { Compozy } from "@compozy/client"; const compozy = await Compozy.connect();const result = await compozy.hooks.getHookRuns({ path: { "workspace_id": "workspace_id" }, query: { "session": "session" } });