Llegados aquí dominas Claude Code como herramienta. Pero Claude Code es solo una de las aplicaciones posibles de un motor más general: el Claude Agent SDK. El SDK te permite construir tus propios agentes — bots de soporte, copilotos internos, workflows automáticos — usando exactamente los mismos primitivos: tool use, prompt caching, sub-agentes, MCP, hooks.
Objetivos
Distinguir API de Anthropic, Agent SDK y Claude Code.
Hacer tu primera llamada con tool use.
Activar prompt caching para reducir costes hasta un 90%.
Configurar streaming para feedback en tiempo real.
Pensar en costes: input/output, caching, modelos.
9.1 Las tres capas
Anthropic ofrece tres niveles de abstracción para usar Claude:
Capa
Qué es
Cuándo
Anthropic API
Endpoint HTTP messages.create. La base.
Control total, integración a medida.
Claude Agent SDK
Wrapper en TS/Python con loop de tool use, caching, MCP.
Construir agentes propios.
Claude Code
App lista para usar (CLI/web/IDE) construida sobre el SDK.
Desarrollo asistido.
Si tu proyecto es "asistente de programación", usa Claude Code. Si es "asistente de soporte para clientes con acceso a nuestro CRM", construye con el SDK. Si es algo de muy bajo nivel y no encaja en SDK, vete a la API directa.
9.2 Primera llamada API
Instalación del SDK oficial:
npm install @anthropic-ai/sdk
# o
pip install anthropic
TypeScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
const response = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages: [
{ role: "user", content: "Resume en 3 frases qué es FUNDAE." }
]
});
console.log(response.content[0].text);
Python
from anthropic import Anthropic
client = Anthropic() # lee ANTHROPIC_API_KEY del entorno
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[
{"role": "user", "content": "Resume en 3 frases qué es FUNDAE."}
]
)
print(response.content[0].text)
Esto es solo "pregunta-respuesta". Para tener un agente real, necesitas tool use.
9.3 Tool use
Tool use es el mecanismo por el cual el modelo decide invocar una función externa. El flujo es:
Tú declaras una lista de tools con su schema.
Mandas el mensaje del usuario.
El modelo responde con: o un mensaje normal, o una solicitud de tool use.
Si es tool use: tú ejecutas la tool, devuelves el resultado.
El modelo continúa con el resultado en contexto.
Repite hasta que el modelo responda al usuario.
Ejemplo: agente que valida NIFs
const tools = [
{
name: "validate_nif",
description: "Valida si un NIF/CIF español es correcto. Devuelve { valid, type }",
input_schema: {
type: "object",
properties: { nif: { type: "string", description: "NIF a validar" } },
required: ["nif"]
}
}
];
async function runAgent(userMessage: string) {
const messages = [{ role: "user", content: userMessage }];
while (true) {
const response = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
tools,
messages
});
if (response.stop_reason === "end_turn") {
return response.content[0].type === "text" ? response.content[0].text : "";
}
if (response.stop_reason === "tool_use") {
const toolUse = response.content.find(c => c.type === "tool_use");
// Añade respuesta del modelo al historial
messages.push({ role: "assistant", content: response.content });
// Ejecuta la tool
const result = await executeToolLocally(toolUse);
// Mete el resultado y continúa
messages.push({
role: "user",
content: [{
type: "tool_result",
tool_use_id: toolUse.id,
content: JSON.stringify(result)
}]
});
}
}
}
Eso es todo. Esa función runAgent es esencialmente lo que Claude Code hace por debajo, multiplicado por muchas tools.
9.4 Prompt caching
El cuello de botella económico de los agentes es el contexto repetido. Cada turno re-envía el system prompt, el historial, los tool results. En agentes con muchas vueltas, el coste por mensaje crece linealmente.
Prompt caching resuelve esto. Marcas un trozo del prompt como cacheable, y los siguientes 5 minutos las vueltas que reusen ese trozo lo leen del caché a 1/10 del coste.
Cómo se usa
const response = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
system: [
{
type: "text",
text: "Eres un asistente de soporte de Qlcube. Sigues estas reglas...",
cache_control: { type: "ephemeral" } // ← marca cacheable
}
],
tools: [...],
messages
});
Se puede cachear:
El system prompt.
La declaración de tools.
Mensajes de la conversación (con un breakpoint en el último cacheable).
Estructura recomendada
System prompt grande con instrucciones (cacheable).
Tools (cacheable).
Mensajes históricos antiguos (cacheable hasta cierto punto).
Últimos mensajes (no cacheables — cambian).
Métrica real: en un agente de soporte con system prompt de 3000 tokens y 50 mensajes de historial, el caching reduce el coste por turno de 0,12 € a 0,015 €. Multiplicado por 1000 conversaciones diarias, son varios cientos de euros al mes.
9.5 Streaming
Para experiencias de chat, mejor ir entregando el texto a medida que se genera, no esperar al final. Streaming activa esto:
const stream = await client.messages.stream({
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages
});
for await (const event of stream) {
if (event.type === "content_block_delta" &&
event.delta.type === "text_delta") {
process.stdout.write(event.delta.text);
}
}
const final = await stream.finalMessage();
El usuario ve la respuesta materializarse en tiempo real, igual que en Claude Code o ChatGPT. Reduce la sensación de latencia incluso si el coste total es el mismo.
9.6 Diseñar tu agente
Reglas que aplican a cualquier agente que construyas con el SDK:
1. System prompt extenso, claro, cacheado
El system prompt es donde defines la personalidad, las reglas duras, los formatos. Mejor 3000 palabras claras que 200 ambiguas. Cachéalo.
2. Tools con schemas estrictos y descripciones para el modelo
El description de cada tool es lo que el modelo lee para decidir cuándo usarla. Es prompt, no documentación de developer. Escribe orientado al modelo: "Use this tool when…", "Returns…", "Do NOT use when…".
3. Loop de tool use con guardas
Limita el máximo de iteraciones (ej. 25). Si el modelo entra en bucle infinito, mata el loop con un mensaje de error.
4. Errores en tool results, no en respuestas
Si una tool falla, devuelve el error como tool_result con is_error: true. El modelo lo interpreta y replanifica. Si lanzas excepción, pierdes el contexto.
5. Métricas desde el día 1
Loguea: latencia, tokens input, tokens output, tokens cache_hit, tokens cache_creation, número de tools por conversación. Sin métricas no puedes optimizar coste.
9.7 Costes — el resumen práctico
Tarifas oficiales (octubre 2026, sujetas a cambios):
Modelo
Input ($/Mtok)
Output ($/Mtok)
Cache write
Cache hit
Opus 4.7
15
75
+25%
−90%
Sonnet 4.6
3
15
+25%
−90%
Haiku 4.5
1
5
+25%
−90%
Reglas de oro para no quemar dinero:
Activa caching. Es el mayor ahorro disponible.
Usa Haiku en sub-agentes mecánicos. Reservar Opus para razonamiento.
Limita max_tokens. Un output de 8K tokens cuesta ~8 veces más que uno de 1K.
No mandes contexto irrelevante. Cada token mandado se paga.
Mide por conversación, no por request. Una conversación de 20 turnos puede costar 0,30 € (con caching) o 3 € (sin).
Rate limits: Cada plan tiene límites de tokens por minuto y requests por minuto. Para producción, configura backoff exponencial en errores 429 y monitoriza saturación. Si tu app espera picos de tráfico, contacta con Anthropic para subir tier.
9.8 Cuándo NO usar el SDK
El SDK es potente pero no siempre es la respuesta:
Tu caso es asistencia de programación. Usa Claude Code, no escribas un wrapper.
Tu caso es chat sin tools. La API directa es suficiente. El SDK aporta poco.
Quieres un copiloto en tu IDE. Hay extensiones oficiales (VS Code, JetBrains).
Tu equipo no tiene capacidad para mantener un agente custom. Considera Claude Projects, Claude Apps o un partner que gestione.
Donde el SDK sí brilla:
Bot de atención al cliente con acceso a vuestro CRM y catálogo.
Asistente interno con conocimiento de vuestros procesos (RGPD, FUNDAE, finance).
Workflow automático con triggers (PR abierto → análisis → comentario).
Procesamiento batch de documentos con razonamiento (clasificar 5000 facturas, extraer datos, validarlos).
Práctica
Ejercicio 9.1 · Hello agent
Crea un script Node o Python que:
Use el SDK con Sonnet 4.6.
Mande "Resume las ventajas de FUNDAE para una empresa de 30 empleados".
Imprima la respuesta.
Verifica que se imprime y observa los tokens consumidos en la respuesta (campo usage).
Ejercicio 9.2 · Agente con una tool
Añade una tool get_today_date que devuelva la fecha actual en formato dd/mm/yyyy. Pregunta al agente: "¿Qué día es hoy?" y verifica que el modelo decide invocar la tool. Imprime el log del tool use.
Ejercicio 9.3 · Caching que se nota
Construye un agente con un system prompt de al menos 2000 tokens (puedes pegar texto de un PDF). Hazle 5 preguntas distintas en la misma sesión. Compara los tokens consumidos:
Sin cache_control.
Con cache_control en el system prompt.
Calcula el ahorro real en €.
Test de comprensión
1. ¿Cuándo usas el Agent SDK en lugar de Claude Code?
Cuando quieres construir asistencia de programación.
Cuando quieres construir un agente para tu propio dominio (soporte, finance, ops).
Cuando no tienes acceso a la API.
Nunca, son lo mismo.
Respuesta correcta: B. Claude Code es la app de programación. Para construir agentes propios usas el SDK con tu domain logic.
2. ¿Qué descuento ofrece prompt caching en cache hits?
10%
50%
90%
100%
Respuesta correcta: C · 90%. Hits de caché cuestan 1/10 del precio normal. La escritura inicial cuesta un poco más (+25%), pero a partir del 2º uso compensa de sobra.
3. ¿Qué stop_reason indica que el modelo quiere ejecutar una tool?
"end_turn"
"tool_use"
"max_tokens"
"stop_sequence"
Respuesta correcta: B · "tool_use". Indica que la respuesta contiene una solicitud de tool. Tienes que ejecutar la tool y devolver el resultado para que continúe.
4. ¿Dónde escribes la descripción que ayuda al modelo a decidir cuándo usar una tool?
En el README.
En el campo description de la tool.
En el system prompt.
En el código de la implementación.
Respuesta correcta: B. El description de cada tool es lo que el modelo lee para decidir si invocarla. Es el prompt más importante de cada tool.
Resumen
Tres capas: API directa < Agent SDK < Claude Code (apps).
Tool use: declarar tools, ejecutar las que el modelo invoca, devolver resultados.
Prompt caching reduce coste hasta 90% en hits — siempre actívalo.
Streaming para sensación de inmediatez en interfaces de chat.
Costes: medir, limitar max_tokens, escoger modelo por tarea.
Último módulo: buenas prácticas de seguridad, RGPD y compliance al desplegar Claude Code en una organización.