agentskit.js

ToolConfirmation

Human-in-the-loop approval UI for guarded tool calls.

Shown when a tool's requiresConfirmation is set. Approve or deny forwards to chat.approve / chat.deny. Blocks the run until resolved.

#Props

PropType
toolCallToolCall
onApprove(toolCallId: string) => void
onDeny(toolCallId: string, reason?: string) => void

#Example

{chat.messages
  .flatMap((m) => m.parts)
  .filter((p) => p.type === 'tool-call' && p.status === 'awaiting-approval')
  .map((tc) => (
    <ToolConfirmation
      key={tc.id}
      toolCall={tc}
      onApprove={(id) => chat.approve(id)}
      onDeny={(id, reason) => chat.deny(id, reason)}
    />
  ))}

#Per-framework

Surface is identical to ToolCallView. Angular: <ak-tool-confirmation>.

#Trusted application proposals

Trusted application UI can enter the same confirmation flow without fabricating a model response:

const call = await chat.proposeToolCall({
  id: crypto.randomUUID(),
  name: 'send-email',
  args: { to: 'ada@example.com' },
})

The tool must be registered with requiresConfirmation: true. The configured validateArgs checks its schema before the canonical call appears. This method never executes the tool; use the existing approve or deny handlers.

Headless controller users can import proposeToolCall(controller, proposal) from @agentskit/core/tool-proposal. The helper resolves the tool and validator through a controller-bound capability, so validation and later execution share one authority.

Explore nearby

✎ Edit this page on GitHubΒ·Found a problem? Open an issue β†’Β·How to contribute β†’

On this page

Ask the docs
Ask anything about AgentsKit. Answers come from the docs corpus and cite their sources.