Übersicht
Das Claude Agent SDK ermöglicht es, Claude Code als Bibliothek zu nutzen und eigene autonome Agents zu bauen.
# Python
pip install claude-agent-sdk
# TypeScript / Node.js
npm install @anthropic-ai/claude-agent-sdk
# API Key
export ANTHROPIC_API_KEY=your-api-key
SDK vs. Client SDK: Das Client SDK erfordert eine eigene Tool-Loop. Das Agent SDK führt Tools autonom aus — Claude Code als Bibliothek.
Built-in Tools
| Tool | Funktion |
Read | Dateien im Working Directory lesen |
Write | Neue Dateien erstellen |
Edit | Präzise Edits in bestehenden Dateien |
Bash | Terminal-Kommandos, Scripts, Git |
Glob | Files nach Pattern finden |
Grep | Datei-Inhalte mit Regex suchen |
WebSearch | Web durchsuchen |
WebFetch | Web-Page Content fetchen |
AskUserQuestion | Nutzer mit Multiple-Choice fragen |
Agent Loop
Der Agent arbeitet iterativ in einer Schleife:
# Agent Loop Zyklus
1. Prompt lesen
2. Tool überlegen
3. Tool ausführen
4. Ergebnis auswerten
5. Nächsten Schritt planen
6. Wiederholen bis Completion oder Error
Custom Agents & Subagents
from claude_agent_sdk import AgentDefinition, query
# Agent definieren
agent = AgentDefinition(
description="Expert code reviewer",
prompt="Analyze code quality and suggest improvements",
tools=["Read", "Glob", "Grep"]
)
# Agent ausführen
async for message in query(
prompt="Review the auth module",
options=ClaudeAgentOptions(
allowed_tools=["Read", "Glob", "Grep"]
)
):
print(message)
Subagent-Eigenschaften:
- Laufen in separaten Context Windows
- Können eigene Tool-Sets haben
- Berichten Ergebnisse an den Main Agent
parent_tool_use_id für Tracking
- Können mit
isolation: worktree in separaten Git-Worktrees arbeiten
Session Management
# Session ID erfassen
session_id = None
async for message in query(...):
if hasattr(message, "subtype") and message.subtype == "init":
session_id = message.session_id
# Session fortsetzen
async for message in query(
prompt="Continue from before",
options=ClaudeAgentOptions(resume=session_id)
):
pass
Permission Modes
| Mode | Beschreibung |
bypassPermissions | Keine Approval nötig |
acceptEdits | Auto-Accept Edits, Bash braucht Approval |
auto | Alle Tool-Calls auto-approved |
| Interactive | User-Prompts für sensitive Actions |
MCP-Server Integration
# Playwright für Browser-Automation
mcp_servers = {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
# Datenbank-Zugriff
mcp_servers = {
"postgres": {
"command": "mcp-postgres",
"args": ["postgresql://user:pass@localhost/db"]
}
}
Hooks für Agent-Kontrolle
| Hook | Funktion |
PreToolUse | Tool-Aufruf validieren/blockieren |
PostToolUse | Nach Tool-Ausführung reagieren |
Stop | Agent stoppen/weitermachen lassen |
SessionStart | Session initialisieren |
SessionEnd | Cleanup |
async def log_file_change(input_data, tool_use_id, context):
file_path = input_data.get("tool_input", {}).get("file_path", "unknown")
with open("./audit.log", "a") as f:
f.write(f"{datetime.now()}: modified {file_path}\n")
return {}
Cloud Provider
# Amazon Bedrock
export CLAUDE_CODE_USE_BEDROCK=1
# Google Vertex AI
export CLAUDE_CODE_USE_VERTEX=1
# Microsoft Azure Foundry
export CLAUDE_CODE_USE_FOUNDRY=1