Claude Agent SDK আপনাকে সেই একই এজেন্ট লুপে প্রোগ্রামেটিক অ্যাক্সেস দেয় যা Claude Code-কে শক্তি দেয়। আপনার এজেন্টরা ফাইল পড়তে পারে, শেল কমান্ড এক্সিকিউট করতে পারে, ওয়েব সার্চ করতে পারে, কোড এডিট করতে পারে, MCP সার্ভারের মাধ্যমে এক্সটার্নাল API কল করতে পারে এবং সাব-এজেন্টদের অর্কেস্ট্রেট করতে পারে - সব কিছু TypeScript বা Python-এর কয়েকটি লাইন থেকে।
স্ট্যান্ডার্ড Anthropic Client SDK-এর বিপরীতে যেখানে আপনি নিজের টুল লুপ তৈরি করেন, Agent SDK টুল এক্সিকিউশন, কনটেক্সট ম্যানেজমেন্ট, রিট্রাই এবং অর্কেস্ট্রেশন অভ্যন্তরীণভাবে পরিচালনা করে। আপনি বলুন কী চান, টুলস দিন, এবং এজেন্ট বাকিটা বুঝে নেয়।
আর্কিটেকচার
SDK একটি সহজ লুপ অনুসরণ করে: কনটেক্সট সংগ্রহ করো, অ্যাকশন নাও, যাচাই করো, পুনরাবৃত্তি করো।
মূল এন্ট্রি পয়েন্ট হলো query(), যা একটি async iterator রিটার্ন করে যা এজেন্ট কাজ করার সময় মেসেজ স্ট্রিম করে। প্রতিটি মেসেজ আপনাকে বলে এজেন্ট কী করছে: রিজনিং, টুল কল করা, রেজাল্ট পাওয়া, বা চূড়ান্ত আউটপুট দেওয়া।
শুরু করুন
ইনস্টলেশন
# TypeScript npm install @anthropic-ai/claude-agent-sdk # Python pip install claude-agent-sdk
আপনার এনভায়রনমেন্টে ANTHROPIC_API_KEY হিসাবে একটি Anthropic API key সেট করতে হবে।
আপনার প্রথম এজেন্ট
import { query } from "@anthropic-ai/claude-agent-sdk"; const conversation = query({ prompt: "Find all TODO comments in the codebase and create a summary", options: { allowedTools: ["Read", "Glob", "Grep"], }, }); for await (const message of conversation) { if (message.type === "assistant") { process.stdout.write(message.content); } if (message.type === "result" && message.subtype === "success") { console.log("\nDone:", message.result); } }
ব্যস এটুকুই। এজেন্ট Glob ব্যবহার করে ফাইল খুঁজবে, Grep দিয়ে TODO প্যাটার্ন সার্চ করবে, Read দিয়ে ম্যাচ পরীক্ষা করবে এবং একটি স্ট্রাকচার্ড সারাংশ রিটার্ন করবে। আপনাকে অর্কেস্ট্রেশন লজিক লিখতে হবে না - SDK এটি সামলায়।
Python সমতুল্য
from claude_agent_sdk import query async for message in query( prompt="Find all TODO comments in the codebase and create a summary", options={"allowed_tools": ["Read", "Glob", "Grep"]}, ): if message.type == "assistant": print(message.content, end="") if message.type == "result" and message.subtype == "success": print(f"\nDone: {message.result}")
বিল্ট-ইন টুলস
SDK-এ সেই একই টুলস আসে যা Claude Code-এ উপলব্ধ:
| টুল | বিবরণ |
|---|---|
| Read | ফাইল কন্টেন্ট পড়ুন |
| Write | নতুন ফাইল তৈরি করুন |
| Edit | বিদ্যমান ফাইলে টার্গেটেড এডিট করুন |
| Bash | শেল কমান্ড এক্সিকিউট করুন |
| Glob | প্যাটার্ন দিয়ে ফাইল খুঁজুন |
| Grep | regex দিয়ে ফাইল কন্টেন্ট সার্চ করুন |
| WebSearch | ওয়েব সার্চ করুন |
| WebFetch | একটি URL ফেচ করুন এবং এর কন্টেন্ট রিটার্ন করুন |
| AskUserQuestion | ইউজারের কাছে ইনপুট চান |
আপনি allowedTools-এর মাধ্যমে নিয়ন্ত্রণ করেন কোন টুলস এজেন্ট ব্যবহার করতে পারে। যদি কোনো টুল তালিকায় না থাকে, এজেন্ট সেটি কল করতে পারে না।
পারমিশন মোড
যেহেতু এজেন্টরা প্রকৃত সিস্টেমে প্রকৃত কমান্ড এক্সিকিউট করে, পারমিশন গুরুত্বপূর্ণ।
| মোড | আচরণ | ব্যবহারের ক্ষেত্র |
|---|---|---|
default | কাস্টম canUseTool কলব্যাক প্রতিটি কলে সিদ্ধান্ত নেয় | সূক্ষ্ম নিয়ন্ত্রণ |
acceptEdits | ফাইল অপারেশন অটো-অনুমোদন, Bash-এর জন্য প্রম্পট | ডেভেলপমেন্ট ওয়ার্কফ্লো |
dontAsk | allowedTools-এ নেই তো প্রত্যাখ্যান | সীমাবদ্ধ এজেন্ট |
bypassPermissions | সব কিছু স্বয়ংক্রিয়ভাবে অনুমোদন | বিশ্বস্ত স্যান্ডবক্সড পরিবেশ |
auto | মডেল ক্লাসিফায়ার নিরাপত্তা নির্ধারণ করে | ভারসাম্যপূর্ণ অটোমেশন |
const conversation = query({ prompt: "Refactor the auth module to use JWT", options: { allowedTools: ["Read", "Edit", "Glob", "Grep", "Bash"], permissionMode: "acceptEdits", }, });
প্রোডাকশন ব্যবহারের জন্য, সবসময় এজেন্টদের স্যান্ডবক্সড এনভায়রনমেন্টে (কন্টেইনার, VMs) চালান এবং সবচেয়ে সীমাবদ্ধ পারমিশন মোড ব্যবহার করুন যা এজেন্টকে তার কাজ করতে দেয়।
MCP দিয়ে কাস্টম টুলস তৈরি করা
SDK-এর প্রকৃত শক্তি আসে এজেন্টদের আপনার নিজের টুলস দিয়ে সম্প্রসারিত করা থেকে। কাস্টম টুলস ইন-প্রোসেস MCP সার্ভার হিসাবে সংজ্ঞায়িত হয় - কোনো সাবপ্রোসেস ম্যানেজমেন্ট নেই, কোনো নেটওয়ার্ক ওভারহেড নেই।
উদাহরণ: ওয়েদার টুল
import { tool, createSdkMcpServer, query } from "@anthropic-ai/claude-agent-sdk"; import { z } from "zod"; const getTemperature = tool( "get_temperature", "Get the current temperature at a location", { latitude: z.number().describe("Latitude"), longitude: z.number().describe("Longitude"), }, async ({ latitude, longitude }) => { const res = await fetch( `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}¤t=temperature_2m&temperature_unit=celsius` ); const data = await res.json(); return { content: [ { type: "text", text: `Current temperature: ${data.current.temperature_2m}C`, }, ], }; } ); const weatherServer = createSdkMcpServer({ name: "weather", version: "1.0.0", tools: [getTemperature], }); for await (const message of query({ prompt: "What's the weather like in Rome?", options: { mcpServers: { weather: weatherServer }, allowedTools: ["mcp__weather__get_temperature"], }, })) { if (message.type === "result" && message.subtype === "success") { console.log(message.result); } }
কাস্টম টুলস mcp__{server_name}__{tool_name} নামকরণ রীতি অনুসরণ করে। আপনি allowedTools-এ ওয়াইল্ডকার্ড ব্যবহার করতে পারেন: "mcp__weather__*" ওয়েদার সার্ভারের সব টুলস অনুমোদন করে।
উদাহরণ: ডেটাবেস কোয়েরি টুল
const queryDb = tool( "query_database", "Run a read-only SQL query against the application database", { sql: z.string().describe("SQL SELECT query to execute"), }, async ({ sql }) => { // Validate: only allow SELECT queries if (!sql.trim().toUpperCase().startsWith("SELECT")) { return { content: [{ type: "text", text: "Error: Only SELECT queries are allowed." }], }; } const result = await pool.query(sql); return { content: [ { type: "text", text: JSON.stringify(result.rows, null, 2), }, ], }; } );
এক্সটার্নাল MCP সার্ভারের সাথে সংযোগ
ইন-প্রোসেস টুলসের বাইরে, আপনি যেকোনো বিদ্যমান MCP সার্ভারের সাথে সংযোগ করতে পারেন - সেই একই সার্ভার যা Claude Desktop, Cursor এবং অন্যান্য MCP ক্লায়েন্টের সাথে কাজ করে।
for await (const message of query({ prompt: "Check the latest issues in the frontend repo and summarize them", options: { mcpServers: { github: { command: "npx", args: ["-y", "@modelcontextprotocol/server-github"], env: { GITHUB_PERSONAL_ACCESS_TOKEN: process.env.GITHUB_TOKEN }, }, }, allowedTools: ["mcp__github__*"], }, })) { // ... }
আপনি একাধিক MCP সার্ভার একত্রিত করতে পারেন। এজেন্ট সব সংযুক্ত সার্ভার থেকে সব টুলস দেখে এবং প্রয়োজন অনুসারে ব্যবহার করে।
মাল্টি-এজেন্ট অর্কেস্ট্রেশন
জটিল ওয়ার্কফ্লোর জন্য, আপনি বিশেষায়িত সাব-এজেন্ট সংজ্ঞায়িত করতে পারেন যাদের কাছে প্যারেন্ট এজেন্ট কাজ অর্পণ করে। প্রতিটি সাব-এজেন্টের নিজস্ব প্রম্পট, টুলস এবং ফোকাস এরিয়া থাকে।
for await (const message of query({ prompt: "Review the PR, check for security issues, and update the changelog", options: { allowedTools: ["Read", "Edit", "Bash", "Glob", "Grep", "Agent"], agents: [ { name: "security-reviewer", description: "Reviews code for security vulnerabilities", prompt: "You are a security expert. Analyze code for OWASP Top 10 vulnerabilities.", allowedTools: ["Read", "Glob", "Grep"], }, { name: "changelog-writer", description: "Updates the CHANGELOG.md file based on recent changes", prompt: "You maintain the project changelog. Follow Keep a Changelog format.", allowedTools: ["Read", "Edit", "Bash"], }, ], }, })) { // The parent agent will: // 1. Read the PR diff // 2. Delegate security review to security-reviewer // 3. Delegate changelog update to changelog-writer // 4. Synthesize results }
ডেলিগেশন সক্রিয় করতে প্যারেন্টের allowedTools-এ "Agent" অন্তর্ভুক্ত করুন। সাব-এজেন্টরা তাদের নিজস্ব টুলস নিয়ে চলে এবং স্পষ্টভাবে অনুমতি না দিলে প্যারেন্টের টুলস অ্যাক্সেস করতে পারে না।
সেশন এবং ধারাবাহিকতা
এজেন্টরা সেশন ব্যবহার করে একাধিক কোয়েরি জুড়ে কনটেক্সট বজায় রাখতে পারে। প্রথম ইন্টারঅ্যাকশন থেকে session_id ক্যাপচার করুন এবং পরবর্তী কোয়েরিতে resume-এ পাস করুন।
let sessionId: string | undefined; // First query for await (const message of query({ prompt: "Read the project structure and understand the architecture", options: { allowedTools: ["Read", "Glob", "Grep"] }, })) { if (message.type === "init") { sessionId = message.session_id; } } // Follow-up query (same session, full context preserved) for await (const message of query({ prompt: "Now refactor the auth module based on what you learned", resume: sessionId, options: { allowedTools: ["Read", "Edit", "Bash"] }, })) { // Agent remembers the full project context from the first query }
Claude Managed Agents
আপনি যদি এজেন্ট ইনফ্রাস্ট্রাকচার নিজে হোস্ট করতে না চান, তাহলে Claude Managed Agents (এপ্রিল 2026-এ লঞ্চ) একটি সম্পূর্ণ ম্যানেজড ক্লাউড সার্ভিস প্রদান করে। Anthropic কন্টেইনার চালায়, স্কেলিং সামলায় এবং একটি স্ট্রিমিং API প্রদান করে।
মূল পার্থক্য: Agent SDK-এর সাথে, আপনি নিজের ইনফ্রাস্ট্রাকচারে এজেন্ট লুপ চালান। Managed Agents-এর সাথে, Anthropic আপনার জন্য এজেন্ট হোস্ট ও চালায়। আপনি সেশন-ভিত্তিক API-এর মাধ্যমে ইন্টারঅ্যাক্ট করেন এবং Server-Sent Events-এর মাধ্যমে ইভেন্ট পান।
মূল্য নির্ধারণ:
- Agent SDK: শুধুমাত্র স্ট্যান্ডার্ড Claude API টোকেন রেট। হোস্টিং আপনি সামলান।
- Managed Agents: টোকেন রেট প্লাস $0.08 প্রতি সেশন-ঘণ্টা (প্রতি মিলিসেকেন্ডে বিল)।
প্রোডাকশন বেস্ট প্র্যাকটিসেস
1. সবসময় স্যান্ডবক্স করুন
প্রোডাকশন মেশিনে কখনোই অনিয়ন্ত্রিত পারমিশন দিয়ে এজেন্ট চালাবেন না। কন্টেইনার (Docker, Fly.io, Modal) বা স্যান্ডবক্সড এনভায়রনমেন্ট (E2B, Vercel Sandbox) ব্যবহার করুন।
2. টুল অ্যাক্সেস সীমাবদ্ধ করুন
সর্বনিম্ন বিশেষাধিকারের নীতি অনুসরণ করুন। রিপোর্ট তৈরি করা একটি এজেন্টের Bash বা Write-এর প্রয়োজন নেই।
// Too permissive allowedTools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"] // Better: only what's needed allowedTools: ["Read", "Glob", "Grep"]
3. গার্ডরেলসের জন্য Hooks ব্যবহার করুন
Hooks আপনাকে এক্সিকিউশনের আগে ও পরে টুল কলগুলো ইন্টারসেপ্ট করতে দেয়। লগিং, ভ্যালিডেশন এবং রেট লিমিটিং-এর জন্য এগুলো ব্যবহার করুন।
const conversation = query({ prompt: "Analyze the codebase", options: { allowedTools: ["Read", "Glob", "Grep"], hooks: { PreToolUse: async (toolName, input) => { console.log(`Tool call: ${toolName}`, input); // Return false to block the call if (toolName === "Bash" && input.command.includes("rm")) { return false; } return true; }, }, }, });
4. ত্রুটি সুন্দরভাবে সামলান
এজেন্ট লুপ ত্রুটি তৈরি করতে পারে - টুল ব্যর্থতা, API রেট লিমিট, কনটেক্সট উইন্ডো ওভারফ্লো। সবসময় মেসেজ টাইপ চেক করুন।
for await (const message of conversation) { switch (message.type) { case "assistant": // Agent reasoning break; case "tool_use": // Agent is calling a tool break; case "result": if (message.subtype === "error") { console.error("Agent failed:", message.error); } break; } }
5. টোকেন ব্যবহার পর্যবেক্ষণ করুন
এজেন্ট লুপ উল্লেখযোগ্য টোকেন খরচ করতে পারে, বিশেষত বড় কোডবেসের সাথে। SDK-তে স্বয়ংক্রিয় কনটেক্সট কম্প্যাকশন আছে, কিন্তু আপনার এখনও ব্যবহার পর্যবেক্ষণ করা উচিত।
উপসংহার
Claude Agent SDK একটি LLM-কে প্রশ্ন-উত্তর মেশিন থেকে জুনিয়র ডেভেলপারের কাছাকাছি কিছুতে পরিণত করে। আপনার এজেন্টরা পড়তে, লিখতে, এক্সিকিউট করতে, যাচাই করতে এবং পুনরাবৃত্তি করতে পারে - সেই একই ওয়ার্কফ্লো যা একজন মানুষ অনুসরণ করে।
ছোট থেকে শুরু করুন: কয়েকটি বিল্ট-ইন টুলস দিয়ে একটি এজেন্ট তৈরি করুন। তারপর আপনার নির্দিষ্ট ডোমেনের জন্য কাস্টম MCP টুলস যোগ করুন। আপনার ওয়ার্কফ্লোতে বিশেষায়িতকরণ প্রয়োজন হলে মাল্টি-এজেন্ট অর্কেস্ট্রেশনে স্কেল করুন।
এজেন্ট লুপটি সেটিই যা Claude Code-কে শক্তি দেয়। যদি এটি সফটওয়্যার তৈরি করতে পারে, আপনার এজেন্টরাও পারবে।
শুরুর চেকলিস্ট:
- SDK ইনস্টল করুন (
npm install @anthropic-ai/claude-agent-sdk)- আপনার এনভায়রনমেন্টে
ANTHROPIC_API_KEYসেট করুন- বিল্ট-ইন টুলস (Read, Glob, Grep) দিয়ে একটি সাধারণ এজেন্ট তৈরি করুন
- ইন-প্রোসেস MCP সার্ভারের মাধ্যমে একটি কাস্টম টুল যোগ করুন
- একটি এক্সটার্নাল MCP সার্ভার (GitHub, PostgreSQL, ইত্যাদি) সংযোগ করুন
- সাব-এজেন্টদের সাথে মাল্টি-এজেন্ট অর্কেস্ট্রেশন বাস্তবায়ন করুন
- প্রোডাকশনের জন্য স্যান্ডবক্সড এনভায়রনমেন্ট সেট আপ করুন
- লগিং ও গার্ডরেলসের জন্য hooks যোগ করুন