Skip to content

Tool Approval

Objective: run a mode with toolApproval = "ask" and resolve pending tool requests.

class ReviewMode extends HarnessMode {
toolApproval = "ask" as const;
tools = [new WriteSummaryTool()];
}
const store = await createHarnessSessionStore({
agent: { definition: agent },
providers: [new OpenAIProvider()],
defaultModel: "openai/gpt-5.1",
});
const stream = await store.stream("approval-guide", "Write a project summary.");
for await (const event of stream) {
if (event.type === "tool.approval.requested") {
if (event.approval.risk === "write") {
await event.approval.approve();
} else {
await event.approval.deny("Only write approvals are expected here.");
}
}
}

Tools opt into approval:

class WriteSummaryTool extends HarnessTool<WriteSummaryInput> {
risk = "write" as const;
requiresApproval = true;
approvalTimeoutMs = 60_000;
}

Boundary note: the tool requests approval as behavior metadata; the mode decides the policy and the host owns the user flow for resolving requests.

API: Approvals.