\
CONTEXT/academy
Lección 02 · ≈ 16 min

Tu primer agente

Instalar el SDK, la API key, query() con tools y permisos, y el bucle.

Tu primer agente

Construyes un agente que lee tu código, encuentra bugs y los arregla solo — el artefacto del curso. Sigue los pasos en una carpeta de prueba.

Paso 1 · Instala el SDK

mkdir my-agent && cd my-agent
LenguajeInstalación
TypeScriptnpm install @anthropic-ai/claude-agent-sdk
Python (pip)python3 -m venv .venv && source .venv/bin/activate && pip3 install claude-agent-sdk

El SDK de TypeScript trae empaquetado el binario nativo de Claude Code, así que no necesitas instalarlo aparte.

Paso 2 · La API key

Saca una en la Consola y ponla en un .env:

ANTHROPIC_API_KEY=tu-api-key

(También soporta Bedrock, Vertex y Azure con sus variables.)

Paso 3 · Un fichero con bugs

utils.py, con dos fallos a propósito:

def calculate_average(numbers):
    total = 0
    for num in numbers:
        total += num
    return total / len(numbers)   # crashea con lista vacía

def get_user_name(user):
    return user["name"].upper()   # crashea si user es None

Paso 4 · El agente

agent.py:

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

async def main():
    async for message in query(
        prompt="Revisa utils.py por bugs que provoquen crashes. Arregla lo que encuentres.",
        options=ClaudeAgentOptions(
            allowed_tools=["Read", "Edit", "Glob"],   # pre-aprobadas
            permission_mode="acceptEdits",            # auto-aprueba ediciones
        ),
    ):
        if isinstance(message, AssistantMessage):
            for block in message.content:
                if hasattr(block, "text"):
                    print(block.text)              # razonamiento de Claude
                elif hasattr(block, "name"):
                    print(f"Tool: {block.name}")   # tool que llama
        elif isinstance(message, ResultMessage):
            print(f"Done: {message.subtype}")

asyncio.run(main())

Tres piezas, todas conocidas del plan:

  • query() — arranca el agent loop y devuelve un iterador async.
  • prompt — el objetivo; Claude decide qué tools usar.
  • options — config: allowed_tools pre-aprueba tools (curso de permisos) y permission_mode: "acceptEdits" auto-aprueba ediciones para que corra sin prompts.

Paso 5 · Córrelo

python3 agent.py      # o: npx tsx agent.ts

Mira utils.py: tendrá código defensivo para la lista vacía y el user nulo. El agente, solo: leyó el fichero, identificó los casos límite, y lo editó. Eso es lo que distingue al SDK del Client SDK — Claude ejecuta las tools, no te pide que las implementes tú. Ese agente funcionando es el artefacto del curso.

Tools y permisos: las dos palancas

Como en todo el plan, tú marcas qué se ejecuta sin pedirte permiso:

Tools pre-aprobadasEl agente trabaja sin preguntarte
Read, Glob, Grepsolo analizar (read-only)
Read, Edit, Globanalizar y modificar
+ Bashautomatización completa

Matiz: allowed_tools pre-aprueba esas tools (se saltan el prompt de permiso) — no es una lista blanca que impida las demás. Para prohibir una tool de verdad, usa disallowed_tools.

Y el permission_mode —los mismos modos del curso de permisos— marca cuánta supervisión: acceptEdits (auto-aprueba ediciones), dontAsk (solo lo pre-aprobado, para headless bloqueado), bypassPermissions (todo, solo en sandbox).

Qué llevas hasta aquí

  • Instalas con pip install claude-agent-sdk / npm install @anthropic-ai/claude-agent-sdk y ANTHROPIC_API_KEY.
  • query(prompt, options) arranca el bucle; lo consumes con async for.
  • Controlas el agente con allowed_tools y permission_mode — los permisos del plan, ahora en código.

En la siguiente lección, le das herramientas propias.

Fuente oficial: Agent SDK quickstart · Permissions

¿Quieres llevar la cuenta de las lecciones que has terminado?

Entrar para guardar progreso