Laravel AI SDK 1.0 was released on 23 September 2026, and it is the version that turns Laravel’s first-party AI package from a promising beta into something the team says is “ready for production”. The package gives a Laravel application one API for working with AI providers such as OpenAI, Anthropic and Gemini. Version 1.0 adds a new classification capability, approvable tool calls, support for two frontend chat protocols and a new way of storing conversations.

It also includes breaking changes. The upgrade guide lists 23 of them for the move from 0.11 to 1.0, five rated as high impact, and one requires a database backfill before you deploy. For teams already running the Laravel AI SDK in production, the upgrade needs planning rather than a quick composer update.

This article covers what is new, how classification and tool approvals work in practice, what changed for agents and streaming, and a step-by-step upgrade plan. The classification feature runs on TypeSafe’s Jev models, which we covered at launch in ChatGPT Pioneer Launches Jev Model for Programmatic Logic.

What the Laravel AI SDK 1.0 Release Includes

laravel ai sdk 1 0 classification tool approvals b three open sorting bins with a falling cube

The release notes on GitHub list 87 changes for v1.0.0 alone, published at 12:46 UTC on 23 September. Laravel News and the official Laravel blog announced it the same day.

From beta to 1.0

The laravel/ai repository was created in December 2025 and the Laravel AI SDK entered public beta early in 2026. Since May it has shipped a release roughly every two weeks, from v0.7.0 on 19 May to v0.11.2 on 3 September, before 1.0. The repository is MIT licensed and had about 1,185 stars and 337 forks on release day.

Install it with Composer

New projects install the package in one line:

composer require laravel/ai

The headline features

The Laravel blog summarises 1.0 as “one Laravel-native API for every provider, with conversation storage, streaming chat, agents, tool approvals, and Jev classification.” The team says it has “closed hundreds of bugs” since the beta. The table sets out each new capability and where it works.

FeatureWhat it doesProvider support
ClassificationTyped answers to quick yes/no, choice and score questionsTypeSafe (Jev), OpenRouter
Approvable toolsPause the agent until a person approves, rejects or edits a tool callAll providers
Vercel Chat and AG-UIRead requests and stream responses in two frontend protocolsAll providers
Per-step middlewareRun middleware on every generation step, not once per promptAll providers
Tool searchLoad rarely used tools only when a prompt needs themOpenAI, Anthropic
Code executionRun code in the provider’s own sandboxAnthropic, OpenAI, Azure, Gemini, xAI
Conversation stepsStore one entry per model round trip in a single steps columnAll providers

Provider coverage varies a lot by feature. The chart counts the providers named for each of the three provider-specific capabilities.

Providers supported at launch, by new Laravel AI SDK capability
Code execution 5 providers
Classification 2 providers
Tool search 2 providers

Classification in the Laravel AI SDK

laravel ai sdk 1 0 classification tool approvals c rubber stamp with a round knob handle

Classification is the headline addition, and it reflects a shift in how developers are using AI inside applications.

Why classification is its own capability

“Some AI work isn’t writing at all,” the Laravel blog says. Routing a support ticket, flagging a comment or choosing a branch in a workflow are decisions that need to be fast and cheap. TypeSafe, the company behind Jev, calls these “System One” models. The Laravel AI SDK now treats classification as a capability alongside text, images, audio and embeddings, rather than something you prompt a chat model to do.

Boolean, Choice and Score questions

You pass the text to classify and a set of named questions, and you get a typed answer for each one:

$response = Classification::of($ticket->body)->questions([
    'is_urgent' => new Boolean('Does this message convey urgency?'),
    'department' => new Choice('Which team should handle this?', [
        'billing' => 'Payments, invoicing, refunds',
        'technical' => 'Bugs, outages, integrations',
    ]),
])->classify();

$response['is_urgent']->isTrue() returns a boolean and $response['department']->choice returns the chosen key, such as technical. A third type, Score, returns a value between 0.0 and 1.0.

Str::decide for single questions

For a single yes-or-no question there is a new decide macro on Laravel’s Str class:

Str::of($message)->decide('Is this spam?');

It returns a boolean. An optional threshold argument sets how certain the model must be before it answers yes, which lets you tune false positives against false negatives without writing any prompt.

Running on Jev and OpenRouter

Classification works with TypeSafe and OpenRouter today. Laravel says Jev can answer these questions “in milliseconds at a fraction of the price of traditional LLMs.” At launch, TypeSafe listed Jev at $0.042 per million input tokens, with output unmetered. Our follow-up on how developers are adopting Jev covers its speed and accuracy in production. The team plans to add other providers behind the same Laravel AI SDK interface as they release similar models.

Question typeReturnsTypical use
BooleanTrue or falseIs this urgent? Is this abusive?
ChoiceOne key from a list you defineRoute a ticket to billing, technical or sales
ScoreA value from 0.0 to 1.0Rank leads, grade sentiment, set review priority
Str::decideA boolean, with a certainty thresholdSpam checks and single gating decisions

When to use classification instead of a chat model

Use classification when the answer is a label, a yes/no or a number, and you will act on it in code. Use a text model when you need an explanation, a draft or a summary. Mixing the two works well: classify first, then send only the cases that need a written response to a more expensive model.

Tool Approvals: Human Sign-Off Inside the Laravel AI SDK

laravel ai sdk 1 0 classification tool approvals d sluice gate frame with a lifted panel

The second headline feature puts a person in the loop before an agent does something risky. Approvals first landed in version 0.10 on 21 July; 1.0 reworks how they are stored and streamed.

The Approvable contract

A tool that implements the Approvable contract and uses the InteractsWithApprovals trait pauses the agent until someone approves it. Laravel News suggests a tool that deletes files as the obvious case:

class DeleteFile implements Approvable, Tool
{
    use InteractsWithApprovals;
}

When the agent decides to call an approvable tool, it does not run it. The response lists each pending call with the arguments the model chose.

Approve, reject or edit

You resume the conversation with a decision for each pending call. A decision can approve the call, reject it with a reason that the model sees, or edit the arguments before the tool runs. The edit option matters most in practice: a reviewer can correct a wrong customer ID or reduce a refund amount instead of rejecting the whole action.

Works across every way you run an agent

Approvals work with prompt, stream, queue and the broadcast methods. That means a queued background agent can pause overnight and wait for a manager to approve its actions in the morning, without holding a web request open.

Where approvals belong

Good candidates include deleting data, sending external emails, issuing refunds, changing permissions and anything that spends money. Our guide to human-in-the-loop AI design explains how to decide which actions need a person. The Laravel AI SDK now gives PHP teams the mechanism built in.

Streaming to the Frontend with the Laravel AI SDK

laravel ai sdk 1 0 classification tool approvals e round funnel over a squat jar

Version 1.0 adds support for two frontend protocols, so Laravel back ends can pair with chat interfaces that already exist rather than custom ones.

Vercel Chat in one route

The SDK can read requests and stream responses using the Vercel Chat protocol:

Route::post('/chat', function (Request $request) {
    $chat = Vercel::chat($request);

    return (new SupportAgent)
        ->withMessages($chat->history())
        ->stream($chat)
        ->usingProtocol($chat->protocol());
});

That one route reads the new message, updates the conversation history in your database and processes any tool approval decisions the user submitted.

AG-UI for CopilotKit

The Laravel AI SDK also speaks the Agent User Interaction protocol, AG-UI, used by clients such as CopilotKit. You call usingAgentUserInteractionProtocol() on the stream instead. The 1.0 release adds AG-UI approval interrupts, so an approval request can appear in the user’s chat window as a prompt to confirm.

Rebuilding a chat after reload

Vercel::toUiMessages() converts stored messages back into the format the client expects. That fixes a common annoyance, where a page reload wipes the visible chat even though the conversation is saved.

Agent Middleware Now Runs Every Step

laravel ai sdk 1 0 classification tool approvals f vault door with a three spoke wheel

The middleware change is less visible than classification but may matter more for cost control.

From once per prompt to once per step

Previously, agent middleware ran once per prompt. It now wraps every generation step, so an agent that calls three tools before answering runs your middleware three times. Each step arrives as a PendingStep that you can inspect and copy with changes.

What you can change mid-prompt

The available methods are withModel, withInstructions, withMessages, withTools, onlyTools, withToolChoice, withMaxTokens and withProviderOptions. Between them they cover the model, the instructions, the history, the tools and the output limit.

Cost control examples

The Laravel blog gives several uses. You can take an expensive tool away once the agent has used it, swap to a cheaper model mid-prompt, summarise a long message history before it is sent again, or return a cached answer without calling the provider at all. For teams paying per token, these are the controls that keep an agent’s bill predictable.

Tool Search, Code Execution and Usage Reporting

Three smaller changes round out the Laravel AI SDK 1.0 release.

Tool search

“An agent with 30 tools describes all 30 on every request,” the blog notes, which costs tokens and makes the model’s choice less accurate. Wrapping rarely used tools in ToolSearch means the provider loads them only when a prompt needs them. The wrapped tools need no changes. Tool search works on OpenAI and Anthropic.

Code execution

The new CodeExecution provider tool runs code in the provider’s own sandbox, which gives more accurate results for data analysis and calculations. It is supported on Anthropic, OpenAI, Azure, Gemini and xAI. Because the code runs on the provider’s side, your application server never executes model-written code.

Consistent token usage

Usage reporting is now consistent across providers. promptTokens and completionTokens are renamed inputTokens and outputTokens, and they now include the provider’s full counts. Cached, cache-written and reasoning tokens are reported as subsets of those totals.

Upgrading to Laravel AI SDK 1.0: The Breaking Changes

The upgrade guide rates each breaking change by “likelihood of impact”, which makes it easier to work through only what applies to you.

Most of the 23 changes from 0.11 are low or medium risk. The chart counts them by the guide’s own ratings.

Laravel AI SDK 0.11 to 1.0 breaking changes, by likelihood of impact
High 5 changes
Medium 9 changes
Low 9 changes

The five high-impact changes

High-impact changeWhat breaksWhat to do
Messages store stepstool_calls and tool_results columns are replaced by stepsRun the backfill migration once before deploying
Middleware wraps each stepMiddleware written for once-per-prompt runs several timesCheck logging, billing and rate-limit middleware
Gemini vector store imports waitImports now wait for completionReview timeouts on import jobs
AWS SDK not installed by defaultBedrock provider fails without itRequire the AWS SDK explicitly if you use Bedrock
Token usage includes all tokensReported counts rise and properties are renamedUpdate dashboards, budgets and alerts

The steps column and the backfill

The biggest change is conversation storage. The old design stored a turn’s tool calls and tool results as two flat lists, which lost track of which round trip made each call. Some providers rejected the rebuilt history, and a call that never ran looked the same as one waiting for approval. Messages now carry a single steps JSON column with one entry per round trip. If you run raw SQL against tool_calls or tool_results, it must move to steps.

Resolve pending approvals first

The approval_state column is replaced by a status column with three values: completed, paused or failed. The reason a call is waiting is now stored on the call as approval_reason. The guide warns that turns waiting for approval “cannot be resumed” after the old data is removed, so resolve or abandon them before running the migration.

Let Boost do the upgrade

The team recommends handing most of the work to an AI assistant through Laravel Boost, its first-party Model Context Protocol server:

composer require laravel/boost --dev
php artisan boost:install

Then run the /upgrade-ai-sdk-v1 slash command in Claude Code, Cursor, OpenCode, Gemini or VS Code. Boost walks the assistant through the guide one change at a time, using your own codebase as context.

An Upgrade Plan for Production Laravel AI SDK Apps

Boost handles the code, but a production upgrade also needs data and operations checks that no assistant can do alone.

Before the upgrade

Search the codebase and any reporting queries for tool_calls, tool_results and approval_state. List every agent middleware class and note whether it assumes it runs once per prompt. Export current token usage so you have a baseline to compare against.

During the upgrade

Resolve pending approvals, take a database backup, then run the backfill migration once in each environment before deploying the new code. Deploy to staging first and replay a sample of real conversations.

After the upgrade

Expect reported token counts to rise, because they now include cached and reasoning tokens. That is a reporting change, not a cost increase, but it will trip budget alerts set on the old numbers. Recalibrate alerts in the first week.

StageCheckOwner
BeforeFind raw SQL on tool_calls, tool_results and approval_stateDeveloper
BeforeReview middleware that assumes one run per promptDeveloper
DuringResolve pending approvals and back up the databaseOperations
DuringRun the backfill migration before deploying 1.0Operations
AfterRecalibrate token budgets and alertsFinance and engineering

Security and Cost Controls in the Laravel AI SDK

The 1.0 features are also a set of controls, and it is worth treating them that way when you design an AI feature.

Approvals as a defence against prompt injection

An agent that reads emails, tickets or web pages can be tricked by instructions hidden in that content. Approvable tools limit the damage: even if a malicious message persuades the model to call a destructive tool, the call stops and waits for a person. Put every tool that deletes, sends, pays or changes permissions behind an approval, and keep read-only tools open.

Sandboxed code execution

Letting a model write and run code on your own server is a serious cybersecurity risk. The CodeExecution provider tool moves that work into the provider’s sandbox, so model-written code never touches your application server or database. Use it for calculations and data analysis rather than building your own execution environment.

Token budgets per step

Because middleware now runs on every step, it is the right place to enforce a budget. A middleware class can count tokens across steps, drop expensive tools once a limit is near, or switch to a cheaper model for the rest of the turn. That turns a vague cost policy into a hard ceiling in code.

Logging decisions for audit

The new steps column records each round trip with the tool calls and results it produced, and the status column records whether a turn completed, paused or failed. Together they give an audit trail of what the agent did and who approved it. Keep that data for as long as your retention policy allows, because it is the evidence you will need if an AI action is ever questioned.

Classify before you generate

Running a cheap Laravel AI SDK classification first, then sending only the cases that need a written reply to a larger model, cuts both cost and exposure. Fewer calls to a general-purpose model means fewer chances for it to be misled, and a smaller bill at the end of the month.

What the Laravel AI SDK Means for UK Businesses

For a UK business with a Laravel application, 1.0 changes what is practical to build in-house.

PHP teams can ship AI without a separate service

Many firms assumed AI features meant adding a Python service next to their PHP application. The Laravel AI SDK removes much of that need for common tasks such as chat, agents, classification and embeddings. If you are weighing the two languages, our comparison of PHP or Python for web development still applies, but the AI gap has narrowed.

Approvals as governance

Tool approvals turn an AI governance policy into code. If your policy says a person must sign off refunds or deletions, the approval record now sits in the same database as the conversation. That makes audits much simpler.

Classification as a cost lever

Routing and triage are often the highest-volume AI calls in an application. Moving them from a chat model to a classification model can cut the cost of those calls sharply and make them faster.

Provider flexibility

Because the SDK puts one API over many providers, switching models is closer to a configuration change than a rewrite. Our software development team in Chester builds on that flexibility so clients are not locked into one vendor’s pricing.

Frequently Asked Questions About the Laravel AI SDK

What is the Laravel AI SDK?

A first-party Laravel package, installed with composer require laravel/ai, that gives applications one API for working with AI providers such as OpenAI, Anthropic and Gemini.

When was version 1.0 released?

On 23 September 2026, after a beta that began early in 2026.

What does classification do?

It answers quick yes/no, choice and score questions with typed results, running on TypeSafe’s Jev models or OpenRouter, and adds a Str::decide macro for single yes-or-no questions.

How do tool approvals work?

A tool that implements the Approvable contract pauses the agent. A person then approves the call, rejects it with a reason or edits its arguments before it runs.

Is the upgrade to 1.0 difficult?

It has 23 breaking changes, five rated high impact. The most important is a new steps column that needs a one-off backfill migration before you deploy.

Can AI help with the upgrade?

Yes. Laravel Boost provides an /upgrade-ai-sdk-v1 command for Claude Code, Cursor, OpenCode, Gemini and VS Code that walks an assistant through the guide.

References