isLoopFinished()
Creates a stop condition that never triggers, letting the agent loop run until it naturally finishes (i.e., the model stops making tool calls).
By default, ToolLoopAgent uses stepCountIs(20) as a safety measure to prevent runaway loops that could result in excessive API calls and costs. If you are confident that your agent will terminate naturally or you are less concerned about costs, isLoopFinished() removes that limit and lets the agent run until the model is truly done.
import { ToolLoopAgent, isLoopFinished } from 'ai';
const agent = new ToolLoopAgent({ model: "anthropic/claude-sonnet-4.5", tools: { // your tools }, stopWhen: isLoopFinished(),});
const result = await agent.generate({ prompt: 'Analyze this dataset and create a summary report',});Import
import { isLoopFinished } from "ai"API Signature
Parameters
This function takes no parameters.
Returns
A StopCondition function that always returns false, meaning it never triggers the stop condition. The agent loop will only stop through its natural termination conditions:
- The model stops making tool calls, or
- A tool without an
executefunction is called, or - A tool call needs approval
Examples
Basic Usage
Let the agent run until it's finished:
import { ToolLoopAgent, isLoopFinished } from 'ai';
const agent = new ToolLoopAgent({ model: yourModel, tools: yourTools, stopWhen: isLoopFinished(),});Combining with Other Conditions
You can combine isLoopFinished() with other conditions. Since isLoopFinished() never triggers, the other conditions still apply:
import { ToolLoopAgent, isLoopFinished, hasToolCall } from 'ai';
const agent = new ToolLoopAgent({ model: yourModel, tools: yourTools, stopWhen: [isLoopFinished(), hasToolCall('finalAnswer')],});In practice, this does not make much sense in this context, since you could just omit isLoopFinished().