spinny:~/writing $ less building-ai-agents-claude-agent-sdk.md
12Claude Agent SDK আপনাকে সেই একই এজেন্ট লুপে প্রোগ্রামেটিক অ্যাক্সেস দেয় যা Claude Code-কে শক্তি দেয়। আপনার এজেন্টরা ফাইল পড়তে পারে, শেল কমান্ড এক্সিকিউট করতে পারে, ওয়েব সার্চ করতে পারে, কোড এডিট করতে পারে, MCP সার্ভারের মাধ্যমে এক্সটার্নাল API কল করতে পারে এবং সাব-এজেন্টদের অর্কেস্ট্রেট করতে পারে - সব কিছু TypeScript বা Python-এর কয়েকটি লাইন থেকে।34স্ট্যান্ডার্ড Anthropic Client SDK-এর বিপরীতে যেখানে আপনি নিজের টুল লুপ তৈরি করেন, Agent SDK টুল এক্সিকিউশন, কনটেক্সট ম্যানেজমেন্ট, রিট্রাই এবং অর্কেস্ট্রেশন অভ্যন্তরীণভাবে পরিচালনা করে। আপনি বলুন কী চান, টুলস দিন, এবং এজেন্ট বাকিটা বুঝে নেয়।56## আর্কিটেকচার78SDK একটি সহজ লুপ অনুসরণ করে: **কনটেক্সট সংগ্রহ করো, অ্যাকশন নাও, যাচাই করো, পুনরাবৃত্তি করো**।910```mermaid11graph TD12 Input[User Prompt] --> Loop[Agent Loop]13 Loop --> Reason[Claude Reasons]14 Reason --> Tool[Call Tool]15 Tool --> Result[Tool Result]16 Result --> Loop17 Reason --> Done[Final Response]1819 subgraph "Built-in Tools"20 T1[Read / Write / Edit]21 T2[Bash / Terminal]22 T3[Glob / Grep]23 T4[WebSearch / WebFetch]24 end2526 subgraph "Custom Tools via MCP"27 M1[Your API]28 M2[Database]29 M3[Slack / GitHub / etc.]30 end3132 Tool --> T133 Tool --> M134```3536মূল এন্ট্রি পয়েন্ট হলো `query()`, যা একটি async iterator রিটার্ন করে যা এজেন্ট কাজ করার সময় মেসেজ স্ট্রিম করে। প্রতিটি মেসেজ আপনাকে বলে এজেন্ট কী করছে: রিজনিং, টুল কল করা, রেজাল্ট পাওয়া, বা চূড়ান্ত আউটপুট দেওয়া।3738## শুরু করুন3940### ইনস্টলেশন4142```bash43# TypeScript44npm install @anthropic-ai/claude-agent-sdk4546# Python47pip install claude-agent-sdk48```4950আপনার এনভায়রনমেন্টে `ANTHROPIC_API_KEY` হিসাবে একটি Anthropic API key সেট করতে হবে।5152### আপনার প্রথম এজেন্ট5354```typescript55import { query } from "@anthropic-ai/claude-agent-sdk";5657const conversation = query({58 prompt: "Find all TODO comments in the codebase and create a summary",59 options: {60 allowedTools: ["Read", "Glob", "Grep"],61 },62});6364for await (const message of conversation) {65 if (message.type === "assistant") {66 process.stdout.write(message.content);67 }68 if (message.type === "result" && message.subtype === "success") {69 console.log("\nDone:", message.result);70 }71}72```7374ব্যস এটুকুই। এজেন্ট Glob ব্যবহার করে ফাইল খুঁজবে, Grep দিয়ে TODO প্যাটার্ন সার্চ করবে, Read দিয়ে ম্যাচ পরীক্ষা করবে এবং একটি স্ট্রাকচার্ড সারাংশ রিটার্ন করবে। আপনাকে অর্কেস্ট্রেশন লজিক লিখতে হবে না - SDK এটি সামলায়।7576### Python সমতুল্য7778```python79from claude_agent_sdk import query8081async for message in query(82 prompt="Find all TODO comments in the codebase and create a summary",83 options={"allowed_tools": ["Read", "Glob", "Grep"]},84):85 if message.type == "assistant":86 print(message.content, end="")87 if message.type == "result" and message.subtype == "success":88 print(f"\nDone: {message.result}")89```9091## বিল্ট-ইন টুলস9293SDK-এ সেই একই টুলস আসে যা Claude Code-এ উপলব্ধ:9495| টুল | বিবরণ |96|------|-------------|97| **Read** | ফাইল কন্টেন্ট পড়ুন |98| **Write** | নতুন ফাইল তৈরি করুন |99| **Edit** | বিদ্যমান ফাইলে টার্গেটেড এডিট করুন |100| **Bash** | শেল কমান্ড এক্সিকিউট করুন |101| **Glob** | প্যাটার্ন দিয়ে ফাইল খুঁজুন |102| **Grep** | regex দিয়ে ফাইল কন্টেন্ট সার্চ করুন |103| **WebSearch** | ওয়েব সার্চ করুন |104| **WebFetch** | একটি URL ফেচ করুন এবং এর কন্টেন্ট রিটার্ন করুন |105| **AskUserQuestion** | ইউজারের কাছে ইনপুট চান |106107আপনি `allowedTools`-এর মাধ্যমে নিয়ন্ত্রণ করেন কোন টুলস এজেন্ট ব্যবহার করতে পারে। যদি কোনো টুল তালিকায় না থাকে, এজেন্ট সেটি কল করতে পারে না।108109## পারমিশন মোড110111যেহেতু এজেন্টরা প্রকৃত সিস্টেমে প্রকৃত কমান্ড এক্সিকিউট করে, পারমিশন গুরুত্বপূর্ণ।112113| মোড | আচরণ | ব্যবহারের ক্ষেত্র |114|------|----------|----------|115| `default` | কাস্টম `canUseTool` কলব্যাক প্রতিটি কলে সিদ্ধান্ত নেয় | সূক্ষ্ম নিয়ন্ত্রণ |116| `acceptEdits` | ফাইল অপারেশন অটো-অনুমোদন, Bash-এর জন্য প্রম্পট | ডেভেলপমেন্ট ওয়ার্কফ্লো |117| `dontAsk` | allowedTools-এ নেই তো প্রত্যাখ্যান | সীমাবদ্ধ এজেন্ট |118| `bypassPermissions` | সব কিছু স্বয়ংক্রিয়ভাবে অনুমোদন | বিশ্বস্ত স্যান্ডবক্সড পরিবেশ |119| `auto` | মডেল ক্লাসিফায়ার নিরাপত্তা নির্ধারণ করে | ভারসাম্যপূর্ণ অটোমেশন |120121```typescript122const conversation = query({123 prompt: "Refactor the auth module to use JWT",124 options: {125 allowedTools: ["Read", "Edit", "Glob", "Grep", "Bash"],126 permissionMode: "acceptEdits",127 },128});129```130131প্রোডাকশন ব্যবহারের জন্য, সবসময় এজেন্টদের স্যান্ডবক্সড এনভায়রনমেন্টে (কন্টেইনার, VMs) চালান এবং সবচেয়ে সীমাবদ্ধ পারমিশন মোড ব্যবহার করুন যা এজেন্টকে তার কাজ করতে দেয়।132133## MCP দিয়ে কাস্টম টুলস তৈরি করা134135SDK-এর প্রকৃত শক্তি আসে এজেন্টদের আপনার নিজের টুলস দিয়ে সম্প্রসারিত করা থেকে। কাস্টম টুলস ইন-প্রোসেস MCP সার্ভার হিসাবে সংজ্ঞায়িত হয় - কোনো সাবপ্রোসেস ম্যানেজমেন্ট নেই, কোনো নেটওয়ার্ক ওভারহেড নেই।136137### উদাহরণ: ওয়েদার টুল138139```typescript140import { tool, createSdkMcpServer, query } from "@anthropic-ai/claude-agent-sdk";141import { z } from "zod";142143const getTemperature = tool(144 "get_temperature",145 "Get the current temperature at a location",146 {147 latitude: z.number().describe("Latitude"),148 longitude: z.number().describe("Longitude"),149 },150 async ({ latitude, longitude }) => {151 const res = await fetch(152 `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m&temperature_unit=celsius`153 );154 const data = await res.json();155 return {156 content: [157 {158 type: "text",159 text: `Current temperature: ${data.current.temperature_2m}C`,160 },161 ],162 };163 }164);165166const weatherServer = createSdkMcpServer({167 name: "weather",168 version: "1.0.0",169 tools: [getTemperature],170});171172for await (const message of query({173 prompt: "What's the weather like in Rome?",174 options: {175 mcpServers: { weather: weatherServer },176 allowedTools: ["mcp__weather__get_temperature"],177 },178})) {179 if (message.type === "result" && message.subtype === "success") {180 console.log(message.result);181 }182}183```184185কাস্টম টুলস `mcp__{server_name}__{tool_name}` নামকরণ রীতি অনুসরণ করে। আপনি `allowedTools`-এ ওয়াইল্ডকার্ড ব্যবহার করতে পারেন: `"mcp__weather__*"` ওয়েদার সার্ভারের সব টুলস অনুমোদন করে।186187### উদাহরণ: ডেটাবেস কোয়েরি টুল188189```typescript190const queryDb = tool(191 "query_database",192 "Run a read-only SQL query against the application database",193 {194 sql: z.string().describe("SQL SELECT query to execute"),195 },196 async ({ sql }) => {197 // Validate: only allow SELECT queries198 if (!sql.trim().toUpperCase().startsWith("SELECT")) {199 return {200 content: [{ type: "text", text: "Error: Only SELECT queries are allowed." }],201 };202 }203204 const result = await pool.query(sql);205 return {206 content: [207 {208 type: "text",209 text: JSON.stringify(result.rows, null, 2),210 },211 ],212 };213 }214);215```216217## এক্সটার্নাল MCP সার্ভারের সাথে সংযোগ218219ইন-প্রোসেস টুলসের বাইরে, আপনি যেকোনো বিদ্যমান MCP সার্ভারের সাথে সংযোগ করতে পারেন - সেই একই সার্ভার যা Claude Desktop, Cursor এবং অন্যান্য MCP ক্লায়েন্টের সাথে কাজ করে।220221```typescript222for await (const message of query({223 prompt: "Check the latest issues in the frontend repo and summarize them",224 options: {225 mcpServers: {226 github: {227 command: "npx",228 args: ["-y", "@modelcontextprotocol/server-github"],229 env: { GITHUB_PERSONAL_ACCESS_TOKEN: process.env.GITHUB_TOKEN },230 },231 },232 allowedTools: ["mcp__github__*"],233 },234})) {235 // ...236}237```238239আপনি একাধিক MCP সার্ভার একত্রিত করতে পারেন। এজেন্ট সব সংযুক্ত সার্ভার থেকে সব টুলস দেখে এবং প্রয়োজন অনুসারে ব্যবহার করে।240241```mermaid242graph LR243 Agent[Your Agent] --> SDK[Agent SDK]244 SDK --> InProcess[In-process MCP\nCustom Tools]245 SDK --> GitHub[GitHub MCP Server]246 SDK --> Postgres[PostgreSQL MCP Server]247 SDK --> Slack[Slack MCP Server]248```249250## মাল্টি-এজেন্ট অর্কেস্ট্রেশন251252জটিল ওয়ার্কফ্লোর জন্য, আপনি বিশেষায়িত সাব-এজেন্ট সংজ্ঞায়িত করতে পারেন যাদের কাছে প্যারেন্ট এজেন্ট কাজ অর্পণ করে। প্রতিটি সাব-এজেন্টের নিজস্ব প্রম্পট, টুলস এবং ফোকাস এরিয়া থাকে।253254```typescript255for await (const message of query({256 prompt: "Review the PR, check for security issues, and update the changelog",257 options: {258 allowedTools: ["Read", "Edit", "Bash", "Glob", "Grep", "Agent"],259 agents: [260 {261 name: "security-reviewer",262 description: "Reviews code for security vulnerabilities",263 prompt: "You are a security expert. Analyze code for OWASP Top 10 vulnerabilities.",264 allowedTools: ["Read", "Glob", "Grep"],265 },266 {267 name: "changelog-writer",268 description: "Updates the CHANGELOG.md file based on recent changes",269 prompt: "You maintain the project changelog. Follow Keep a Changelog format.",270 allowedTools: ["Read", "Edit", "Bash"],271 },272 ],273 },274})) {275 // The parent agent will:276 // 1. Read the PR diff277 // 2. Delegate security review to security-reviewer278 // 3. Delegate changelog update to changelog-writer279 // 4. Synthesize results280}281```282283ডেলিগেশন সক্রিয় করতে প্যারেন্টের `allowedTools`-এ `"Agent"` অন্তর্ভুক্ত করুন। সাব-এজেন্টরা তাদের নিজস্ব টুলস নিয়ে চলে এবং স্পষ্টভাবে অনুমতি না দিলে প্যারেন্টের টুলস অ্যাক্সেস করতে পারে না।284285```mermaid286graph TD287 Parent[Parent Agent] --> SR[Security Reviewer\nRead, Glob, Grep]288 Parent --> CW[Changelog Writer\nRead, Edit, Bash]289 SR --> Report[Security Report]290 CW --> Updated[Updated CHANGELOG]291 Report --> Parent292 Updated --> Parent293 Parent --> Final[Final Summary]294```295296## সেশন এবং ধারাবাহিকতা297298এজেন্টরা সেশন ব্যবহার করে একাধিক কোয়েরি জুড়ে কনটেক্সট বজায় রাখতে পারে। প্রথম ইন্টারঅ্যাকশন থেকে `session_id` ক্যাপচার করুন এবং পরবর্তী কোয়েরিতে `resume`-এ পাস করুন।299300```typescript301let sessionId: string | undefined;302303// First query304for await (const message of query({305 prompt: "Read the project structure and understand the architecture",306 options: { allowedTools: ["Read", "Glob", "Grep"] },307})) {308 if (message.type === "init") {309 sessionId = message.session_id;310 }311}312313// Follow-up query (same session, full context preserved)314for await (const message of query({315 prompt: "Now refactor the auth module based on what you learned",316 resume: sessionId,317 options: { allowedTools: ["Read", "Edit", "Bash"] },318})) {319 // Agent remembers the full project context from the first query320}321```322323## Claude Managed Agents324325আপনি যদি এজেন্ট ইনফ্রাস্ট্রাকচার নিজে হোস্ট করতে না চান, তাহলে **Claude Managed Agents** (এপ্রিল 2026-এ লঞ্চ) একটি সম্পূর্ণ ম্যানেজড ক্লাউড সার্ভিস প্রদান করে। Anthropic কন্টেইনার চালায়, স্কেলিং সামলায় এবং একটি স্ট্রিমিং API প্রদান করে।326327```mermaid328graph LR329 subgraph "Self-hosted (Agent SDK)"330 Code[Your Code] --> SDK2[Agent SDK]331 SDK2 --> API[Claude API]332 SDK2 --> Tools[Your Tools]333 end334335 subgraph "Managed Agents"336 App[Your App] --> MAPI[Managed Agents API]337 MAPI --> Container[Anthropic-hosted Container]338 Container --> API2[Claude API]339 Container --> Tools2[Tools in Container]340 end341```342343মূল পার্থক্য: Agent SDK-এর সাথে, আপনি নিজের ইনফ্রাস্ট্রাকচারে এজেন্ট লুপ চালান। Managed Agents-এর সাথে, Anthropic আপনার জন্য এজেন্ট হোস্ট ও চালায়। আপনি সেশন-ভিত্তিক API-এর মাধ্যমে ইন্টারঅ্যাক্ট করেন এবং Server-Sent Events-এর মাধ্যমে ইভেন্ট পান।344345**মূল্য নির্ধারণ:**346- **Agent SDK**: শুধুমাত্র স্ট্যান্ডার্ড Claude API টোকেন রেট। হোস্টিং আপনি সামলান।347- **Managed Agents**: টোকেন রেট প্লাস $0.08 প্রতি সেশন-ঘণ্টা (প্রতি মিলিসেকেন্ডে বিল)।348349## প্রোডাকশন বেস্ট প্র্যাকটিসেস350351### 1. সবসময় স্যান্ডবক্স করুন352353প্রোডাকশন মেশিনে কখনোই অনিয়ন্ত্রিত পারমিশন দিয়ে এজেন্ট চালাবেন না। কন্টেইনার (Docker, Fly.io, Modal) বা স্যান্ডবক্সড এনভায়রনমেন্ট (E2B, Vercel Sandbox) ব্যবহার করুন।354355### 2. টুল অ্যাক্সেস সীমাবদ্ধ করুন356357সর্বনিম্ন বিশেষাধিকারের নীতি অনুসরণ করুন। রিপোর্ট তৈরি করা একটি এজেন্টের `Bash` বা `Write`-এর প্রয়োজন নেই।358359```typescript360// Too permissive361allowedTools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]362363// Better: only what's needed364allowedTools: ["Read", "Glob", "Grep"]365```366367### 3. গার্ডরেলসের জন্য Hooks ব্যবহার করুন368369Hooks আপনাকে এক্সিকিউশনের আগে ও পরে টুল কলগুলো ইন্টারসেপ্ট করতে দেয়। লগিং, ভ্যালিডেশন এবং রেট লিমিটিং-এর জন্য এগুলো ব্যবহার করুন।370371```typescript372const conversation = query({373 prompt: "Analyze the codebase",374 options: {375 allowedTools: ["Read", "Glob", "Grep"],376 hooks: {377 PreToolUse: async (toolName, input) => {378 console.log(`Tool call: ${toolName}`, input);379 // Return false to block the call380 if (toolName === "Bash" && input.command.includes("rm")) {381 return false;382 }383 return true;384 },385 },386 },387});388```389390### 4. ত্রুটি সুন্দরভাবে সামলান391392এজেন্ট লুপ ত্রুটি তৈরি করতে পারে - টুল ব্যর্থতা, API রেট লিমিট, কনটেক্সট উইন্ডো ওভারফ্লো। সবসময় মেসেজ টাইপ চেক করুন।393394```typescript395for await (const message of conversation) {396 switch (message.type) {397 case "assistant":398 // Agent reasoning399 break;400 case "tool_use":401 // Agent is calling a tool402 break;403 case "result":404 if (message.subtype === "error") {405 console.error("Agent failed:", message.error);406 }407 break;408 }409}410```411412### 5. টোকেন ব্যবহার পর্যবেক্ষণ করুন413414এজেন্ট লুপ উল্লেখযোগ্য টোকেন খরচ করতে পারে, বিশেষত বড় কোডবেসের সাথে। SDK-তে স্বয়ংক্রিয় কনটেক্সট কম্প্যাকশন আছে, কিন্তু আপনার এখনও ব্যবহার পর্যবেক্ষণ করা উচিত।415416## উপসংহার417418Claude Agent SDK একটি LLM-কে প্রশ্ন-উত্তর মেশিন থেকে জুনিয়র ডেভেলপারের কাছাকাছি কিছুতে পরিণত করে। আপনার এজেন্টরা পড়তে, লিখতে, এক্সিকিউট করতে, যাচাই করতে এবং পুনরাবৃত্তি করতে পারে - সেই একই ওয়ার্কফ্লো যা একজন মানুষ অনুসরণ করে।419420ছোট থেকে শুরু করুন: কয়েকটি বিল্ট-ইন টুলস দিয়ে একটি এজেন্ট তৈরি করুন। তারপর আপনার নির্দিষ্ট ডোমেনের জন্য কাস্টম MCP টুলস যোগ করুন। আপনার ওয়ার্কফ্লোতে বিশেষায়িতকরণ প্রয়োজন হলে মাল্টি-এজেন্ট অর্কেস্ট্রেশনে স্কেল করুন।421422এজেন্ট লুপটি সেটিই যা Claude Code-কে শক্তি দেয়। যদি এটি সফটওয়্যার তৈরি করতে পারে, আপনার এজেন্টরাও পারবে।423424> **শুরুর চেকলিস্ট:**425>426> - [x] SDK ইনস্টল করুন (`npm install @anthropic-ai/claude-agent-sdk`)427> - [x] আপনার এনভায়রনমেন্টে `ANTHROPIC_API_KEY` সেট করুন428> - [x] বিল্ট-ইন টুলস (Read, Glob, Grep) দিয়ে একটি সাধারণ এজেন্ট তৈরি করুন429> - [x] ইন-প্রোসেস MCP সার্ভারের মাধ্যমে একটি কাস্টম টুল যোগ করুন430> - [x] একটি এক্সটার্নাল MCP সার্ভার (GitHub, PostgreSQL, ইত্যাদি) সংযোগ করুন431> - [x] সাব-এজেন্টদের সাথে মাল্টি-এজেন্ট অর্কেস্ট্রেশন বাস্তবায়ন করুন432> - [x] প্রোডাকশনের জন্য স্যান্ডবক্সড এনভায়রনমেন্ট সেট আপ করুন433> - [x] লগিং ও গার্ডরেলসের জন্য hooks যোগ করুন434
:Claude Agent SDK দিয়ে AI এজেন্ট তৈরি করা: একটি ব্যবহারিক গাইডlines 1-434 (END) — press q to close