# Claude Agent SDK - Documentație Completă ## Cuprins 1. [Overview](#overview) 2. [Ce este Claude Agent SDK](#ce-este-claude-agent-sdk) 3. [Instalare și Setup](#instalare-și-setup) 4. [Arhitectură și Concepte Cheie](#arhitectură-și-concepte-cheie) 5. [Features Principale](#features-principale) 6. [Cazuri de Utilizare](#cazuri-de-utilizare) 7. [Exemple de Cod](#exemple-de-cod) 8. [Integrări Posibile](#integrări-posibile) 9. [Monitoring și Debugging](#monitoring-și-debugging) 10. [Best Practices](#best-practices) 11. [Resurse și Referințe](#resurse-și-referințe) --- ## Overview **Claude Agent SDK** este SDK-ul oficial de la Anthropic care permite dezvoltatorilor să construiască agenți AI custom folosind aceeași arhitectură și tooling care stau la baza **Claude Code**. ### Insight Principal > **Claude Code nu este doar pentru coding!** Este un "agent harness" puternic care poate fi folosit pentru orice tip de task automat: knowledge management, customer support, research, automation workflows, și mult mai mult. ### De ce este Important? - **Flexibility**: Construiește agenți custom pentru orice use case - **Production-Ready**: Include context management, permissions, error handling out-of-the-box - **Extensible**: Suport complet pentru MCP (Model Context Protocol) servers - **Programmable**: Integrează-l în orice workflow, application sau automation --- ## Ce este Claude Agent SDK ### Evoluția Numelui - **Înainte**: Claude Code SDK - **Acum**: Claude Agent SDK (redenumit în 2025) - **Motiv**: SDK-ul poate fi folosit pentru mult mai mult decât coding ### Arhitectura Core Claude Agent SDK este construit peste "agent harness" care alimentează Claude Code CLI. Oferă: ``` ┌─────────────────────────────────────┐ │ Your Custom Application/Workflow │ │ (Telegram, Obsidian, Email, etc.) │ └──────────────┬──────────────────────┘ │ ┌──────────────▼──────────────────────┐ │ Claude Agent SDK (Python/TS) │ │ • Context Management │ │ • Tool Execution │ │ • Permission System │ │ • MCP Integration │ └──────────────┬──────────────────────┘ │ ┌──────────────▼──────────────────────┐ │ Claude API (Anthropic) │ │ Claude Sonnet 4.5 / Opus │ └─────────────────────────────────────┘ ``` --- ## Instalare și Setup ### Cerințe - **Python**: 3.10+ - **Node.js**: Necesar pentru unele features - **API Key**: Anthropic API key SAU Claude subscription (Pro/Max plan) ### Instalare Python ```bash # Instalare SDK pip install claude-agent-sdk # Verificare instalare python -c "from claude_agent_sdk import query; print('OK')" ``` ### Instalare TypeScript/Node.js ```bash # Instalare SDK npm install @anthropic-ai/claude-agent-sdk # SAU cu yarn yarn add @anthropic-ai/claude-agent-sdk ``` ### Autentificare **Opțiunea 1: Anthropic API Key** (plătești per token) > Configurează variabila de mediu ANTHROPIC_API_KEY folosind mecanismul specific shell-ului tău (ex.: comanda `export`). **Opțiunea 2: Claude Subscription** (recomandat pentru development) ```bash # Folosește Claude Pro/Max plan claude-code login ``` Avantaj Opțiunea 2: Nu plătești API credits separat dacă ai deja subscription. --- ## Arhitectură și Concepte Cheie ### 1. Message Blocks Claude Agent SDK funcționează pe conceptul de **message blocks** - nu streamează token-by-token, ci returnează blocuri complete de acțiuni: ``` User Request ↓ [Block 1] Text: "I'll help you with that" ↓ [Block 2] Tool Use: Reading file xyz.py ↓ [Block 3] Text: "I found the issue" ↓ [Block 4] Tool Use: Editing file xyz.py ↓ [Block 5] Text: "Done! Here's what I changed..." ↓ [Final Block] Result: Task completed ``` ### 2. Query Function Funcția centrală pentru interacțiunea cu agentul: ```python from claude_agent_sdk import query # Query returnează un iterator de message blocks messages = query( messages=[{"role": "user", "content": "Your request"}], options=agent_options ) # Iterează prin blocks for message in messages: # Process each block print(message) ``` ### 3. Agent Options Configurarea agentului prin `options`: ```python agent_options = { "systemPrompt": "You are a helpful assistant...", "cwd": "/path/to/working/directory", "allowedTools": ["read", "write", "bash", "glob"], "mcpServers": { "server-name": { "command": "node", "args": ["server.js"] } } } ``` ### 4. Context Management Automat SDK-ul gestionează automat: - **Context overflow prevention**: Compactare automată când contextu devine prea mare - **Session management**: Păstrează history-ul conversației - **Caching**: Automatic prompt caching pentru performanță --- ## Features Principale ### 1. Rich Tool Ecosystem **Built-in Tools:** - **File Operations**: Read, Write, Edit, Glob (pattern matching) - **Code Execution**: Bash commands, Python scripts - **Web Search**: Integrare cu search engines - **Web Fetch**: Descarcă și procesează conținut web **Example:** ```python agent_options = { "allowedTools": [ "read", # Citire fișiere "write", # Scriere fișiere "edit", # Editare fișiere (find & replace) "glob", # Găsire fișiere prin pattern "bash", # Execuție comenzi "websearch", # Căutare web "webfetch" # Fetch URL-uri ] } ``` ### 2. Granular Permissions Control fin asupra ce poate face agentul: ```python # Permisiuni stricte permissions = { "allowedTools": ["read", "glob"], # Doar citire, fără modificări "cwd": "/safe/directory", # Limitează la un director } # Permisiuni complete permissions = { "allowedTools": "*", # Toate tool-urile "bash": { "allowedCommands": ["git", "npm", "pytest"] # Doar comenzi specifice } } ``` ### 3. MCP Server Integration **Model Context Protocol (MCP)** permite extinderea capabilities: ```python mcp_config = { "mcpServers": { # Standard I/O server "sequential-thinking": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"] }, # SSE server "custom-api": { "url": "http://localhost:3000/sse", "transport": "sse" }, # Asana integration (project management) "asana": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-asana"] } } } ``` **Popular MCP Servers:** - `sequential-thinking`: Extended thinking/reasoning - `filesystem`: Advanced file operations - `github`: GitHub API integration - `slack`: Slack integration - `google-drive`: Google Drive access - `database`: SQL database access ### 4. Streaming vs Single-Shot Mode **Streaming Mode** (default): ```python # Primești blocks incremental pe măsură ce sunt generate for message in query(messages, options): print(message) # Block disponibil imediat ``` **Single-Shot Mode** (pentru batch processing): ```python # Așteaptă completion complet result = query_sync(messages, options) all_blocks = list(result) ``` ### 5. Custom System Prompts Definește comportamentul agentului: ```python options = { "systemPrompt": """You are an expert DevOps engineer specializing in: - Infrastructure as Code (Terraform, CloudFormation) - CI/CD pipelines (GitHub Actions, GitLab CI) - Container orchestration (Kubernetes, Docker) When solving problems: 1. Always explain your reasoning 2. Provide production-ready solutions 3. Include error handling 4. Follow security best practices Current project: Kubernetes migration for e-commerce platform """ } ``` --- ## Cazuri de Utilizare ### 1. Knowledge Management & Note-Taking **Use Case**: Automatizare work cu knowledge bases (Obsidian, Notion) **Exemplu din Transcript:** - Integrare Claude în Obsidian vault - Editare automată a note-urilor și scripturi YouTube - Acces de pe telefon prin Telegram **Beneficii:** - Search inteligent prin notes - Organizare automată - Generare conținut structurat - Sync între multiple devices ### 2. Personal AI Assistants **Use Case**: Asistenți personali pentru task automation **Capabilities:** - 📅 Calendar management - ✈️ Travel planning - 📧 Email handling - 📝 Meeting notes - 🔍 Research și briefing **Exemplu:** ```python # Personal assistant cu acces la calendar și email options = { "systemPrompt": "You are my personal assistant. Help with scheduling, emails, and research.", "mcpServers": { "google-calendar": {...}, "gmail": {...} } } ``` ### 3. Custom Coding Assistants **Use Case**: AI coding assistants customizați pentru proiectele tale **Diferențe față de Claude Code standard:** - ✅ Custom system prompts pentru tech stack-ul tău - ✅ Pre-configured MCP servers pentru API-urile tale - ✅ Custom permissions și safety rules - ✅ Integration în CI/CD pipeline - ✅ Monitoring și logging custom **Exemplu:** ```python # Coding assistant pentru Django projects options = { "systemPrompt": """Expert Django developer. Tech stack: Django 5.0, PostgreSQL, Redis, Celery Always follow: Django best practices, write tests, type hints""", "cwd": "/path/to/django/project", "allowedTools": ["read", "write", "edit", "bash", "grep"], "mcpServers": { "postgres": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-postgres"], "env": {"DATABASE_URL": "postgresql://..."} } } } ``` ### 4. Customer Support Automation **Use Case**: Agenți pentru customer support **Features:** - Handle ambiguous user requests - Access customer data (CRM integration) - Multi-turn conversations - Escalation la human când e necesar - Multi-language support **Exemplu Workflow:** ``` Customer Question → Agent retrieves order history (MCP: Database) → Agent checks shipping status (MCP: Shipping API) → Agent provides personalized answer → If complex: Escalate to human + provide context ``` ### 5. Finance & Investment Agents **Use Case**: Analiza financiară și investment research **Capabilities:** - Portfolio analysis - Market data retrieval - Investment calculations - Risk assessment - Report generation **Exemplu:** ```python options = { "systemPrompt": "Financial analyst. Analyze portfolios and provide investment insights.", "mcpServers": { "alpha-vantage": {...}, # Stock data "fred": {...} # Economic data }, "allowedTools": ["read", "write", "python"] # Pentru calculations } ``` ### 6. SRE & DevOps Automation **Use Case**: Site Reliability Engineering tasks **Applications:** - Incident diagnosis - Log analysis - Infrastructure changes - Deployment automation - Health check monitoring **Exemplu:** ```python # SRE agent pentru production troubleshooting options = { "systemPrompt": """SRE agent. Diagnose and fix production issues. Access: Kubernetes cluster, logs, metrics dashboards Never: Make destructive changes without confirmation""", "mcpServers": { "kubernetes": {...}, "datadog": {...}, "pagerduty": {...} } } ``` ### 7. Research & Content Creation **Use Case**: Deep research și video/content creation **Din Transcript:** - Anthropic folosește Claude Code pentru video creation - Research automation - Content organization **Workflow:** ``` Research Topic → Web search + article fetching → Summary generation → Organize findings în structure → Generate script/outline → Export în format final (MD, PDF, etc.) ``` ### 8. Telegram/Slack Bots **Use Case**: Conversational interfaces în messaging apps **Din Transcript:** - Telegram bot cu Claude Code integration - Remote code execution de pe telefon - Real-time file editing **Features:** - Multi-user support - Persistent sessions - Command system - File upload/download - Monitoring dashboard --- ## Exemple de Cod ### Exemplu 1: Simple Query (Minimal) ```python from claude_agent_sdk import query # Definire options options = { "systemPrompt": "You are a helpful coding assistant." } # Mesaje messages = [ {"role": "user", "content": "What is Python list comprehension?"} ] # Query agent for message in query(messages=messages, options=options): # Fiecare message este un block if hasattr(message, 'content'): print(message.content) ``` **Output:** ``` [System Prompt Block] [Response Block]: Python list comprehension is a concise way to create lists... [Final Result Block]: Task completed ``` ### Exemplu 2: Custom CLI Agent ```python from claude_agent_sdk import AgentClient import os # Agent options options = { "systemPrompt": "You are an expert Python developer.", "cwd": os.getcwd(), "allowedTools": ["read", "write", "edit", "bash", "glob"], } # Create client (reusable pentru multiple queries) client = AgentClient(options) # Conversation history conversation = [] print("Custom Claude CLI - Type 'exit' to quit\n") while True: # User input user_input = input("You: ").strip() if user_input.lower() in ['exit', 'quit']: break # Add user message conversation.append({"role": "user", "content": user_input}) # Query agent assistant_response = "" for message in client.query(conversation): # Handle different message types if message.type == "text": print(f"Assistant: {message.content}") assistant_response += message.content elif message.type == "tool_use": print(f"[Using tool: {message.tool_name}]") elif message.type == "final_result": print("[Done]\n") # Add assistant response to conversation if assistant_response: conversation.append({"role": "assistant", "content": assistant_response}) ``` **Usage:** ```bash $ python custom_cli.py Custom Claude CLI - Type 'exit' to quit You: List Python files in current directory [Using tool: bash] Assistant: You have 3 Python files: cli.py, agent.py, utils.py [Done] You: Read agent.py [Using tool: read] Assistant: Here's the content of agent.py... [Done] ``` ### Exemplu 3: Obsidian Integration **Use Case**: Claude Code integration în Obsidian pentru knowledge management ```python from fastapi import FastAPI, Request from claude_agent_sdk import AgentClient import json app = FastAPI() # Obsidian vault path VAULT_PATH = "/home/user/ObsidianVault" # Agent configuration agent_options = { "systemPrompt": """You are a knowledge management assistant for Obsidian. Help organize notes, create summaries, and maintain the knowledge base. Always preserve markdown formatting and internal links.""", "cwd": VAULT_PATH, "allowedTools": ["read", "write", "edit", "glob", "grep"], # Sequential thinking MCP pentru better reasoning "mcpServers": { "sequential-thinking": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"] } } } # Create reusable client agent = AgentClient(agent_options) # OpenAI-compatible endpoint (pentru Obsidian Copilot plugin) @app.post("/v1/chat/completions") async def chat_completions(request: Request): body = await request.json() # Extract messages from OpenAI format messages = body.get("messages", []) # Convert to Claude format claude_messages = [ {"role": msg["role"], "content": msg["content"]} for msg in messages ] # Query agent response_text = "" for message in agent.query(claude_messages): if message.type == "text": response_text += message.content # Return în OpenAI format (pentru compatibility cu Copilot) return { "choices": [{ "message": { "role": "assistant", "content": response_text } }] } if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8080) ``` **Setup Obsidian:** 1. Instalează "Copilot" community plugin 2. Settings → Copilot → Custom API 3. Base URL: `http://localhost:8080/v1` 4. Model: `claude` (orice string) **Usage în Obsidian:** ``` User: My AI automations list is too long. Make it shorter. Agent: [Using Glob tool to find file] [Reading AI automations note] [Editing file - condensing bullet points] Done! I've shortened your list from 15 to 8 key items. ``` ### Exemplu 4: Telegram Bot with Remote Coding **Use Case**: Control Claude Code remote prin Telegram (din telefon!) ```python import os from telegram import Update from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters, ContextTypes from claude_agent_sdk import AgentClient # Telegram bot token BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN") # Global agent client (updated când user schimbă directory) current_cwd = os.getcwd() agent_client = None def create_agent(cwd: str, system_prompt: str = None): """Create or update agent cu noul working directory""" global agent_client options = { "systemPrompt": system_prompt or "You are a helpful coding assistant.", "cwd": cwd, "allowedTools": ["read", "write", "edit", "bash", "glob", "grep"], # MCP servers "mcpServers": { "sequential-thinking": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"] } } } agent_client = AgentClient(options) return agent_client # Initialize agent create_agent(current_cwd) # Command: /setdir async def set_directory(update: Update, context: ContextTypes.DEFAULT_TYPE): """Change working directory pentru agent""" global current_cwd if not context.args: await update.message.reply_text(f"Current directory: {current_cwd}") return new_dir = " ".join(context.args) if os.path.isdir(new_dir): current_cwd = new_dir create_agent(current_cwd) await update.message.reply_text(f"✅ Working directory set to: {new_dir}") else: await update.message.reply_text(f"❌ Directory not found: {new_dir}") # Command: /status async def status(update: Update, context: ContextTypes.DEFAULT_TYPE): """Show agent status""" await update.message.reply_text(f""" 📊 Agent Status: • Working Directory: {current_cwd} • Tools: read, write, edit, bash, glob, grep • MCP Servers: sequential-thinking """) # Handle normal messages (queries to Claude) async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE): """Handle user messages - send to Claude Agent""" user_message = update.message.text # Send "typing" indicator await update.message.chat.send_action("typing") # Query agent messages = [{"role": "user", "content": user_message}] response_blocks = [] tool_uses = [] for message in agent_client.query(messages): if message.type == "text": response_blocks.append(message.content) elif message.type == "tool_use": tool_uses.append(f"🔧 {message.tool_name}") # Combine response full_response = "\n\n".join(response_blocks) if tool_uses: tools_used = "\n".join(tool_uses) full_response = f"{tools_used}\n\n{full_response}" # Send back to user await update.message.reply_text(full_response) # Main def main(): app = ApplicationBuilder().token(BOT_TOKEN).build() # Handlers app.add_handler(CommandHandler("setdir", set_directory)) app.add_handler(CommandHandler("status", status)) app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message)) print("🤖 Telegram bot started!") app.run_polling() if __name__ == "__main__": main() ``` **Usage (din Telegram pe telefon):** ``` User: /status Bot: 📊 Agent Status: • Working Directory: /home/user/projects • Tools: read, write, edit, bash, glob, grep • MCP Servers: sequential-thinking User: /setdir /home/user/django-app Bot: ✅ Working directory set to: /home/user/django-app User: Add a TODO comment in views.py to refactor the login function Bot: 🔧 glob 🔧 read 🔧 edit Done! I've added a TODO comment in views.py at line 45 above the login function. User: Use sequential thinking to give me 5 ideas for improving the app Bot: 🔧 sequential-thinking 🔧 sequential-thinking 🔧 read Here are 5 improvement ideas: 1. Add Redis caching for database queries... 2. Implement rate limiting on API endpoints... ... ``` **Din Transcript - Self-Improving Agent:** ``` # Agent-ul își modifică propriul cod pentru a adăuga MCP server! User (via Telegram): Add the sequential-thinking MCP server to my Claude agent Agent: [Reads current bot code] [Finds MCP configuration section] [Edits bot.py to add sequential-thinking config] ✅ Done! Sequential thinking MCP server added. Restart the bot to use it. ``` ### Exemplu 5: MCP Server Setup **Different Types of MCP Servers:** ```python mcp_configs = { # 1. Standard I/O Server (most common) "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/allowed/path"], "transport": "stdio" }, # 2. SSE (Server-Sent Events) Server "custom-api": { "url": "http://localhost:3000/sse", "transport": "sse" }, # 3. With Environment Variables "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_TOKEN": os.getenv("GITHUB_TOKEN") } }, # 4. Database Access "postgres": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-postgres"], "env": { "DATABASE_URL": "postgresql://:@localhost/db" } }, # 5. Custom Local Server "my-custom-server": { "command": "python", "args": ["./servers/my_server.py"], "cwd": "/path/to/project" } } # Use în agent options options = { "systemPrompt": "...", "mcpServers": mcp_configs } ``` **Popular MCP Servers List:** | Server | Purpose | Install | |--------|---------|---------| | `sequential-thinking` | Extended reasoning | `npx -y @modelcontextprotocol/server-sequential-thinking` | | `filesystem` | File operations | `npx -y @modelcontextprotocol/server-filesystem` | | `github` | GitHub API | `npx -y @modelcontextprotocol/server-github` | | `gitlab` | GitLab API | `npx -y @modelcontextprotocol/server-gitlab` | | `postgres` | PostgreSQL | `npx -y @modelcontextprotocol/server-postgres` | | `mysql` | MySQL/MariaDB | `npx -y @modelcontextprotocol/server-mysql` | | `sqlite` | SQLite | `npx -y @modelcontextprotocol/server-sqlite` | | `slack` | Slack integration | `npx -y @modelcontextprotocol/server-slack` | | `google-drive` | Google Drive | `npx -y @modelcontextprotocol/server-google-drive` | | `brave-search` | Web search | `npx -y @modelcontextprotocol/server-brave-search` | ### Exemplu 6: Session Management & Conversation History ```python from claude_agent_sdk import AgentClient import json from datetime import datetime class ConversationManager: """Manage multi-turn conversations with persistent history""" def __init__(self, session_file="session.json"): self.session_file = session_file self.history = self.load_session() # Agent options self.options = { "systemPrompt": "You are a helpful assistant.", "cwd": "/workspace", "allowedTools": "*" } self.client = AgentClient(self.options) def load_session(self): """Load conversation history from file""" try: with open(self.session_file, 'r') as f: return json.load(f) except FileNotFoundError: return [] def save_session(self): """Save conversation history to file""" with open(self.session_file, 'w') as f: json.dump(self.history, f, indent=2) def chat(self, user_message: str) -> str: """Send message and get response""" # Add user message to history self.history.append({ "role": "user", "content": user_message, "timestamp": datetime.now().isoformat() }) # Query agent with full history response_text = "" for message in self.client.query(self.history): if message.type == "text": response_text += message.content # Add assistant response to history self.history.append({ "role": "assistant", "content": response_text, "timestamp": datetime.now().isoformat() }) # Persist to disk self.save_session() return response_text def clear(self): """Clear conversation history""" self.history = [] self.save_session() # Usage manager = ConversationManager("my_session.json") # Turn 1 print(manager.chat("What is FastAPI?")) # Turn 2 (remembers context!) print(manager.chat("Show me an example endpoint")) # Turn 3 print(manager.chat("Add error handling to that example")) # Clear when done # manager.clear() ``` ### Exemplu 7: Error Handling & Retries ```python from claude_agent_sdk import AgentClient, AgentError import time def query_with_retry(client: AgentClient, messages: list, max_retries=3): """Query agent cu retry logic pentru errors""" for attempt in range(max_retries): try: results = [] for message in client.query(messages): results.append(message) return results except AgentError as e: if "rate_limit" in str(e).lower(): # Rate limit - wait and retry wait_time = 2 ** attempt # Exponential backoff print(f"Rate limited. Waiting {wait_time}s before retry...") time.sleep(wait_time) elif "context_length" in str(e).lower(): # Context too long - truncate history print("Context too long. Truncating history...") messages = messages[-10:] # Keep last 10 messages else: # Other error - re-raise raise except Exception as e: print(f"Unexpected error: {e}") if attempt == max_retries - 1: raise time.sleep(1) raise Exception(f"Failed after {max_retries} retries") # Usage client = AgentClient({"systemPrompt": "..."}) messages = [{"role": "user", "content": "Help me debug this code"}] try: results = query_with_retry(client, messages) for msg in results: print(msg) except Exception as e: print(f"Failed: {e}") ``` --- ## Integrări Posibile ### 1. Development Tools | Tool | Integration Type | Use Case | |------|-----------------|----------| | **VS Code** | Extension/API | Custom coding assistant în IDE | | **JetBrains IDEs** | Plugin | IntelliJ, PyCharm, WebStorm integration | | **Vim/Neovim** | Plugin/RPC | Terminal-based coding assistant | | **GitHub** | Actions/Webhooks | CI/CD automation, PR reviews | | **GitLab** | CI/CD | Pipeline automation | | **Jira** | API | Ticket analysis, task automation | ### 2. Communication Platforms | Platform | Integration | Use Case | |----------|------------|----------| | **Telegram** | Bot API | Remote coding, notifications | | **Slack** | Bot/Slash Commands | Team assistant, code reviews | | **Discord** | Bot | Community support, automation | | **Email** | IMAP/SMTP | Email automation, summarization | | **WhatsApp** | Business API | Customer support | ### 3. Productivity Tools | Tool | Integration | Use Case | |------|------------|----------| | **Obsidian** | Plugin/API | Knowledge management | | **Notion** | API | Database management, content creation | | **Todoist** | API | Task automation | | **Google Calendar** | API | Scheduling, reminders | | **Trello** | API | Project management | ### 4. Development Platforms | Platform | Integration | Use Case | |----------|------------|----------| | **Vercel** | Deploy hooks | Auto-deploy & testing | | **Netlify** | Build plugins | CI/CD automation | | **AWS** | Lambda | Serverless agent execution | | **Google Cloud** | Cloud Functions | Scalable agents | | **Docker** | Container | Isolated agent environments | ### 5. Databases & Storage | Service | MCP Server | Use Case | |---------|-----------|----------| | **PostgreSQL** | `server-postgres` | Database queries, migrations | | **MySQL** | `server-mysql` | Database operations | | **MongoDB** | Custom | NoSQL operations | | **Redis** | Custom | Cache management | | **S3** | Custom | File storage/retrieval | ### 6. Monitoring & Analytics | Tool | Integration | Use Case | |------|------------|----------| | **Sentry** | SDK Integration | Error tracking, performance | | **Datadog** | API | Metrics, logs, traces | | **Grafana** | API | Dashboard queries | | **New Relic** | API | Performance monitoring | | **Prometheus** | API | Metrics querying | --- ## Monitoring și Debugging ### Sentry Integration (din Transcript) **De ce Sentry pentru AI Agents?** - ✅ Vezi toate deciziile pe care le-a luat agentul - ✅ Token usage tracking - ✅ Performance metrics (timp de execuție) - ✅ Tool call tracing - ✅ Error tracking **Setup:** ```python import sentry_sdk from sentry_sdk.integrations.anthropic import AnthropicIntegration # Initialize Sentry cu AI monitoring sentry_sdk.init( dsn="your-sentry-dsn", integrations=[ AnthropicIntegration(), # Special pentru Claude/Anthropic ], traces_sample_rate=1.0, # 100% trace sampling ) # Use Claude Agent SDK normally from claude_agent_sdk import AgentClient client = AgentClient({...}) # Toate queries sunt automat tracked în Sentry! for message in client.query(messages): print(message) ``` **Ce Vezi în Sentry Dashboard:** ``` 📊 Trace: "User request - Fix authentication bug" ├─ Span: Agent Query (2.3s) │ ├─ Input tokens: 1,234 │ ├─ Output tokens: 567 │ └─ Model: claude-sonnet-4.5 │ ├─ Tool: glob (0.1s) │ └─ Pattern: "**/*auth*.py" │ ├─ Tool: read (0.05s) │ └─ File: auth/views.py │ ├─ Tool: edit (0.2s) │ └─ Changes: +5 lines, -3 lines │ └─ Total: 2.65s, 1,801 tokens ``` **Exemplu cu Sentry (Telegram Bot):** ```python import sentry_sdk from sentry_sdk.integrations.anthropic import AnthropicIntegration from claude_agent_sdk import AgentClient from telegram.ext import ApplicationBuilder, MessageHandler, filters # Sentry setup sentry_sdk.init( dsn=os.getenv("SENTRY_DSN"), integrations=[AnthropicIntegration()], traces_sample_rate=1.0, environment="production", ) async def handle_message(update, context): user_message = update.message.text # Sentry automatically tracks this! with sentry_sdk.start_transaction(op="agent_query", name=user_message[:50]): agent = AgentClient(options) for message in agent.query([{"role": "user", "content": user_message}]): if message.type == "text": await update.message.reply_text(message.content) # Bot setup app = ApplicationBuilder().token(os.getenv("BOT_TOKEN")).build() app.add_handler(MessageHandler(filters.TEXT, handle_message)) app.run_polling() ``` **Beneficii în Production:** 1. **Debugging**: Vezi exact ce a făcut agentul pentru fiecare request 2. **Validation**: Verifică dacă agentul face deciziile corecte 3. **Cost Tracking**: Monitorizează token usage 4. **Performance**: Identifică bottlenecks 5. **Errors**: Catch și debug issues rapid ### Custom Logging ```python import logging from claude_agent_sdk import AgentClient # Setup logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('agent.log'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) def query_with_logging(client, messages): """Query cu detailed logging""" logger.info(f"Starting query with {len(messages)} messages") tool_calls = [] response_text = "" for message in client.query(messages): if message.type == "text": logger.info(f"Text response: {message.content[:100]}...") response_text += message.content elif message.type == "tool_use": logger.info(f"Tool use: {message.tool_name} with args: {message.args}") tool_calls.append(message.tool_name) elif message.type == "error": logger.error(f"Agent error: {message.error}") logger.info(f"Query completed. Tools used: {tool_calls}") return response_text ``` --- ## Best Practices ### 1. Security & Permissions **❌ BAD - Prea permisiv:** ```python options = { "allowedTools": "*", # TOT! "cwd": "/" # ROOT ACCESS! } ``` **✅ GOOD - Granular permissions:** ```python options = { "allowedTools": ["read", "glob"], # Doar citire "cwd": "/safe/project/directory", # Specific directory "bash": { "allowedCommands": ["git status", "npm test"] # Specific commands } } ``` ### 2. System Prompts **❌ BAD - Vague:** ```python "systemPrompt": "You are helpful." ``` **✅ GOOD - Specific și contextual:** ```python "systemPrompt": """You are an expert DevOps engineer for our e-commerce platform. Tech Stack: - Backend: Django 5.0, PostgreSQL, Redis - Frontend: Next.js 14, TypeScript - Infrastructure: Kubernetes on AWS EKS - CI/CD: GitHub Actions Guidelines: 1. Always write production-ready code with error handling 2. Include unit tests for new features 3. Follow our coding standards (Black, ESLint) 4. Document infrastructure changes 5. Never commit secrets or credentials Current task: Kubernetes migration from EC2 instances """ ``` ### 3. Error Handling **✅ Always wrap queries în try-catch:** ```python try: for message in agent.query(messages): process(message) except AgentError as e: logger.error(f"Agent error: {e}") # Fallback logic except Exception as e: logger.error(f"Unexpected error: {e}") sentry_sdk.capture_exception(e) ``` ### 4. Context Management **❌ BAD - Unlimited history:** ```python # History devine prea mare! conversation_history.append(every_single_message) ``` **✅ GOOD - Truncate sau summarize:** ```python # Păstrează doar ultimele N mesaje MAX_HISTORY = 20 if len(conversation_history) > MAX_HISTORY: # Păstrează system prompt + ultimele mesaje conversation_history = [ conversation_history[0], # System prompt *conversation_history[-MAX_HISTORY:] ] ``` ### 5. MCP Server Management **✅ Use environment variables pentru secrets:** ```python "mcpServers": { "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_TOKEN": os.getenv("GITHUB_TOKEN") # ✅ Din env # ❌ NU: evita hardcodarea token-ului direct în configurație } } } ``` ### 6. Testing **✅ Test agent behavior:** ```python import pytest from claude_agent_sdk import AgentClient def test_agent_file_reading(): """Test că agentul poate citi fișiere""" client = AgentClient({ "cwd": "/test/directory", "allowedTools": ["read"] }) messages = [{"role": "user", "content": "Read test.txt"}] used_tools = [] for message in client.query(messages): if message.type == "tool_use": used_tools.append(message.tool_name) assert "read" in used_tools def test_agent_permissions(): """Test că permissions sunt respectate""" client = AgentClient({ "allowedTools": ["read"] # Doar read }) messages = [{"role": "user", "content": "Delete file.txt"}] with pytest.raises(PermissionError): list(client.query(messages)) ``` ### 7. Performance Optimization **✅ Use prompt caching:** ```python # Claude Agent SDK face asta automat, dar poți optimiza prin: # - Păstrează system prompts consistente # - Reuse același client pentru multiple queries # - Evită schimbări frecvente de configuration client = AgentClient(options) # ✅ Create once for user_request in requests: # ✅ Reuse client - automatic caching! client.query([{"role": "user", "content": user_request}]) ``` ### 8. Monitoring în Production **✅ Always monitor în production:** ```python # 1. Sentry pentru traces sentry_sdk.init(dsn="...", integrations=[AnthropicIntegration()]) # 2. Custom metrics from prometheus_client import Counter, Histogram agent_queries = Counter('agent_queries_total', 'Total agent queries') agent_duration = Histogram('agent_duration_seconds', 'Agent query duration') @agent_duration.time() def query_agent(messages): agent_queries.inc() return list(client.query(messages)) # 3. Logging logger.info(f"Agent query: {user_message}") ``` ### 9. Cost Management **✅ Track și optimize costs:** ```python # Monitor token usage total_tokens = 0 for message in client.query(messages): if hasattr(message, 'usage'): total_tokens += message.usage.get('total_tokens', 0) logger.info(f"Total tokens used: {total_tokens}") # Set limits if total_tokens > MAX_TOKENS_PER_SESSION: raise Exception("Token limit exceeded") ``` ### 10. Deployment **✅ Containerize pentru consistency:** ```dockerfile # Dockerfile pentru agent deployment FROM python:3.11-slim # Install Node.js (pentru MCP servers) RUN apt-get update && apt-get install -y nodejs npm WORKDIR /app # Install dependencies COPY requirements.txt . RUN pip install -r requirements.txt # Copy agent code COPY . . # Environment variables (definește-le în runtime sau pipeline) # - ANTHROPIC_API_KEY # - SENTRY_DSN CMD ["python", "agent.py"] ``` --- ## Resurse și Referințe ### Documentație Oficială - **Claude Agent SDK Docs**: https://docs.claude.com/en/api/agent-sdk/overview - **GitHub Python SDK**: https://github.com/anthropics/claude-agent-sdk-python - **GitHub TypeScript SDK**: https://github.com/anthropics/claude-agent-sdk-typescript - **Migration Guide** (Code SDK → Agent SDK): https://docs.claude.com/en/api/agent-sdk/migration ### Anthropic Blog Posts - **Building Agents with Claude Agent SDK**: https://www.anthropic.com/engineering/building-agents-with-the-claude-agent-sdk - **Enabling Claude Code to Work More Autonomously**: https://www.anthropic.com/news/enabling-claude-code-to-work-more-autonomously - **Agent Skills**: https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills ### Tutorials și Guides - **DataCamp Tutorial**: https://www.datacamp.com/tutorial/how-to-use-claude-agent-sdk - **Practical Guide to Custom Coding Agents**: https://www.eesel.ai/blog/custom-coding-agents-claude-code-sdk - **Python SDK Guide 2025**: https://www.eesel.ai/blog/python-claude-code-sdk ### MCP (Model Context Protocol) - **MCP Documentation**: https://modelcontextprotocol.io - **MCP Servers List**: https://github.com/modelcontextprotocol/servers - **Create Custom MCP Server**: https://modelcontextprotocol.io/docs/creating-servers ### Monitoring & Observability - **Sentry AI Monitoring**: https://docs.sentry.io/platforms/python/integrations/anthropic/ - **LangSmith** (alternative): https://docs.smith.langchain.com/ - **Weights & Biases** (alternative): https://wandb.ai/ ### Example Projects & Repositories - **Claude Code Examples** (din transcript): https://github.com/[repository-link-from-video] - **Awesome Claude Agents**: https://github.com/topics/claude-agent-sdk - **Community Examples**: https://github.com/anthropics/anthropic-cookbook ### Community - **Discord**: Anthropic Discord server - **Reddit**: r/ClaudeAI - **Twitter**: @AnthropicAI --- ## Concluzie **Claude Agent SDK** nu este doar pentru coding - este o platformă completă pentru a construi **orice tip de agent AI** care beneficiază de: ✅ **File operations puternice** (read, write, edit, search) ✅ **Code execution** (bash, Python, etc.) ✅ **Extensibility** (MCP servers pentru orice API/service) ✅ **Production-ready features** (permissions, error handling, context management) ✅ **Flexibility** (integrează în orice app/workflow) ### Key Takeaways 1. **Beyond Coding**: Use pentru knowledge management, automation, research, support 2. **Programmable**: Controlează totul - system prompts, permissions, tools, MCP servers 3. **Integration-Friendly**: Telegram, Obsidian, Slack, Email, CI/CD, etc. 4. **Production-Ready**: Built-in monitoring (Sentry), error handling, caching 5. **Future-Proof**: Arhitectura care va fi copiată de alte AI coding tools ### Următorii Pași 1. **Experimentează** cu quick start examples 2. **Alege un use case** (e.g., Telegram bot, Obsidian integration) 3. **Configurează MCP servers** pentru API-urile tale 4. **Setup monitoring** (Sentry) 5. **Deploy în production** (Docker, AWS Lambda, etc.) **Happy Building!** 🚀 --- *Documentație generată pe baza transcriptului "Claude Code's Real Purpose" și documentației oficiale Anthropic (Ianuarie 2025)*