📡 You're offline — showing cached content
New version available!
Quick Access
Tutorials AI Agents and Automation Building an Agent Loop

Building an Agent Loop

7 min read Quiz at the end
The agent loop runs tool calls, feeds results back, and iterates until stop_reason is end_turn.

Building a Complete Agent Loop

import anthropic, subprocess, json

client = anthropic.Anthropic()

def execute_tool(name: str, inp: dict) -> str:
    if name == "run_python":
        result = subprocess.run(
            ["python3","-c",inp["code"]],
            capture_output=True, text=True, timeout=10
        )
        return result.stdout or result.stderr
    if name == "read_file":
        return open(inp["path"]).read()
    return f"Unknown tool: {name}"

def run_agent(goal: str, max_turns: int = 10) -> str:
    messages = [{"role":"user","content":goal}]
    for turn in range(max_turns):
        resp = client.messages.create(
            model="claude-opus-4-5",
            max_tokens=2048,
            tools=tools,
            messages=messages
        )
        messages.append({"role":"assistant","content":resp.content})

        if resp.stop_reason == "end_turn":
            return resp.content[-1].text  # done!

        tool_results = []
        for block in resp.content:
            if block.type == "tool_use":
                result = execute_tool(block.name, block.input)
                tool_results.append({
                    "type":"tool_result",
                    "tool_use_id":block.id,
                    "content":result
                })
        messages.append({"role":"user","content":tool_results})
    return "Max turns reached"
Topic Quiz · 1 questions

Test your understanding before moving on

1. What happens when stop_reason is end_turn in an Anthropic agent loop?
💡 stop_reason=end_turn means the LLM decided the task is complete with no further tool calls needed.