
Description
Use when building custom agent loops. Modify tool dispatch, history management, hooks, control flow.
SKILL.md
ai-python-custom-loop
Keep the default shape unless you must change control flow:
class MyAgent(ai.Agent):
async def loop(self, context: ai.Context):
while context.keep_running():
async with (
ai.stream(context=context) as stream,
ai.ToolRunner() as runner,
):
async for event in ai.util.merge(stream, runner.events()):
yield event
if isinstance(event, ai.events.ToolEnd):
runner.schedule(context.resolve(event.tool_call))
context.add(stream.message)
context.add(runner.get_tool_message())
Rules:
- Call
context.keep_running()at the top of each turn. - Use
ai.stream(context=context)so model, messages, tools, output type, and params stay together. - Yield events from the loop.
Agent.runhides replay events from callers. - On
ToolEnd, usecontext.resolve(event.tool_call). It handles validation, approval gates, and cached replay results. - Do not call
tool.fndirectly unless you also handle validation, approvals, and cached results. - Schedule resolved calls with
ToolRunner.schedule(...). ToolRunner.schedule(...)also accepts a zero-arg async callable that returnsai.events.ToolCallResult.- If you make a result yourself, use
runner.add_result(ai.tool_result(...)). - Add
stream.message, thenrunner.get_tool_message().context.add(...)skips replay messages. - Every tool call must get one tool result.
- For hooks, let
context.resolve(...)build the gated call. Useai-python-serverless-executionfor request boundaries. - For durable calls, keep this shape and wrap only model or tool I/O. Use
ai-python-durable-execution.
More skills from the ai-python repository
View all 8 skillsai-python-basics
build AI agents with Python SDK
Jul 17AgentsAI SDKLLMPythonai-python-custom-provider
implement custom AI SDK providers
Jul 17AI SDKPythonai-python-durable-execution
add durable execution to AI agents
Jul 17AgentsAI SDKPythonai-python-serverless-execution
build serverless AI SDK endpoints
Jul 17AI SDKPythonServerlessai-python-streaming-tools
stream AI SDK Python tool outputs
Jul 17AgentsAI SDKPythonai-python-subagents
implement subagent patterns in Python
Jul 17AgentsMulti-AgentPython
More from Vercel Labs
View publisheragent-browser
automate browser interactions for AI agents
agent-browser
Jul 20AgentsAutomationBrowser Automationagentcore
run browser automation on AWS Bedrock
agent-browser
Jul 17AutomationAWSBrowser Automationcore
navigate and interact with web pages
agent-browser
Jul 26AgentsBrowser AutomationNavigationderive-client
reverse engineer internal APIs from browser traffic
agent-browser
Jul 20API DevelopmentAutomationBrowser AutomationWeb Scrapingdogfood
perform exploratory testing on web applications
agent-browser
Jul 17Browser AutomationDebuggingQATestingelectron
automate Electron desktop applications
agent-browser
Jul 17AgentsBrowser AutomationDesktop