spinny:~/writing $ less building-ai-agents-claude-agent-sdk.md
12Claude Agent SDK nadaie prohramnyi dostup do toho samoho tsyklu ahenta, shcho stoiit za Claude Code. Vashi ahenty mozhut chytaty faily, vykonuvaty komandy obolonky, shukaty v interneti, redahuvaty kod, vyklykaty zovnishni API cherez MCP-servery ta orkestruvaty sub-ahentiv - vse tse z kilkokh riadkiv TypeScript abo Python.34Na vidminu vid standartnoho Anthropic Client SDK, de vy samoshtihno buduiete tsykl instrumentiv, Agent SDK vnutrishno obrobliaie vykonannia instrumentiv, keruvannia kontekstom, povtorni sproby ta orkestruvannia. Vy opysuiete, shcho khochiete, nadaiete instrumenty, a ahent rozbyraietsia z reshtou.56## Arkhitektura78SDK sliduie prostomu tsyklu: **zbyraie kontekst, vykonuie diiu, pereviriate, povtoriuie**.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```3536Holovnou tochkoiu vkhodu ie `query()`, yaka povertaie asynkhronnyi iterator, shcho transliuie povidomlennia pid chas roboty ahenta. Kozhne povidomlennia kazhe vam, shcho robyit ahent: mirkuie, vyklykaie instrument, otrymuie rezultat abo dostavliaie kintsevyi vyvid.3738## Pochatok roboty3940### Vstanovlennia4142```bash43# TypeScript44npm install @anthropic-ai/claude-agent-sdk4546# Python47pip install claude-agent-sdk48```4950Vam potriben API-kliuch Anthropic, vstanovlenyi yak `ANTHROPIC_API_KEY` u vashomu otochenni.5152### Vash pershyi ahent5354```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```7374Ot i vse. Ahent vykorystovuie Glob dlia poshuku failiv, Grep dlia poshuku patterniv TODO, Read dlia vyvchhennia zbihiv i povertaie strukturovane reziume. Vy ne pyshete lohiku orkestratsii - SDK berete tse na sebe.7576### Ekvivalent na Python7778```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## Vbudovani instrumenty9293SDK postachaietsia z tymy samymy instrumentamy, shcho dostupni v Claude Code:9495| Instrument | Opys |96|------|-------------|97| **Read** | Chytannia vmistu failiv |98| **Write** | Stvorennia novykh failiv |99| **Edit** | Tsilovi pravky v isnuiuchykh failakh |100| **Bash** | Vykonannia komand obolonky |101| **Glob** | Poshuk failiv za patternom |102| **Grep** | Poshuk u vmisti failiv za dopomohoiu regex |103| **WebSearch** | Poshuk v interneti |104| **WebFetch** | Zavantazhennia URL ta povernennia yoho vmistu |105| **AskUserQuestion** | Zapyt vvedennia vid korystuvacha |106107Vy kontroliuiete, yaki instrumenty ahent mozhe vykorystovuvaty, cherez `allowedTools`. Yakshcho instrumenta nemaie u spysku, ahent ne mozhe yoho vyklykaty.108109## Rezhymy dozvoliv110111Oskilky ahenty vykonuiut realni komandy na realnykh systemakh, dozvoly maiut znachennia.112113| Rezhym | Povedinka | Zastosuvannia |114|------|----------|----------|115| `default` | Korystuvatskyj callback `canUseTool` vyrishuie pry kozhnomu vyklyku | Tonke nalashtuvannia |116| `acceptEdits` | Avtozatverdzhemnia failovykh operatsii, zapyt dlia Bash | Robochi protsesy rozrobky |117| `dontAsk` | Vidkhylennia vsoho, shcho ne v allowedTools | Obmezheni ahenty |118| `bypassPermissions` | Avtomatychne zatverdzhemnia vsoho | Dovireni sandbox-seredovyshcha |119| `auto` | Klasyfikator modeli vyrishuie pro bezpeku | Zbalansovana avtomatyzatsiia |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```130131Dlia produktsiinoho vykorystannia zavzhdy zapuskaiite ahentiv u izolovanykh seredovyshchakh (konteinery, virtualni mashyny) ta vykorystovuiite naistrozhishyi rezhym dozvoliv, yakyi vse shche dozvoliaie ahentu vykonuvaty svoiu robotu.132133## Stvorennia vlasnykh instrumentiv z MCP134135Spravzhnia syla SDK poliahaie u rozshyrenni ahentiv vashymy vlasnymy instrumentamy. Vlasni instrumenty vyznachaiutsia yak in-process MCP-servery - bez keruvannia pidprotsesamy, bez merezhnykh nakladnykh vytrat.136137### Pryklad: Instrument pohody138139```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```184185Vlasni instrumenty sliduiut konventsii naymenuvannia `mcp__{imia_servera}__{imia_instrumenta}`. Vy mozhete vykorystovuvaty pidstavni znaky v `allowedTools`: `"mcp__weather__*"` dozvoliaie vsi instrumenty z servera pohody.186187### Pryklad: Instrument zapytiv do bazy danykh188189```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## Pidkliuchennia zovnishnikh MCP-serveriv218219Okrim in-process instrumentiv, vy mozhete pidkliuchatysia do bud-yakoho isnuiuchoho MCP-servera - tykh samykh serveriv, shcho pratsiuiut z Claude Desktop, Cursor ta inshymy MCP-kliientamy.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```238239Vy mozhete kombinuvaty kilka MCP-serveriv. Ahent bachyt vsi instrumenty z usikh pidkliuchenykh serveriv ta vykorystovuie ikh za potreboiu.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## Orkestruvannia kilkokh ahentiv251252Dlia skladnykh robochykh protsesiv vy mozhete vyznachaty spetsializovanykh sub-ahentiv, yakym batkivskyj ahent delehuie zavdannia. Kozhnyj sub-ahent maie vlasnyj prompt, instrumenty ta oblast fokusu.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```282283Dodaite `"Agent"` do `allowedTools` batkivskoho ahenta dlia vvimknennia delehuvannia. Sub-ahenty pratsiuiut zi svoimy instrumentamy i ne maiut dostupu do instrumentiv batka, yakshcho tse ne nadano yavno.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## Sesii ta bezperervnist297298Ahenty mozhut pidtrymuvaty kontekst mizh kilkoma zapytamy za dopomohoiu sesii. Zakhopliuite `session_id` z pershoi vzaiemodii ta peredaite yoho u `resume` dlia nastupnykh zapytiv.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 Agents324325Yakshcho vy ne khochete samoshtiiino rozmishchuvaty infrastrukturu ahenta, **Claude Managed Agents** (zapushchenyj u kvitni 2026) nadaie povnistiu kerovanyj khmarnyi servis. Anthropic zapuskaie konteinery, obrobliaie mashcabuvannia ta nadaie streaming 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```342343Kliuchova vidminnist: z Agent SDK vy zapuskaete tsykl ahenta u vlasnii infrastrukturi. Z Managed Agents Anthropic rozmishchuie ta zapuskaie ahenta za vas. Vy vzaiemodiiete cherez API na osnovi sesii ta otrymyiete podii cherez Server-Sent Events.344345**Tsiny:**346- **Agent SDK**: tilky standartni taryfy na tokeny Claude API. Khostynh na vashii storoni.347- **Managed Agents**: taryfy na tokeny plius 0,08 USD za hodynu sesii (taryfikatsiia pomilisekundno).348349## Naikrashchi praktyky dlia produktsii350351### 1. Zavzhdy izoliuite352353Nikoly ne zapuskaiite ahentiv z neobmezhenymy dozvolamy na produktsiinii mashyni. Vykorystovuiite konteinery (Docker, Fly.io, Modal) abo izoliovani seredovyshcha (E2B, Vercel Sandbox).354355### 2. Obmezhuite dostup do instrumentiv356357Dotrymujtesia pryntsypu naimenshykh pryvileiv. Ahentu, shcho heneruie zvity, ne potribni `Bash` abo `Write`.358359```typescript360// Too permissive361allowedTools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep"]362363// Better: only what's needed364allowedTools: ["Read", "Glob", "Grep"]365```366367### 3. Vykorystovuiite hooks dlia zakhysnykh mekhanizmiv368369Hooks dozvoliaiut perekhopliuvaty vyklyky instrumentiv do ta pislia vykonannia. Vykorystovuiite ikh dlia lohuvannia, validatsii ta obmezhhennia chastoty.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. Obrobliajte pomylky elehantno391392Tsykl ahenta mozhe heneruvaty pomylky - zboi instrumentiv, limity API, perepovnennia kontekstnoho vikna. Zavzhdy pereviriate typy povidomlen.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. Monitorte vykorystannia tokeniv413414Tsykly ahentiv mozhut spozhyvaty znachnu kilkist tokeniv, osoblyvo z velykymy bazamy kodu. SDK vkliuchaie avtomatychnu kompaktsiiu kontekstu, ale vy vse odno povynni monitory vykorystannia.415416## Vysnovok417418Claude Agent SDK peretvoriuie LLM z mashyny dlia vidpovidei na pytannia u shchos blyzhche do junior-rozrobnyka. Vashi ahenty mozhut chytaty, pysaty, vykonuvaty, pereviryaty ta iteruvaty - toi samyi workflow, yakoho dotrymuietsia liudyna.419420Pochnit z maloho: stvori ahenta z kilkoma vbudovanymy instrumentamy. Potim dodaite vlasni MCP-instrumenty dlia vashoi konkretNoi oblasti. Mashchanuiite do orkestratsii kilkokh ahentiv, koly vashi protsesy vymahaeiut spetsializatsii.421422Tsykl ahenta - toi samyi, shcho stoiit za Claude Code. Yakshcho vin mozhe stvoriuvaty prohramne zabezpechennia, vashi ahenty tezh zmozhut.423424> **Chek-lyst dlia pochatku:**425>426> - [x] Vstanovit SDK (`npm install @anthropic-ai/claude-agent-sdk`)427> - [x] Vstanovit `ANTHROPIC_API_KEY` u vashomu otochenni428> - [x] Stvority prostoho ahenta z vbudovanymy instrumentamy (Read, Glob, Grep)429> - [x] Dodaty vlasnyj instrument cherez in-process MCP-server430> - [x] Pidkliuchyty zovnishnij MCP-server (GitHub, PostgreSQL, toshcho)431> - [x] Realizuvaty orkestruvannia kilkokh ahentiv z sub-ahentamy432> - [x] Nalashtuvy izoliovane seredovyshche dlia produktsii433> - [x] Dodaty hooks dlia lohuvannia ta zakhysnykh mekhanizmiv434
:Stvorennia AI-ahentiv z Claude Agent SDK: Praktychnyi posibnyklines 1-434 (END) — press q to close