Skip to content

AfterToolsEvent

Defined in: src/hooks/events.ts:823

Event triggered after all tools complete execution. Fired after tool results are collected and ready to be added to conversation. Uses reverse callback ordering for proper cleanup semantics.

new AfterToolsEvent(data): AfterToolsEvent;

Defined in: src/hooks/events.ts:844

ParameterType
data{ agent: LocalAgent; message: Message; invocationState: InvocationState; } & HookableEventData

AfterToolsEvent

HookableEvent.constructor

readonly invocationContext?: InvocationContext;

Defined in: src/hooks/events.ts:100

The request this event belongs to (undefined outside one); pass it to InvokeOptions.invocationContext to join it.

HookableEvent.invocationContext


readonly type: "afterToolsEvent";

Defined in: src/hooks/events.ts:824


readonly agent: LocalAgent;

Defined in: src/hooks/events.ts:825


readonly message: Message;

Defined in: src/hooks/events.ts:826


readonly invocationState: InvocationState;

Defined in: src/hooks/events.ts:827


endTurn: string | boolean | ContentBlock[] = false;

Defined in: src/hooks/events.ts:842

When set to true, the agent loop halts after this tool batch completes without calling the model again and a default message ("Turn ended early by hook after tool execution") is appended as the final assistant message. When set to a string, that string is used instead of the default — the string becomes literal assistant content (a TextBlock), not a reason or label. When set to a ContentBlock[], those blocks become the final assistant message content directly (shallow-copied). Contrast with cancel fields on other events, where the string is a cancellation reason.

In all cases stopReason on the returned AgentResult is 'endTurn'.

toJSON(): Pick<AfterToolsEvent, "type" | "message">;

Defined in: src/hooks/events.ts:860

Serializes for wire transport, excluding the agent reference, invocationState, and mutable endTurn field. Called automatically by JSON.stringify().

Pick<AfterToolsEvent, "type" | "message">