{"id":"ab61fbbf-7788-4cb3-bb65-64a18b095f50","shortId":"cAxmTT","kind":"skill","title":"claude-agent-sdk-python","tagline":"Expert guidance for building AI agents with the Claude Agent SDK in Python. Use when the user writes Python code with the SDK, imports claude_agent_sdk, uses query(), ClaudeSDKClient, ClaudeAgentOptions, AgentDefinition, creates custom @tool functions, sets up hooks, integrates M","description":"# Claude Agent SDK — Python Guide\n\nProduction guidance for building AI agents with the Claude Agent SDK in Python.\n\n> **Naming**: The Claude Code SDK was renamed to the Claude Agent SDK (v0.1.0+).\n> Package: `pip install claude-agent-sdk` · Import: `from claude_agent_sdk import ...`\n\n## Message Types\n\nAll message types for type checking and `isinstance()` checks:\n\n```python\nfrom claude_agent_sdk import (\n    AssistantMessage,     # Claude's text/tool responses\n    ResultMessage,        # Final result with subtype (success/error/cancelled)\n    SystemMessage,        # System events (session_id, etc.)\n    UserMessage,          # User prompts\n    ToolUseMessage,       # Tool invocation requests\n    ToolResultMessage,    # Tool execution results\n)\n```\n\n## Quick Reference — Two Interaction Modes\n\n### 1. `query()` — Stateless, One-Shot\n\nBest for: independent tasks, automation scripts, CI pipelines.\n\n```python\nimport asyncio\nfrom claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage\n\nasync def main():\n    async for message in query(\n        prompt=\"Review utils.py for bugs. Fix any issues you find.\",\n        options=ClaudeAgentOptions(\n            allowed_tools=[\"Read\", \"Edit\", \"Glob\"],\n            permission_mode=\"acceptEdits\",\n        ),\n    ):\n        if isinstance(message, AssistantMessage):\n            for block in message.content:\n                if hasattr(block, \"text\"):\n                    print(block.text)\n                elif hasattr(block, \"name\"):\n                    print(f\"Tool: {block.name}\")\n        elif isinstance(message, ResultMessage):\n            print(f\"Done: {message.subtype}\")\n\nasyncio.run(main())\n```\n\n### 2. `ClaudeSDKClient` — Stateful, Multi-Turn\n\nBest for: conversations, follow-up questions, interactive apps.\n\n```python\nfrom claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions\n\nasync with ClaudeSDKClient(\n    options=ClaudeAgentOptions(\n        allowed_tools=[\"Read\", \"Write\", \"Bash\"],\n        permission_mode=\"acceptEdits\",\n    )\n) as client:\n    await client.query(\"Analyze the codebase structure\")\n    async for msg in client.receive_messages():\n        print(msg)\n    # Continue the conversation with context preserved\n    await client.query(\"Now refactor the largest file you found\")\n    async for msg in client.receive_messages():\n        print(msg)\n```\n\n## ClaudeAgentOptions — Complete Configuration\n\nAll options are optional. Key fields:\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `allowed_tools` | `list[str] \\| None` | Tools Claude can use. See Built-in Tools below. |\n| `disallowed_tools` | `list[str] \\| None` | Explicitly block specific tools. |\n| `permission_mode` | `\"default\" \\| \"acceptEdits\" \\| \"bypassPermissions\"` | Permission strategy. |\n| `system_prompt` | `str \\| dict \\| None` | Custom instructions. Use `{\"type\": \"preset\", \"preset\": \"claude_code\"}` for CC default. |\n| `model` | `str \\| None` | e.g. `\"sonnet\"`, `\"opus\"`, `\"haiku\"`, or full model string. |\n| `cwd` | `str \\| Path \\| None` | Working directory for the agent. |\n| `max_turns` | `int \\| None` | Maximum agentic loop iterations. |\n| `setting_sources` | `list[Literal[\"user\", \"project\"]] \\| None` | `[\"user\", \"project\"]` to load Skills/CLAUDE.md from filesystem. |\n| `mcp_servers` | `dict \\| None` | MCP server configurations. |\n| `agents` | `dict[str, AgentDefinition] \\| None` | Named subagent definitions. |\n| `hooks` | `dict \\| None` | Lifecycle hook callbacks. |\n\n### Built-in Tools\n\nTool names for `allowed_tools`:\n\n- **File ops**: `Read`, `Write`, `Edit`, `MultiEdit`\n- **Search**: `Glob`, `Grep`\n- **Execution**: `Bash`\n- **Web**: `WebSearch`, `WebFetch`\n- **Delegation**: `Task` (required for subagents)\n- **Skills**: `Skill` (requires `setting_sources`)\n\n## Custom Tools via SDK MCP Server\n\nDefine in-process tools without a separate MCP server process:\n\n```python\nfrom claude_agent_sdk import tool, create_sdk_mcp_server, ClaudeAgentOptions\n\n@tool(\"search_orders\", \"Search orders by customer ID\", {\"customer_id\": str, \"status\": str})\nasync def search_orders(args):\n    results = await db.query_orders(args[\"customer_id\"], args.get(\"status\"))\n    return {\"content\": [{\"type\": \"text\", \"text\": json.dumps(results)}]}\n\n@tool(\"send_email\", \"Send an email notification\", {\"to\": str, \"subject\": str, \"body\": str})\nasync def send_email(args):\n    await email_service.send(args[\"to\"], args[\"subject\"], args[\"body\"])\n    return {\"content\": [{\"type\": \"text\", \"text\": f\"Email sent to {args['to']}\"}]}\n\nserver = create_sdk_mcp_server(name=\"business-tools\", tools=[search_orders, send_email])\n\noptions = ClaudeAgentOptions(\n    mcp_servers={\"biz\": server},\n    allowed_tools=[\"mcp__biz__search_orders\", \"mcp__biz__send_email\"],\n)\n```\n\n**Tool naming convention**: MCP tools are accessed as `mcp__<server-name>__<tool-name>`.\n\n## Subagents\n\nDelegate specialized tasks to isolated agents with their own context and tool permissions:\n\n```python\nfrom claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition\n\nasync for message in query(\n    prompt=\"Review auth module for security issues, then write tests\",\n    options=ClaudeAgentOptions(\n        allowed_tools=[\"Read\", \"Grep\", \"Glob\", \"Task\"],  # Task is required\n        agents={\n            \"security-reviewer\": AgentDefinition(\n                description=\"Security specialist. Use for vulnerability analysis.\",\n                prompt=\"You are a security expert. Analyze code for OWASP Top 10...\",\n                tools=[\"Read\", \"Grep\", \"Glob\"],\n                model=\"opus\",\n            ),\n            \"test-writer\": AgentDefinition(\n                description=\"Test specialist. Use to generate test suites.\",\n                prompt=\"You are a testing expert. Write comprehensive unit tests...\",\n                tools=[\"Read\", \"Write\", \"Bash\"],\n                model=\"sonnet\",\n            ),\n        },\n    ),\n):\n    print(message)\n```\n\n**Factory pattern** for dynamic agents:\n\n```python\ndef create_reviewer(language: str) -> AgentDefinition:\n    return AgentDefinition(\n        description=f\"{language} code review specialist\",\n        prompt=f\"You are an expert {language} developer...\",\n        tools=[\"Read\", \"Grep\", \"Glob\"],\n        model=\"opus\" if language in [\"rust\", \"c++\"] else \"sonnet\",\n    )\n```\n\n## Hooks — Lifecycle Callbacks\n\nAvailable events: `PreToolUse`, `PostToolUse`, `Stop`, `SessionStart`, `SessionEnd`, `UserPromptSubmit`.\n\n```python\nfrom claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher\n\nasync def block_dangerous_commands(input_data, tool_use_id, context):\n    \"\"\"Block destructive bash commands.\"\"\"\n    if input_data.get(\"tool_name\") == \"Bash\":\n        cmd = input_data.get(\"tool_input\", {}).get(\"command\", \"\")\n        if any(danger in cmd for danger in [\"rm -rf /\", \"DROP TABLE\", \"mkfs\"]):\n            return {\n                \"hookSpecificOutput\": {\n                    \"hookEventName\": \"PreToolUse\",\n                    \"permissionDecision\": \"deny\",\n                    \"permissionDecisionReason\": f\"Blocked dangerous command: {cmd}\",\n                }\n            }\n    return {}\n\nasync def audit_log(input_data, tool_use_id, context):\n    \"\"\"Log all tool usage for auditing.\"\"\"\n    with open(\"audit.log\", \"a\") as f:\n        f.write(f\"{input_data.get('tool_name')}: {input_data.get('tool_input')}\\n\")\n    return {}\n\noptions = ClaudeAgentOptions(\n    hooks={\n        \"PreToolUse\": [\n            HookMatcher(matcher=\"Bash\", hooks=[block_dangerous_commands]),\n            HookMatcher(matcher=\".*\", hooks=[audit_log]),\n        ]\n    }\n)\n```\n\n## MCP Integration (External Servers)\n\n```python\noptions = ClaudeAgentOptions(\n    mcp_servers={\n        \"github\": {\n            \"type\": \"stdio\",\n            \"command\": \"npx\",\n            \"args\": [\"-y\", \"@modelcontextprotocol/server-github\"],\n            \"env\": {\"GITHUB_TOKEN\": os.getenv(\"GITHUB_TOKEN\")},\n        },\n        \"postgres\": {\n            \"type\": \"stdio\",\n            \"command\": \"docker\",\n            \"args\": [\"run\", \"mcp-postgres-server\"],\n            \"env\": {\"DATABASE_URL\": os.getenv(\"DATABASE_URL\")},\n        },\n    },\n    allowed_tools=[\"mcp__github\", \"mcp__postgres\"],\n)\n```\n\nYou can mix SDK MCP servers (in-process) and external MCP servers in the same config.\n\n## Using Skills in the SDK\n\nSkills are filesystem-based and must be explicitly enabled:\n\n```python\noptions = ClaudeAgentOptions(\n    cwd=\"/path/to/project\",\n    setting_sources=[\"user\", \"project\"],  # REQUIRED — loads Skills from filesystem\n    allowed_tools=[\"Skill\", \"Read\", \"Write\", \"Bash\"],\n)\n```\n\n**Common mistake**: forgetting `setting_sources`. Without it, Skills won't be discovered even if `\"Skill\"` is in `allowed_tools`.\n\nSkill locations:\n- **Project**: `.claude/skills/*/SKILL.md` (shared via git)\n- **User**: `~/.claude/skills/*/SKILL.md` (personal, cross-project)\n\nNote: The `allowed-tools` field in SKILL.md frontmatter **only works in Claude Code CLI**, not in the SDK. Use `allowed_tools` in `ClaudeAgentOptions` to control tool access.\n\n## Sessions and Conversation Management\n\n```python\nfrom claude_agent_sdk import query, ClaudeAgentOptions\n\nsession_id = None\n\n# First interaction — capture session_id\nasync for message in query(\n    prompt=\"Review this codebase and identify the top 3 issues\",\n    options=ClaudeAgentOptions(allowed_tools=[\"Read\", \"Glob\", \"Grep\"]),\n):\n    if message.type == \"system\" and hasattr(message, \"session_id\"):\n        session_id = message.session_id\n    print(message)\n\n# Resume with context\nasync for message in query(\n    prompt=\"Now fix issue #1 that you found\",\n    options=ClaudeAgentOptions(\n        session_id=session_id,\n        allowed_tools=[\"Read\", \"Edit\", \"Bash\"],\n        permission_mode=\"acceptEdits\",\n    ),\n):\n    print(message)\n```\n\n## System Prompt Configuration\n\n```python\n# 1. Custom system prompt (v0.1.0+ default: minimal prompt)\noptions = ClaudeAgentOptions(system_prompt=\"You are a senior Python engineer...\")\n\n# 2. Claude Code's full system prompt (opt-in)\noptions = ClaudeAgentOptions(\n    system_prompt={\"type\": \"preset\", \"preset\": \"claude_code\"}\n)\n\n# 3. No system prompt — SDK default (minimal)\noptions = ClaudeAgentOptions()  # uses minimal built-in prompt\n```\n\n**Breaking change in v0.1.0**: The SDK no longer loads Claude Code's system prompt by default. If you need the old behavior, explicitly set `preset: \"claude_code\"`.\n\n## Authentication\n\n```bash\n# Direct API (default)\nexport ANTHROPIC_API_KEY=your-api-key\n\n# Amazon Bedrock\nexport CLAUDE_CODE_USE_BEDROCK=1\n# + configure AWS credentials\n\n# Google Vertex AI\nexport CLAUDE_CODE_USE_VERTEX=1\n# + configure GCP credentials\n\n# Microsoft Azure AI Foundry\nexport CLAUDE_CODE_USE_FOUNDRY=1\n# + configure Azure credentials\n```\n\n## Common Patterns\n\n### Batch Processing (Parallel Agents)\n\n```python\nimport asyncio\n\nasync def process_file(filepath: str):\n    async for msg in query(\n        prompt=f\"Review {filepath} for security issues\",\n        options=ClaudeAgentOptions(\n            allowed_tools=[\"Read\", \"Grep\"],\n            max_turns=50,\n        ),\n    ):\n        if isinstance(msg, ResultMessage):\n            return msg.result\n\nresults = await asyncio.gather(\n    process_file(\"auth.py\"),\n    process_file(\"payments.py\"),\n    process_file(\"users.py\"),\n)\n```\n\n### Structured Output Collection\n\n```python\nmessages = []\nasync for msg in query(prompt=\"Analyze this codebase\", options=options):\n    messages.append(msg)\n\n# Extract final result\nresult = next((m for m in reversed(messages) if hasattr(m, \"result\")), None)\n```\n\n### Error Handling\n\nAvailable exception types:\n- `CLINotFoundError` — Claude Code CLI binary not found in PATH\n- `CLIConnectionError` — Failed to connect to CLI process\n- Standard Python exceptions (e.g., `asyncio.TimeoutError`) may also be raised\n\n```python\nfrom claude_agent_sdk import CLINotFoundError, CLIConnectionError\n\ntry:\n    async for msg in query(prompt=\"...\", options=options):\n        print(msg)\nexcept CLINotFoundError:\n    print(\"Claude Code CLI not found. Install: curl -fsSL https://claude.ai/install.sh | bash\")\nexcept CLIConnectionError as e:\n    print(f\"Connection error: {e}\")\n```\n\n## Migration from Claude Code SDK (< v0.1.0)\n\nKey changes:\n1. `ClaudeCodeOptions` → `ClaudeAgentOptions`\n2. System prompt no longer loads Claude Code's prompt by default\n3. `setting_sources` must be explicitly set (was auto-loaded before)\n4. Import path unchanged (`claude_agent_sdk`), but class names changed\n\n## Best Practices\n\n1. **Principle of least privilege**: Only grant tools the agent actually needs.\n2. **Use `permission_mode=\"acceptEdits\"` for automation**, `\"default\"` for interactive use.\n3. **Prefer SDK MCP servers** over external ones for custom tools — less overhead, easier debugging.\n4. **Use subagents for specialized tasks** — isolate context and apply the right model per task.\n5. **Add hooks for safety** — block dangerous commands and audit tool usage in production.\n6. **Set `max_turns`** to prevent runaway agents in production environments.\n7. **Use `cwd`** to scope the agent to a specific directory.\n8. **Capture `session_id`** from system messages if you need conversation continuity.\n\n> For troubleshooting common issues, see `references/troubleshooting.md`.\n\n## Official Resources\n\n- Overview: https://platform.claude.com/docs/en/agent-sdk/overview\n- Quickstart: https://platform.claude.com/docs/en/agent-sdk/quickstart\n- Python reference: https://platform.claude.com/docs/en/agent-sdk/python\n- Migration guide: https://platform.claude.com/docs/en/agent-sdk/migration-guide\n- Python SDK repo: https://github.com/anthropics/claude-agent-sdk-python\n- Demo agents: https://github.com/anthropics/claude-agent-sdk-demos\n- Cookbook: https://platform.claude.com/cookbook","tags":["claude","agent","sdk","python","skill","waltersumbon","agent-skills","ai-agents","anthropic","claude-agent-sdk","claude-code","claude-skills"],"capabilities":["skill","source-waltersumbon","skill-claude-agent-sdk-python","topic-agent-skills","topic-ai-agents","topic-anthropic","topic-claude-agent-sdk","topic-claude-code","topic-claude-skills"],"categories":["claude-agent-sdk-skill"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/WalterSumbon/claude-agent-sdk-skill/claude-agent-sdk-python","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add WalterSumbon/claude-agent-sdk-skill","source_repo":"https://github.com/WalterSumbon/claude-agent-sdk-skill","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 6 github stars · SKILL.md body (13,674 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:14:31.467Z","embedding":null,"createdAt":"2026-05-18T13:22:18.266Z","updatedAt":"2026-05-18T19:14:31.467Z","lastSeenAt":"2026-05-18T19:14:31.467Z","tsv":"'/.claude/skills':992 '/anthropics/claude-agent-sdk-demos':1592 '/anthropics/claude-agent-sdk-python':1587 '/cookbook':1596 '/docs/en/agent-sdk/migration-guide':1581 '/docs/en/agent-sdk/overview':1567 '/docs/en/agent-sdk/python':1576 '/docs/en/agent-sdk/quickstart':1571 '/install.sh':1396 '/path/to/project':948 '/skill.md':987,993 '1':141,1094,1118,1217,1229,1242,1415,1455 '10':668 '2':227,1136,1418,1467 '3':1059,1155,1430,1478 '4':1442,1493 '5':1508 '50':1281 '6':1522 '7':1533 '8':1544 'acceptedit':194,262,341,1111,1471 'access':593,1025 'actual':1465 'add':1509 'agent':3,11,15,31,48,57,61,75,83,88,105,160,245,380,386,410,477,602,613,645,709,760,1033,1251,1367,1447,1464,1529,1539,1589 'agentdefinit':37,413,618,649,678,716,718 'ai':10,56,1223,1235 'allow':187,255,314,431,577,636,906,958,981,1001,1018,1063,1104,1275 'allowed-tool':1000 'also':1361 'amazon':1210 'analysi':656 'analyz':267,663,1311 'anthrop':1203 'api':1200,1204,1208 'app':241 'appli':1502 'arg':503,508,537,540,542,544,555,880,894 'args.get':511 'assistantmessag':108,165,198 'async':167,170,250,271,294,499,533,619,766,818,1046,1085,1255,1261,1305,1373 'asyncio':157,1254 'asyncio.gather':1290 'asyncio.run':225 'asyncio.timeouterror':1359 'audit':820,833,864,1517 'audit.log':836 'auth':626 'auth.py':1293 'authent':1197 'auto':1439 'auto-load':1438 'autom':151,1473 'avail':749,1336 'aw':1219 'await':265,285,505,538,1289 'azur':1234,1244 'base':938 'bash':259,443,700,779,785,856,963,1108,1198,1397 'batch':1248 'bedrock':1211,1216 'behavior':1191 'best':147,233,1453 'binari':1343 'biz':575,580,584 'block':200,205,211,335,768,777,813,858,1513 'block.name':216 'block.text':208 'bodi':531,545 'break':1170 'bug':179 'build':9,55 'built':325,425,1167 'built-in':324,424,1166 'busi':564 'business-tool':563 'bypasspermiss':342 'c':743 'callback':423,748 'captur':1043,1545 'cc':359 'chang':1171,1414,1452 'check':98,101 'ci':153 'class':1450 'claud':2,14,30,47,60,67,74,82,87,104,109,159,244,320,356,476,612,759,1010,1032,1137,1153,1179,1195,1213,1225,1238,1340,1366,1386,1409,1424,1446 'claude-agent-sdk':81 'claude-agent-sdk-python':1 'claude.ai':1395 'claude.ai/install.sh':1394 'claude/skills':986 'claudeagentopt':36,164,186,249,254,302,485,572,617,635,764,851,872,946,1021,1037,1062,1099,1127,1147,1163,1274,1417 'claudecodeopt':1416 'claudesdkcli':35,228,248,252 'cli':1012,1342,1353,1388 'cliconnectionerror':1348,1371,1399 'client':264 'client.query':266,286 'client.receive':275,298 'clinotfounderror':1339,1370,1384 'cmd':786,796,816 'code':25,68,357,664,722,1011,1138,1154,1180,1196,1214,1226,1239,1341,1387,1410,1425 'codebas':269,1054,1313 'collect':1302 'command':770,780,791,815,860,878,892,1515 'common':964,1246,1558 'complet':303 'comprehens':694 'config':928 'configur':304,409,1116,1218,1230,1243 'connect':1351,1404 'content':514,547 'context':283,606,776,827,1084,1500 'continu':279,1555 'control':1023 'convent':589 'convers':235,281,1028,1554 'cookbook':1593 'creat':38,481,558,712 'credenti':1220,1232,1245 'cross':996 'cross-project':995 'curl':1392 'custom':39,350,457,492,494,509,1119,1487 'cwd':372,947,1535 'danger':769,794,798,814,859,1514 'data':772,823 'databas':901,904 'db.query':506 'debug':1492 'def':168,500,534,711,767,819,1256 'default':340,360,1123,1160,1185,1201,1429,1474 'defin':463 'definit':417 'deleg':447,597 'demo':1588 'deni':810 'descript':313,650,679,719 'destruct':778 'develop':732 'dict':348,405,411,419 'direct':1199 'directori':377,1543 'disallow':329 'discov':975 'docker':893 'done':223 'drop':802 'dynam':708 'e':1401,1406 'e.g':364,1358 'easier':1491 'edit':190,437,1107 'elif':209,217 'els':744 'email':522,525,536,552,570,586 'email_service.send':539 'enabl':943 'engin':1135 'env':883,900 'environ':1532 'error':1334,1405 'etc':124 'even':976 'event':121,750 'except':1337,1357,1383,1398 'execut':134,442 'expert':6,662,692,730 'explicit':334,942,1192,1435 'export':1202,1212,1224,1237 'extern':868,922,1484 'extract':1318 'f':214,222,551,720,726,812,839,841,1267,1403 'f.write':840 'factori':705 'fail':1349 'field':310,311,1003 'file':291,433,1258,1292,1295,1298 'filepath':1259,1269 'filesystem':402,937,957 'filesystem-bas':936 'final':114,1319 'find':184 'first':1041 'fix':180,1092 'follow':237 'follow-up':236 'forget':966 'found':293,1097,1345,1390 'foundri':1236,1241 'frontmatt':1006 'fssl':1393 'full':369,1140 'function':41 'gcp':1231 'generat':684 'get':790 'git':990 'github':875,884,887,909 'github.com':1586,1591 'github.com/anthropics/claude-agent-sdk-demos':1590 'github.com/anthropics/claude-agent-sdk-python':1585 'glob':191,440,640,672,736,1066 'googl':1221 'grant':1461 'grep':441,639,671,735,1067,1278 'guid':51,1578 'guidanc':7,53 'haiku':367 'handl':1335 'hasattr':204,210,1072,1330 'hook':44,418,422,746,852,857,863,1510 'hookeventnam':807 'hookmatch':765,854,861 'hookspecificoutput':806 'id':123,493,495,510,775,826,1039,1045,1075,1077,1079,1101,1103,1547 'identifi':1056 'import':29,85,90,107,156,162,247,479,615,762,1035,1253,1369,1443 'in-process':464,918 'independ':149 'input':771,789,822,847 'input_data.get':782,787,842,845 'instal':80,1391 'instruct':351 'int':383 'integr':45,867 'interact':139,240,1042,1476 'invoc':130 'isinst':100,196,218,1283 'isol':601,1499 'issu':182,630,1060,1093,1272,1559 'iter':388 'json.dumps':518 'key':309,1205,1209,1413 'languag':714,721,731,740 'largest':290 'least':1458 'less':1489 'lifecycl':421,747 'list':316,331,391 'liter':392 'load':399,954,1178,1423,1440 'locat':984 'log':821,828,865 'longer':1177,1422 'loop':387 'm':46,1323,1325,1331 'main':169,226 'manag':1029 'matcher':855,862 'max':381,1279,1524 'maximum':385 'may':1360 'mcp':403,407,461,471,483,560,573,579,583,590,595,866,873,897,908,910,916,923,1481 'mcp-postgres-serv':896 'messag':91,94,172,197,219,276,299,621,704,1048,1073,1081,1087,1113,1304,1328,1550 'message.content':202 'message.session':1078 'message.subtype':224 'message.type':1069 'messages.append':1316 'microsoft':1233 'migrat':1407,1577 'minim':1124,1161,1165 'mistak':965 'mix':914 'mkfs':804 'mode':140,193,261,339,1110,1470 'model':361,370,673,701,737,1505 'modelcontextprotocol/server-github':882 'modul':627 'msg':273,278,296,301,1263,1284,1307,1317,1375,1382 'msg.result':1287 'multi':231 'multi-turn':230 'multiedit':438 'must':940,1433 'n':848 'name':65,212,415,429,562,588,784,844,1451 'need':1188,1466,1553 'next':1322 'none':318,333,349,363,375,384,395,406,414,420,1040,1333 'note':998 'notif':526 'npx':879 'offici':1562 'old':1190 'one':145,1485 'one-shot':144 'op':434 'open':835 'opt':1144 'opt-in':1143 'option':185,253,306,308,571,634,850,871,945,1061,1098,1126,1146,1162,1273,1314,1315,1379,1380 'opus':366,674,738 'order':488,490,502,507,568,582 'os.getenv':886,903 'output':1301 'overhead':1490 'overview':1564 'owasp':666 'packag':78 'parallel':1250 'path':374,1347,1444 'pattern':706,1247 'payments.py':1296 'per':1506 'permiss':192,260,338,343,609,1109,1469 'permissiondecis':809 'permissiondecisionreason':811 'person':994 'pip':79 'pipelin':154 'platform.claude.com':1566,1570,1575,1580,1595 'platform.claude.com/cookbook':1594 'platform.claude.com/docs/en/agent-sdk/migration-guide':1579 'platform.claude.com/docs/en/agent-sdk/overview':1565 'platform.claude.com/docs/en/agent-sdk/python':1574 'platform.claude.com/docs/en/agent-sdk/quickstart':1569 'postgr':889,898,911 'posttoolus':752 'practic':1454 'prefer':1479 'preserv':284 'preset':354,355,1151,1152,1194 'pretoolus':751,808,853 'prevent':1527 'principl':1456 'print':207,213,221,277,300,703,1080,1112,1381,1385,1402 'privileg':1459 'process':466,473,920,1249,1257,1291,1294,1297,1354 'product':52,1521,1531 'project':394,397,952,985,997 'prompt':127,175,346,624,657,687,725,1051,1090,1115,1121,1125,1129,1142,1149,1158,1169,1183,1266,1310,1378,1420,1427 'python':5,18,24,50,64,102,155,242,474,610,710,757,870,944,1030,1117,1134,1252,1303,1356,1364,1572,1582 'queri':34,142,163,174,616,623,763,1036,1050,1089,1265,1309,1377 'question':239 'quick':136 'quickstart':1568 'rais':1363 'read':189,257,435,638,670,698,734,961,1065,1106,1277 'refactor':288 'refer':137,1573 'references/troubleshooting.md':1561 'renam':71 'repo':1584 'request':131 'requir':449,454,644,953 'resourc':1563 'respons':112 'result':115,135,504,519,1288,1320,1321,1332 'resultmessag':113,166,220,1285 'resum':1082 'return':513,546,717,805,817,849,1286 'revers':1327 'review':176,625,648,713,723,1052,1268 'rf':801 'right':1504 'rm':800 'run':895 'runaway':1528 'rust':742 'safeti':1512 'scope':1537 'script':152 'sdk':4,16,28,32,49,62,69,76,84,89,106,161,246,460,478,482,559,614,761,915,933,1016,1034,1159,1175,1368,1411,1448,1480,1583 'search':439,487,489,501,567,581 'secur':629,647,651,661,1271 'security-review':646 'see':323,1560 'send':521,523,535,569,585 'senior':1133 'sent':553 'separ':470 'server':404,408,462,472,484,557,561,574,576,869,874,899,917,924,1482 'session':122,1026,1038,1044,1074,1076,1100,1102,1546 'sessionend':755 'sessionstart':754 'set':42,389,455,949,967,1193,1431,1436,1523 'share':988 'shot':146 'skill':452,453,930,934,955,960,971,978,983 'skill-claude-agent-sdk-python' 'skill.md':1005 'skills/claude.md':400 'sonnet':365,702,745 'sourc':390,456,950,968,1432 'source-waltersumbon' 'special':598,1497 'specialist':652,681,724 'specif':336,1542 'standard':1355 'state':229 'stateless':143 'status':497,512 'stdio':877,891 'stop':753 'str':317,332,347,362,373,412,496,498,528,530,532,715,1260 'strategi':344 'string':371 'structur':270,1300 'subag':416,451,596,1495 'subject':529,543 'subtyp':117 'success/error/cancelled':118 'suit':686 'system':120,345,1070,1114,1120,1128,1141,1148,1157,1182,1419,1549 'systemmessag':119 'tabl':803 'task':150,448,599,641,642,1498,1507 'test':633,676,680,685,691,696 'test-writ':675 'text':206,516,517,549,550 'text/tool':111 'token':885,888 'tool':40,129,133,188,215,256,315,319,327,330,337,427,428,432,458,467,480,486,520,565,566,578,587,591,608,637,669,697,733,773,783,788,824,830,843,846,907,959,982,1002,1019,1024,1064,1105,1276,1462,1488,1518 'toolresultmessag':132 'toolusemessag':128 'top':667,1058 'topic-agent-skills' 'topic-ai-agents' 'topic-anthropic' 'topic-claude-agent-sdk' 'topic-claude-code' 'topic-claude-skills' 'tri':1372 'troubleshoot':1557 'turn':232,382,1280,1525 'two':138 'type':92,95,97,312,353,515,548,876,890,1150,1338 'unchang':1445 'unit':695 'url':902,905 'usag':831,1519 'use':19,33,322,352,653,682,774,825,929,1017,1164,1215,1227,1240,1468,1477,1494,1534 'user':22,126,393,396,951,991 'usermessag':125 'userpromptsubmit':756 'users.py':1299 'utils.py':177 'v0.1.0':77,1122,1173,1412 'vertex':1222,1228 'via':459,989 'vulner':655 'web':444 'webfetch':446 'websearch':445 'without':468,969 'won':972 'work':376,1008 'write':23,258,436,632,693,699,962 'writer':677 'y':881 'your-api-key':1206","prices":[{"id":"e4854d39-2257-4de1-a242-c9ed244a7740","listingId":"ab61fbbf-7788-4cb3-bb65-64a18b095f50","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"WalterSumbon","category":"claude-agent-sdk-skill","install_from":"skills.sh"},"createdAt":"2026-05-18T13:22:18.266Z"}],"sources":[{"listingId":"ab61fbbf-7788-4cb3-bb65-64a18b095f50","source":"github","sourceId":"WalterSumbon/claude-agent-sdk-skill/claude-agent-sdk-python","sourceUrl":"https://github.com/WalterSumbon/claude-agent-sdk-skill/tree/main/skills/claude-agent-sdk-python","isPrimary":false,"firstSeenAt":"2026-05-18T13:22:18.266Z","lastSeenAt":"2026-05-18T19:14:31.467Z"}],"details":{"listingId":"ab61fbbf-7788-4cb3-bb65-64a18b095f50","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"WalterSumbon","slug":"claude-agent-sdk-python","github":{"repo":"WalterSumbon/claude-agent-sdk-skill","stars":6,"topics":["agent-skills","ai-agents","anthropic","claude-agent-sdk","claude-code","claude-skills"],"license":"apache-2.0","html_url":"https://github.com/WalterSumbon/claude-agent-sdk-skill","pushed_at":"2026-02-24T09:27:10Z","description":"Production-ready guides for building AI agents with Claude Agent SDK in Python and TypeScript - complete coverage of official docs plus advanced patterns (subagents, hooks, batch processing)","skill_md_sha":"834ac20df041873d5c2a3306ea82f8edb116db80","skill_md_path":"skills/claude-agent-sdk-python/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/WalterSumbon/claude-agent-sdk-skill/tree/main/skills/claude-agent-sdk-python"},"layout":"multi","source":"github","category":"claude-agent-sdk-skill","frontmatter":{"name":"claude-agent-sdk-python","description":"Expert guidance for building AI agents with the Claude Agent SDK in Python. Use when the user writes Python code with the SDK, imports claude_agent_sdk, uses query(), ClaudeSDKClient, ClaudeAgentOptions, AgentDefinition, creates custom @tool functions, sets up hooks, integrates MCP servers, manages sessions, or debugs SDK issues in Python. Also triggers on: \"claude_agent_sdk\", \"ClaudeAgentOptions\", \"from claude_agent_sdk import\", \"pip install claude-agent-sdk\", \"asyncio.run\", or \"async for message in query\"."},"skills_sh_url":"https://skills.sh/WalterSumbon/claude-agent-sdk-skill/claude-agent-sdk-python"},"updatedAt":"2026-05-18T19:14:31.467Z"}}