What changed
Laravel’s current AI SDK documentation includes a complete human tool-approval flow for conversational agents. A tool can implement the `Approvable` contract and use `InteractsWithApprovals`; approval can be unconditional or decided from the tool-call arguments. When approval is required, the agent pauses before execution and exposes the tool name, arguments and reason. The application can then resume the persisted conversation with decisions to approve, reject or edit tool-call arguments.
Why it matters
Approval gates are one of the practical differences between demo agents and agents allowed to touch files, customer records, infrastructure or other irreversible systems. Laravel developers no longer need to design the pause/resume protocol, tool-call identity checks and persistence semantics from scratch. The SDK also makes an important boundary explicit: approval depends on a persisted conversational agent, so builders need to treat conversation state as part of the execution system rather than merely chat history.
Approval is part of the tool contract
Laravel makes an individual tool approvable by implementing a contract rather than by wrapping the entire agent in a generic confirmation prompt. The tool can decide from its arguments whether approval is needed and can provide a reason, which lets applications distinguish low-risk calls from destructive or sensitive ones.
The agent pauses and resumes the same conversation
When an approvable tool is selected, Laravel does not execute it first and ask afterward. The response contains pending approvals and the agent pauses. The application resumes the persisted conversation with a decision for each call. Laravel validates call IDs and can reject unknown, missing or already-resolved decisions, reducing the risk of applying a stale approval to the wrong action.
The flow works across streaming and queues
Laravel documents approval support for normal prompts, streams, queues and broadcasts. Streaming emits a tool-approval request event; queued agents surface the paused response through callbacks and dispatch approval events. That makes the mechanism usable in asynchronous application architecture rather than only a synchronous chat screen.
Persistence is a real requirement
Human approval requires a `Conversational` agent with persisted history so the paused run can be resumed. Builders therefore need retention, authorization and cleanup rules around that state. Laravel’s example also authorizes access to the conversation before accepting approval decisions, which is the correct pattern when approval itself can trigger a consequential action.