---
title: "Agent SDK Quickstart"
aliases: [agent-sdk-quickstart, sdk-quickstart, getting-started-agent-sdk]
tags: [agent-sdk, quickstart, python, typescript, anthropic, claude]
sources: [raw/Quickstart.md]
created: 2026-04-17
updated: 2026-04-17
---

# Agent SDK Quickstart

Build an AI agent that autonomously reads, analyzes, and fixes code — no manual intervention.

## Prerequisites

- **Python 3.10+** or **Node.js 18+**
- Anthropic account with `ANTHROPIC_API_KEY` set

## Minimal Agent (Python)

```python
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage

async def main():
    async for message in query(
        prompt="Review utils.py for bugs that would cause crashes. Fix any issues you find.",
        options=ClaudeAgentOptions(
            allowed_tools=["Read", "Edit", "Glob"],
            permission_mode="acceptEdits",
        ),
    ):
        if isinstance(message, AssistantMessage):
            for block in message.content:
                if hasattr(block, "text"):
                    print(block.text)
                elif hasattr(block, "name"):
                    print(f"Tool: {block.name}")
        elif isinstance(message, ResultMessage):
            print(f"Done: {message.subtype}")

asyncio.run(main())
```

## Three Core Parts

| Part | What it does |
|------|-------------|
| `query()` | Main entry point — creates the agentic loop, returns an async iterator |
| `prompt` | Natural language task — Claude decides which tools to call |
| `options` | Config: `allowed_tools`, `permission_mode`, `system_prompt`, `mcpServers` |

## Tools Reference

| Tools | Agent capability |
|-------|----------------|
| `Read`, `Glob`, `Grep` | Read-only analysis |
| `Read`, `Edit`, `Glob` | Analyze and modify code |
| `Read`, `Edit`, `Bash`, `Glob`, `Grep` | Full automation |
| + `WebSearch` | Add web search capability |

## Permission Modes

| Mode | Behavior | Use case |
|------|----------|----------|
| `acceptEdits` | Auto-approves file edits + common FS commands | Trusted dev workflows |
| `dontAsk` | Denies anything not in `allowedTools` | Locked-down headless agents |
| `auto` *(TS only)* | Model classifier approves/denies each tool call | Autonomous with guardrails |
| `bypassPermissions` | No prompts at all | Sandboxed CI |
| `default` | Requires `canUseTool` callback | Custom approval flows |

## Customization Examples

**Custom system prompt:**
```python
options = ClaudeAgentOptions(
    allowed_tools=["Read", "Edit", "Glob"],
    permission_mode="acceptEdits",
    system_prompt="You are a senior Python developer. Always follow PEP 8.",
)
```

**Add Bash for full automation:**
```python
options = ClaudeAgentOptions(
    allowed_tools=["Read", "Edit", "Glob", "Bash"],
    permission_mode="acceptEdits",
)
# Prompt: "Write unit tests for utils.py, run them, and fix any failures"
```

## Message Stream Types

The `async for` loop yields four message types:
1. **AssistantMessage** — Claude's reasoning text + tool calls
2. **Tool result** — output from each tool execution
3. **ResultMessage** — final outcome (`subtype` = success/error/etc.)
4. System/internal state (filter out for clean output)

See [[wiki/agent-sdk/agent-loop|agent-loop]] for the full message lifecycle.

## Troubleshooting

| Error | Fix |
|-------|-----|
| `API key not found` | Set `ANTHROPIC_API_KEY` env var |
| `thinking.type.enabled not supported` | Upgrade to Agent SDK v0.2.111+ (Opus 4.7 changed to `thinking.type.adaptive`) |

## Key Takeaways

- `query()` is the single entry point — it drives the full agentic loop with `async for`
- `allowed_tools` pre-approves tools; `permission_mode="acceptEdits"` removes interactive prompts
- The loop ends when Claude finishes the task or hits an error — SDK handles orchestration
- Streaming (async for) is for real-time output; collect all messages for background/CI jobs
- `system_prompt` and `mcpServers` in `ClaudeAgentOptions` are the main extension points

## Next Steps

- [[wiki/agent-sdk/configure-permissions|configure-permissions]] — full permission modes + allow/deny rules
- [[wiki/agent-sdk/sdk-hooks|sdk-hooks]] — intercept tool calls with PreToolUse/PostToolUse
- [[wiki/agent-sdk/mcp-integration|mcp-integration]] — connect to databases, browsers, external APIs
- [[wiki/agent-sdk/hosting-production|hosting-production]] — deploy to Docker, cloud, CI/CD
- [[wiki/agent-sdk/user-input-approvals|user-input-approvals]] — `canUseTool` callback for custom approval flows
- [[wiki/agent-sdk/agent-loop|agent-loop]] — understand message lifecycle and context management

---

*Source: raw/Quickstart.md*
