# Build Your First Agent with the Claude Agent SDK

> Source: https://sukruyusufkaya.com/en/learn/claude-ustaligi/agent-sdk
> Updated: 2026-05-11T13:48:36.143Z
> Category: Claude Ustalığı
> Module: 10. Agent Design
**TLDR:** Hello-World agent with the Claude Agent SDK: tool definitions, system prompt, controller loop, and human approval.

# Hello-World Agent

Görev: "Bir konu ver, agent web search yapsın, sonuçları özetlesin, dosyaya yazsın."

Bu agent'ın 3 tool'u olacak:

- `web_search(query)` — sahte; çalışırken WebSearch tool'u kullan.
- `summarize(text)` — başka bir Claude çağrısı.
- `save_file(path, content)` — local fs.

```python
import os, json
from anthropic import Anthropic
client = Anthropic()

TOOLS = [
    {"name":"web_search","description":"Web'de arama yapar.",
     "input_schema":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]}},
    {"name":"summarize","description":"Verilen metni 5 madde ile özetler.",
     "input_schema":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"]}},
    {"name":"save_file","description":"İçeriği dosyaya yazar.",
     "input_schema":{"type":"object","properties":{"path":{"type":"string"},"content":{"type":"string"}},"required":["path","content"]}},
]

def run_tool(name, args):
    if name == "web_search":
        return [{"title":"Demo","snippet":"Sonuç...","url":"https://example.com"}]
    if name == "summarize":
        return "- madde 1\n- madde 2\n- madde 3\n- madde 4\n- madde 5"
    if name == "save_file":
        # GERÇEKTE: izin halkasından geçirip yaz
        print(f"[would-write] {args['path']} <- {len(args['content'])} chars")
        return {"ok": True}
    raise ValueError(name)

def agent(goal: str, max_steps: int = 6):
    messages = [{"role":"user","content": goal}]
    for step in range(max_steps):
        resp = client.messages.create(
            model="claude-sonnet-4-6",
            max_tokens=2048,
            system="Sen bir araştırma agent'ısın. Plan yap, sırayla araçları kullan ve sonuçta dosya yaz.",
            tools=TOOLS,
            messages=messages,
        )
        if resp.stop_reason != "tool_use":
            return resp.content[0].text
        results = []
        for block in resp.content:
            if block.type == "tool_use":
                results.append({
                    "type":"tool_result",
                    "tool_use_id": block.id,
                    "content": json.dumps(run_tool(block.name, block.input), ensure_ascii=False),
                })
        messages.append({"role":"assistant","content": resp.content})
        messages.append({"role":"user","content": results})
    return "MAX STEPS"

print(agent("Türkiye'deki en yeni AI yatırımları üzerine kısa bir rapor üret ve report.md'ye yaz."))
```

### Skills, MCP ve özel araçlar

Agent SDK'da Skills (markdown + script) ve MCP server entegrasyonu var. Modül 12'de detaylı; şimdilik bil ki "agent'a yetenek eklemek" sadece tool tanımlamakla sınırlı değildir.

### Bütçeler

Her agent çağrısı için: max_steps, max_tokens, max_seconds, max_cost. Üçü dolarsa otomatik durur.

### Çalışma izolasyonu

Dosya / komut çalıştıran agent'ları **sandbox VM** içinde çalıştır. Üretim agent'ı asla doğrudan production sistemlerine root erişimi olmamalı.

**Boşluk doldurma egzersizi (text):**
```text
Agent SDK kullanırken her zaman _____ steps ile sonsuz döngüden korunmalıyız. Hassas tool'lar _____ halkasından geçer. Yetenek için Skills, MCP veya özel _____ eklenir.
```

> ✋ Kontrol noktası: `q-1002-mc1`