4 4
5# Alojamiento del Agent SDK5# Alojamiento del Agent SDK
6 6
7> Implementar el Agent SDK en producción: arquitectura de subprocesos, persistencia de sesiones, escalado, observabilidad y aislamiento multiinquilino para Docker, Kubernetes y proveedores de sandbox.7> Implemente el Agent SDK en producción: arquitectura de subprocesos, persistencia de sesiones, escalado, observabilidad e aislamiento multiinquilino para Docker, Kubernetes y proveedores de sandbox.
8 8
9El Agent SDK genera y supervisa un subproceso `claude` CLI que posee un shell, un directorio de trabajo y archivos de sesión en disco. Alojarlo no es como alojar un contenedor de API sin estado. Cada agente en ejecución es un proceso de larga duración vinculado al estado local, lo que determina cómo asigna recursos, persiste sesiones y escala entre inquilinos.9El Agent SDK genera y supervisa un subproceso `claude` CLI que posee un shell, un directorio de trabajo y archivos de sesión en disco. Alojarlo no es como alojar un contenedor de API sin estado. Cada agente en ejecución es un proceso de larga duración vinculado al estado local, lo que determina cómo asigna recursos, persiste sesiones y escala entre inquilinos.
10 10
11Esta página cubre el autohospedaje en su propia infraestructura: comprenda [el modelo de subprocesos](#the-subprocess-model), [elija un patrón de sesión](#choose-a-session-pattern), [aprovisione el contenedor](#provision-the-container) y [maneje las preocupaciones de producción](#handle-production-concerns) como persistencia, observabilidad, autenticación y aislamiento multiinquilino. Para Dockerfiles e manifiestos de Kubernetes implementables, consulte el [manual de alojamiento](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting).11Esta página cubre el autohospedaje en su propia infraestructura. Para Dockerfiles e manifiestos de Kubernetes implementables, consulte el [hosting cookbook](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting).
12 12
13Si no necesita control de infraestructura, aislamiento personalizado o su propio plano de datos, considere [Managed Agents](https://platform.claude.com/docs/es/managed-agents/overview) en su lugar: una API REST alojada donde Anthropic ejecuta el agente y el sandbox, por lo que su aplicación envía eventos y transmite resultados sin necesidad de operar infraestructura de alojamiento.13Si no necesita control de infraestructura, aislamiento personalizado o su propio plano de datos, considere [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) en su lugar: una API REST alojada donde Anthropic ejecuta el agente y el sandbox, por lo que su aplicación envía eventos y transmite resultados sin necesidad de infraestructura de alojamiento para operar.
14
15<Info>
16 Para endurecimiento de seguridad más allá del sandboxing básico, incluidos controles de red, gestión de credenciales y opciones de aislamiento, consulte [Implementación Segura](/es/agent-sdk/secure-deployment).
17</Info>
18 14
19<h2 id="the-subprocess-model">15<h2 id="the-subprocess-model">
20 El modelo de subproceso16 El modelo de subproceso
22 18
23Cada decisión de alojamiento en esta página se deriva de cómo el SDK ejecuta el agente. Cuando su código llama a `query()`, el SDK genera un proceso CLI `claude` separado y se comunica con él a través de stdio. Ese subproceso posee el shell, el directorio de trabajo y las transcripciones de sesión JSONL en el disco local.19Cada decisión de alojamiento en esta página se deriva de cómo el SDK ejecuta el agente. Cuando su código llama a `query()`, el SDK genera un proceso CLI `claude` separado y se comunica con él a través de stdio. Ese subproceso posee el shell, el directorio de trabajo y las transcripciones de sesión JSONL en el disco local.
24 20
25<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" alt="Flujo de solicitud: cliente a su aplicación, que genera un subproceso CLI de claude sobre stdio dentro del contenedor; el subproceso escribe en el disco local y llama a api.anthropic.com sobre HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />21<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" className="dark:hidden" alt="Flujo de solicitud: cliente a su aplicación, que genera un subproceso CLI de claude sobre stdio dentro del contenedor; el subproceso escribe en el disco local y llama a api.anthropic.com sobre HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />
22
23<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/agent-sdk/hosting-subprocess-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=3fdeff3d7f44b2b67762668acfbb25f5" className="hidden dark:block" alt="Flujo de solicitud: cliente a su aplicación, que genera un subproceso CLI de claude sobre stdio dentro del contenedor; el subproceso escribe en el disco local y llama a api.anthropic.com sobre HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess-dark.svg" />
26 24
27Una sesión de agente se asigna a un subproceso. Ejecutar N sesiones concurrentes significa N subprocesos, cada uno con su propio árbol de procesos y archivo de transcripción. De forma predeterminada, todos heredan el directorio de trabajo de su aplicación, así que pase `cwd` en cada llamada a `query()` cuando las sesiones necesiten sistemas de archivos separados:25Una sesión de agente se asigna a un subproceso. Ejecutar N sesiones concurrentes significa N subprocesos, cada uno con su propio árbol de procesos y archivo de transcripción. De forma predeterminada, todos heredan el directorio de trabajo de su aplicación. Cuando las sesiones necesitan sistemas de archivos separados, pase un `cwd` distinto en las opciones de la llamada `query()` de cada sesión:
28 26
29<CodeGroup>27<CodeGroup>
30 ```typescript TypeScript theme={null}28 ```typescript TypeScript theme={null}
31 query({ prompt, options: { cwd: "/work/session-a" } })29 import { query } from "@anthropic-ai/claude-agent-sdk";
30
31 for await (const message of query({
32 prompt: "Summarize the files in this directory",
33 options: { cwd: "/work/session-a" },
34 })) {
35 console.log(message);
36 }
32 ```37 ```
33 38
34 ```python Python theme={null}39 ```python Python theme={null}
35 query(prompt=prompt, options=ClaudeAgentOptions(cwd="/work/session-a"))40 import asyncio
41
42 from claude_agent_sdk import ClaudeAgentOptions, query
43
44
45 async def main():
46 async for message in query(
47 prompt="Summarize the files in this directory",
48 options=ClaudeAgentOptions(cwd="/work/session-a"),
49 ):
50 print(message)
51
52
53 asyncio.run(main())
36 ```54 ```
37</CodeGroup>55</CodeGroup>
38 56
57Los ejemplos de TypeScript en esta página utilizan `await` de nivel superior, así que guárdelos como archivos `.mts` o establezca `"type": "module"` en `package.json`.
58
39<h3 id="state-that-lives-on-local-disk">59<h3 id="state-that-lives-on-local-disk">
40 Estado que vive en el disco local60 Estado que vive en el disco local
41</h3>61</h3>
42 62
43Tres tipos de estado del agente viven en el sistema de archivos del contenedor de forma predeterminada. Ninguno de ellos sobrevive a un reinicio del contenedor, una reducción de escala o un movimiento a un nodo diferente.63Tres tipos de estado de agente viven en el sistema de archivos del contenedor de forma predeterminada. Ninguno de ellos sobrevive a un reinicio del contenedor, una reducción de escala o un movimiento a un nodo diferente.
44 64
45| Estado | Ubicación predeterminada |65| Estado | Ubicación predeterminada |
46| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |66| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
47| Transcripciones de sesión | `~/.claude/projects/`, o el directorio `projects/` bajo `CLAUDE_CONFIG_DIR` si está configurado |67| Transcripciones de sesión | `~/.claude/projects/`, o el directorio `projects/` bajo `CLAUDE_CONFIG_DIR` si está establecido |
48| Archivos de memoria `CLAUDE.md` | `~/.claude/CLAUDE.md` para el nivel de usuario y el directorio de trabajo de la sesión para el nivel de proyecto |68| Archivos de memoria `CLAUDE.md` | `~/.claude/CLAUDE.md` para el nivel de usuario y el directorio de trabajo de la sesión para el nivel de proyecto |
49| Artefactos del directorio de trabajo | El directorio de trabajo de la sesión |69| Artefactos del directorio de trabajo | El directorio de trabajo de la sesión |
50 70
51Para persistir transcripciones entre hosts, configure un adaptador [`SessionStore`](/es/agent-sdk/session-storage). Los archivos de memoria y otros artefactos del directorio de trabajo necesitan su propia estrategia de almacenamiento, como un volumen montado o una sincronización de almacén de objetos.71Para persistir transcripciones entre hosts, configure un adaptador [`SessionStore`](/docs/es/agent-sdk/session-storage). Los archivos de memoria y otros artefactos del directorio de trabajo necesitan su propia estrategia de almacenamiento, como un volumen montado o una sincronización de almacén de objetos.
52 72
53Para saber cómo funcionan las sesiones, la reanudación y la bifurcación a nivel de API, consulte [Sessions](/es/agent-sdk/sessions).73Para saber cómo funcionan las sesiones, la reanudación y la bifurcación a nivel de API, consulte [Sesiones](/docs/es/agent-sdk/sessions).
54 74
55<h2 id="choose-a-session-pattern">75<h2 id="choose-a-session-pattern">
56 Elegir un patrón de sesión76 Elegir un patrón de sesión
62 Sesiones efímeras82 Sesiones efímeras
63</h3>83</h3>
64 84
65Cree un contenedor para cada tarea del usuario y destrúyalo cuando la tarea se complete. Lo mejor para tareas puntuales. El usuario aún puede interactuar con la IA mientras se completa la tarea, pero una vez completada, el contenedor se destruye.85Cree un contenedor para cada tarea del usuario y destrúyalo cuando se complete la tarea. Lo mejor para tareas puntuales. El usuario aún puede interactuar con la IA mientras se completa la tarea, pero una vez completada, el contenedor se destruye.
66 86
67Los ejemplos de cargas de trabajo incluyen investigación y corrección de errores, extracción de facturas y recibos, traducción de documentos y transformación de medios.87Los ejemplos de cargas de trabajo incluyen investigación y corrección de errores, extracción de facturas y recibos, traducción de documentos y transformación de medios.
68 88
69El contenedor ejecuta un punto de entrada de una sola ejecución que llama al SDK y sale. El ejemplo a continuación muestra una versión mínima de TypeScript. Guárdelo como `entrypoint.mts` o establezca `"type": "module"` en `package.json` para que `await` de nivel superior esté disponible.89El contenedor ejecuta un punto de entrada de una sola ejecución que lee la tarea de la variable de entorno `TASK_PROMPT`, llama al SDK y sale.
70 90
71```typescript theme={null}91<CodeGroup>
72import { query } from "@anthropic-ai/claude-agent-sdk";92 ```typescript TypeScript theme={null}
93 import { query } from "@anthropic-ai/claude-agent-sdk";
73 94
74const prompt = process.env.TASK_PROMPT!;95 const prompt = process.env.TASK_PROMPT!;
75for await (const message of query({ prompt, options: { maxTurns: 20 } })) {96 for await (const message of query({ prompt, options: { maxTurns: 20 } })) {
76 console.log(message);97 console.log(message);
77}98 }
78```99 ```
100
101 ```python Python theme={null}
102 import asyncio
103 import os
104
105 from claude_agent_sdk import ClaudeAgentOptions, query
106
107
108 async def main():
109 async for message in query(
110 prompt=os.environ["TASK_PROMPT"],
111 options=ClaudeAgentOptions(max_turns=20),
112 ):
113 print(message)
114
115
116 asyncio.run(main())
117 ```
118</CodeGroup>
119
120El script imprime cada mensaje a medida que llega, incluido un mensaje de resultado cuyo `subtype` es `success` cuando la tarea se completa dentro del límite de turnos. Si la tarea alcanza el límite de 20 turnos en su lugar, el `subtype` del mensaje de resultado es `error_max_turns` y la llamada `query()` genera un error después de cederlo, así que envuelva el bucle en un bloque try si el contenedor necesita salir limpiamente. Consulte [Manejar el resultado](/docs/es/agent-sdk/agent-loop#handle-the-result) para los subtipos de error.
79 121
80<h3 id="long-running-sessions">122<h3 id="long-running-sessions">
81 Sesiones de larga duración123 Sesiones de larga duración
82</h3>124</h3>
83 125
84Ejecute instancias de contenedor persistentes, a menudo alojando múltiples procesos del SDK por contenedor, para servir trabajo continuo. Lo mejor para agentes que toman acciones autónomas, sirven contenido o manejan flujos de mensajes de alto volumen.126Ejecute instancias de contenedor persistentes, a menudo alojando múltiples procesos SDK por contenedor, para servir trabajo continuo. Lo mejor para agentes que toman acciones autónomas, sirven contenido o manejan flujos de mensajes de alto volumen.
85 127
86Los ejemplos de cargas de trabajo incluyen un agente de correo electrónico que clasifica y responde al correo entrante, un constructor de sitios que aloja un sitio editable por usuario a través de puertos de contenedor, y un chatbot que maneja tráfico continuo desde una plataforma como Slack.128Los ejemplos de cargas de trabajo incluyen un agente de correo electrónico que clasifica y responde al correo entrante, un constructor de sitios que aloja un sitio editable por usuario a través de puertos de contenedor, y un chatbot que maneja tráfico continuo desde una plataforma como Slack.
87 129
88El contenedor expone un punto final HTTP o WebSocket y asigna cada sesión activa a una consulta de larga duración y el subproceso detrás de ella. En TypeScript, use [`streamInput()`](/es/agent-sdk/typescript#query-object) para agregar turnos a una sesión activa y [`startup()`](/es/agent-sdk/typescript#startup) para precalentar subprocesos antes del tráfico entrante. En Python, use [`ClaudeSDKClient`](/es/agent-sdk/python#claudesdkclient) para mantener una sesión abierta entre turnos. Dimensione el contenedor para que pueda contener el número máximo de sesiones concurrentes en memoria.130El contenedor expone un punto final HTTP o WebSocket y asigna cada sesión activa a una consulta de larga duración y el subproceso detrás de ella. En TypeScript, use [`streamInput()`](/docs/es/agent-sdk/typescript#query-object) para agregar turnos a una sesión activa y [`startup()`](/docs/es/agent-sdk/typescript#startup) para precalentar subprocesos antes del tráfico entrante. En Python, use [`ClaudeSDKClient`](/docs/es/agent-sdk/python#claudesdkclient) para mantener una sesión abierta entre turnos. Dimensione el contenedor para que pueda contener el número máximo de sesiones concurrentes en memoria.
89 131
90<h3 id="hybrid-sessions">132<h3 id="hybrid-sessions">
91 Sesiones híbridas133 Sesiones híbridas
92</h3>134</h3>
93 135
94Contenedores efímeros que se hidratan desde un [`SessionStore`](/es/agent-sdk/session-storage) al inicio y persisten actualizaciones de vuelta. Lo mejor para sesiones que abarcan muchas interacciones pero permanecen inactivas entre ellas. El contenedor se apaga durante períodos de inactividad y se reinicia cuando el usuario regresa.136Contenedores efímeros que se hidratan desde un [`SessionStore`](/docs/es/agent-sdk/session-storage) al inicio y persisten actualizaciones de vuelta. Lo mejor para sesiones que abarcan muchas interacciones pero permanecen inactivas entre ellas. El contenedor se apaga durante períodos de inactividad y se reinicia cuando el usuario regresa.
95 137
96Los ejemplos de cargas de trabajo incluyen un gestor de proyectos personal con verificaciones intermitentes, investigación profunda que se pausa y reanuda durante horas, y un agente de soporte al cliente que carga el historial de tickets entre interacciones.138Los ejemplos de cargas de trabajo incluyen un gestor de proyectos personal con check-ins intermitentes, investigación profunda que se pausa y reanuda durante horas, y un agente de soporte al cliente que carga el historial de tickets entre interacciones.
97 139
98Ajuste el tiempo de espera de inactividad de su proveedor a la frecuencia con la que espera que los usuarios regresen. Apagar un contenedor sin un `SessionStore` configurado pierde la transcripción con él, por lo que el almacén es obligatorio para este patrón, no opcional.140Ajuste el tiempo de espera de inactividad de su proveedor a la frecuencia con la que espera que los usuarios regresen. Apagar un contenedor sin un `SessionStore` configurado pierde la transcripción con él, por lo que el almacén es obligatorio para este patrón, no opcional.
99 141
116 ```158 ```
117 159
118 ```python Python theme={null}160 ```python Python theme={null}
119 from claude_agent_sdk import query, ClaudeAgentOptions161 from claude_agent_sdk import query, ClaudeAgentOptions, SessionStore
162 import asyncio
163
164 user_input: str = ...
165 session_id: str = ... # looked up from your database by user
166 session_store: SessionStore = ... # S3, Redis, Postgres, or your own adapter
120 167
168
169 async def main():
121 async for message in query(170 async for message in query(
122 prompt=user_input,171 prompt=user_input,
123 options=ClaudeAgentOptions(172 options=ClaudeAgentOptions(
124 resume=session_id, # looked up from your database by user173 resume=session_id,
125 session_store=session_store, # S3, Redis, Postgres, or your own adapter174 session_store=session_store,
126 ),175 ),
127 ):176 ):
128 ...177 ...
178
179
180 asyncio.run(main())
129 ```181 ```
130</CodeGroup>182</CodeGroup>
131 183
132Consulte [Almacenamiento de sesiones](/es/agent-sdk/session-storage) para la interfaz completa de `SessionStore` y adaptadores de referencia.
133
134<h3 id="multi-agent-container">184<h3 id="multi-agent-container">
135 Contenedor multiagente185 Contenedor multiagente
136</h3>186</h3>
137 187
138Ejecute múltiples subprocesos del SDK dentro de un contenedor. Lo mejor para agentes que deben colaborar estrechamente, por ejemplo simulaciones multiagente donde los agentes interactúan entre sí en un entorno compartido.188Ejecute múltiples subprocesos SDK dentro de un contenedor. Lo mejor para agentes que deben colaborar estrechamente, por ejemplo simulaciones multiagente donde los agentes interactúan entre sí en un entorno compartido.
139 189
140Dé a cada agente su propio directorio de trabajo para que no sobrescriban los archivos de los demás, e aisle la carga de configuración para que los archivos `CLAUDE.md` por agente no se filtren entre agentes. Consulte [Aislamiento multiinquilino](#multi-tenant-isolation) para las opciones específicas.190Dé a cada agente su propio directorio de trabajo para que no sobrescriban los archivos de los demás, y aisle la carga de configuración para que los archivos `CLAUDE.md` por agente no se filtren entre agentes. Consulte [Aislamiento multiinquilino](#multi-tenant-isolation) para las opciones específicas.
141 191
142<h2 id="provision-the-container">192<h2 id="provision-the-container">
143 Aprovisionar el contenedor193 Aprovisionar el contenedor
144</h2>194</h2>
145 195
146<h3 id="container-based-sandboxing">196<h3 id="container-based-sandboxing">
147 Sandboxing basado en contenedor197 Sandboxing basado en contenedores
148</h3>198</h3>
149 199
150Ejecute el SDK dentro de un contenedor aislado para aislamiento de procesos, límites de recursos, control de red y un sistema de archivos efímero. Varios proveedores se especializan en entornos de contenedor aislado que se ajustan al modelo del Agent SDK.200Ejecute el SDK dentro de un contenedor sandboxed para aislamiento de procesos, límites de recursos, control de red y un sistema de archivos efímero.
151 201
152Preguntas a responder al elegir un proveedor:202Preguntas a responder al elegir un proveedor:
153 203
154* **Quién ejecuta el sandbox**: un proveedor de sandbox-as-a-service opera la infraestructura para usted, mientras que las opciones autohospedadas le proporcionan software para ejecutar en su propio servidor.204* **Quién ejecuta el sandbox**: un proveedor de sandbox-as-a-service opera la infraestructura para usted, mientras que las opciones autohospedadas le proporcionan software para ejecutar en su propio servidor.
155* **Latencia de inicio en frío**: cuánto tiempo desde "crear un sandbox" hasta "listo para aceptar la primera solicitud". Los patrones efímeros necesitan inicios subsegundos. Los patrones de larga duración toleran más.205* **Latencia de arranque en frío**: cuánto tiempo transcurre desde "crear un sandbox" hasta "listo para aceptar la primera solicitud". Los patrones efímeros necesitan inicios subsegundos. Los patrones de larga duración toleran más.
156* **Almacenamiento persistente**: si el proveedor ofrece volúmenes duraderos o solo disco efímero. El patrón híbrido necesita almacenamiento duradero en algún lugar, ya sea en el sandbox o junto a él.206* **Almacenamiento persistente**: si el proveedor ofrece volúmenes duraderos o solo disco efímero. El patrón híbrido necesita almacenamiento duradero en algún lugar, ya sea en el sandbox o junto a él.
157* **Modelo de precios**: facturación por segundo, por solicitud u horaria plana. La facturación por segundo se adapta bien a cargas de trabajo efímeras intermitentes. La facturación horaria se adapta a sesiones de larga duración.207* **Modelo de precios**: facturación por segundo, por solicitud u horaria plana. Los precios por segundo se adaptan bien a cargas de trabajo efímeras intermitentes. Los precios por hora se adaptan a sesiones de larga duración.
158* **Redes**: soporte para reglas de salida personalizadas, proxies salientes y emparejamiento privado de VPC para entornos regulados.208* **Redes**: soporte para reglas de salida personalizadas, proxies de salida y emparejamiento privado de VPC para entornos regulados.
159
160Proveedores a evaluar:
161 209
162* [Modal Sandbox](https://modal.com/docs/guide/sandbox), con una [implementación de demostración](https://modal.com/docs/examples/claude-slack-gif-creator)210Para opciones autohospedadas como Docker, gVisor y Firecracker, y configuración de aislamiento detallada, consulte [Isolation Technologies](/docs/es/agent-sdk/secure-deployment#isolation-technologies).
163* [Cloudflare Sandboxes](https://github.com/cloudflare/sandbox-sdk)
164* [Daytona](https://www.daytona.io/)
165* [E2B](https://e2b.dev/)
166* [Fly Machines](https://fly.io/docs/machines/)
167* [Vercel Sandbox](https://vercel.com/docs/functions/sandbox)
168
169Para opciones autohospedadas como Docker, gVisor y Firecracker, y configuración de aislamiento detallada, consulte [Tecnologías de Aislamiento](/es/agent-sdk/secure-deployment#isolation-technologies).
170 211
171<h3 id="runtime-dependencies">212<h3 id="runtime-dependencies">
172 Dependencias de tiempo de ejecución213 Dependencias de tiempo de ejecución
173</h3>214</h3>
174 215
175El contenedor necesita solo el tiempo de ejecución del idioma de su SDK:216El contenedor necesita el tiempo de ejecución del lenguaje de su SDK:
176 217
177* Python 3.10+ para el SDK de Python, o Node.js 18+ para el SDK de TypeScript218* Python 3.10+ para el SDK de Python, o Node.js 18+ para el SDK de TypeScript
178* Ambos paquetes SDK incluyen un binario nativo de Claude Code para la plataforma del host, por lo que no se necesita una instalación separada de Claude Code o Node.js para la CLI generada219* Tanto los SDK de TypeScript como de Python incluyen un binario nativo de Claude Code para la mayoría de las instalaciones, y la CLI generada no necesita una instalación separada de Node.js. Consulte la [nota de instalación del quickstart](/docs/es/agent-sdk/quickstart) para las instalaciones que necesitan una instalación separada de Claude Code nativo.
179 220
180El binario incluido está fijado a la versión del paquete SDK, por lo que actualizar el SDK es cómo actualiza la CLI. El SDK sigue semver: tome versiones de parche continuamente y revise el changelog de [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) o [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) antes de tomar una versión menor.221El binario incluido está fijado a la versión del paquete SDK, por lo que actualizar el SDK es cómo actualiza la CLI. El SDK sigue semver: tome versiones de parche continuamente y revise el changelog de [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) o [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) antes de tomar una versión menor.
181 222
183 Recursos224 Recursos
184</h3>225</h3>
185 226
1861 GiB de RAM, 5 GiB de disco y 1 CPU por agente es un punto de partida razonable para una instancia recién iniciada. El uso de memoria crece con la duración de la sesión y la actividad de herramientas, por lo que dimensione para las duraciones de sesión y concurrencia que realmente necesita en lugar de la línea de base inactiva. Consulte [Escalado y concurrencia](#scaling-and-concurrency) para saber cómo calcular agentes por host.2271 GiB de RAM, 5 GiB de disco y 1 CPU por agente es un punto de partida razonable para una instancia recién iniciada. El uso de memoria crece con la duración de la sesión y la actividad de herramientas, por lo que dimensione para las duraciones de sesión y concurrencia que realmente necesita en lugar de la línea de base inactiva. Consulte [Scaling and concurrency](#scaling-and-concurrency) para saber cómo calcular agentes por host.
187 228
188<h3 id="network">229<h3 id="network">
189 Red230 Red
190</h3>231</h3>
191 232
192El SDK necesita HTTPS saliente a `api.anthropic.com`, o al punto de conexión regional de su proveedor cuando se ejecuta en Amazon Bedrock o Google Cloud's Agent Platform. Si sus agentes utilizan [servidores MCP](/es/agent-sdk/mcp) o herramientas externas, también necesitan acceso saliente a esos puntos de conexión. Para producción, enrute el tráfico saliente a través de un proxy de salida que aplique listas de permitidos de dominio, inyecte credenciales y registre solicitudes. Consulte [Implementación Segura](/es/agent-sdk/secure-deployment) para el patrón completo.233El SDK necesita HTTPS de salida a `api.anthropic.com`, o al punto de conexión regional de su proveedor cuando se ejecuta en Amazon Bedrock o en la plataforma de agentes de Google Cloud. Si sus agentes utilizan [MCP servers](/docs/es/agent-sdk/mcp) o herramientas externas, también necesitan acceso de salida a esos puntos de conexión. Para producción, enrute el tráfico de salida a través de un proxy de salida que aplique listas de permitidos de dominio, inyecte credenciales y registre solicitudes. Consulte [Secure Deployment](/docs/es/agent-sdk/secure-deployment) para el patrón completo.
193 234
194Para tráfico entrante, exponga un puerto HTTP o WebSocket en el contenedor. Su aplicación maneja solicitudes de cliente en ese puerto y llama al SDK internamente; el subproceso en sí no escucha en la red.235Para el tráfico de entrada, exponga un puerto HTTP o WebSocket en el contenedor. Su aplicación maneja las solicitudes del cliente en ese puerto y llama al SDK internamente; el subproceso en sí no escucha en la red.
195 236
196<h2 id="handle-production-concerns">237<h2 id="handle-production-concerns">
197 Gestionar preocupaciones de producción238 Gestionar preocupaciones de producción
198</h2>239</h2>
199 240
200Trabaje a través de estas decisiones antes de desplegar un agente autohospedado.241Trabaje a través de estas decisiones antes de implementar un agente autohospedado.
201 242
202<h3 id="session-and-state-persistence">243<h3 id="session-and-state-persistence">
203 Persistencia de sesión y estado244 Persistencia de sesión y estado
204</h3>245</h3>
205 246
206El disco local predeterminado se pierde al reiniciar, reducir escala o mover a un nodo diferente. Para cualquier sesión que un usuario espere reanudar, refleje la transcripción en almacenamiento duradero con un adaptador [`SessionStore`](/es/agent-sdk/session-storage). Consulte [Implementaciones de referencia](/es/agent-sdk/session-storage#reference-implementations) para adaptadores de S3, Redis y Postgres y un conjunto de conformidad para el suyo.247El disco local predeterminado se pierde al reiniciar, reducir escala o mover a un nodo diferente. Para cualquier sesión que un usuario espere reanudar, refleje la transcripción en almacenamiento duradero con un adaptador [`SessionStore`](/docs/es/agent-sdk/session-storage). Consulte [Implementaciones de referencia](/docs/es/agent-sdk/session-storage#reference-implementations) para adaptadores de S3, Redis y Postgres y un conjunto de conformidad para el suyo.
207 248
208Tres cosas que debe saber sobre cómo se comporta `SessionStore`:249Tres cosas que debe saber sobre cómo se comporta `SessionStore`:
209 250
210* **Solo transcripciones**: `SessionStore` refleja transcripciones, no archivos de memoria `CLAUDE.md` u otros artefactos del directorio de trabajo. Monte un volumen compartido o sincronice esos por separado.251* **Solo transcripciones**: `SessionStore` refleja transcripciones, no archivos de memoria `CLAUDE.md` u otros artefactos del directorio de trabajo. Monte un volumen compartido o sincronice esos por separado.
211* **Reflejo, no reemplazo**: el subproceso escribe en el disco local primero, y el almacén recibe una copia de cada lote. Las escrituras locales siguen siendo autoritativas.252* **Reflejo, no reemplazo**: el subproceso escribe en el disco local primero, y el SDK reenvía una copia de cada lote al almacén. La transcripción local de una sesión nueva sobrevive a la ejecución; una ejecución reanudada desde el almacén elimina su copia local al final, por lo que el almacén contiene la única copia durable. Consulte [Arquitectura de escritura dual](/docs/es/agent-sdk/session-storage#dual-write-architecture).
212* **Mensajes `mirror_error`**: un lote que el almacén rechaza se envía hasta tres veces en total, con un retroceso corto antes de cada reintento; una llamada que agota el tiempo de espera no se reintenta. Si el lote aún falla, el SDK lo descarta, emite un mensaje `{ type: "system", subtype: "mirror_error" }` y continúa la consulta. Alerte sobre estos si la durabilidad del almacén es importante.253* **Mensajes `mirror_error`**: cuando el SDK no puede entregar un lote al almacén, descarta el lote, emite un mensaje `{ type: "system", subtype: "mirror_error" }` y continúa la consulta. Alerte sobre estos si la durabilidad del almacén es importante. Consulte [Las escrituras de reflejo son de mejor esfuerzo](/docs/es/agent-sdk/session-storage#mirror-writes-are-best-effort) para el comportamiento de reintentos y tiempos de espera.
213 254
214<h3 id="observability">255<h3 id="observability">
215 Observabilidad256 Observabilidad
216</h3>257</h3>
217 258
218Los agentes del SDK del agente son procesos de larga duración que generan llamadas de herramientas en muchos viajes de ida y vuelta de API. Sin telemetría, no puede ver qué herramientas se ejecutaron, cuánto tiempo tardaron o dónde se estancó una sesión.259Los agentes del Agent SDK son procesos de larga duración que generan llamadas de herramientas en muchos viajes de ida y vuelta de API. Sin telemetría, no puede ver qué herramientas se ejecutaron, cuánto tiempo tardaron o dónde se estancó una sesión.
219 260
220El SDK hereda la configuración de OpenTelemetry del entorno. Establezca las variables de entorno OTEL a nivel de contenedor u orquestador para que cada llamada `query()` exporte tramos, métricas y eventos de registro a su recopilador. El ejemplo a continuación habilita la exportación OTLP para las tres señales. `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` es necesario solo para trazas; omítalo si exporta solo métricas y registros.261El SDK hereda la configuración de OpenTelemetry del entorno. Establezca las variables de entorno OTEL a nivel de contenedor u orquestador para que cada llamada `query()` exporte tramos, métricas y eventos de registro a su recopilador. El ejemplo a continuación habilita la exportación OTLP para las tres señales. `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` es necesario solo para trazas; omítalo si exporta solo métricas y registros.
221 262
222```bash title=".env' theme={null}263```bash title=".env" theme={null}
223CLAUDE_CODE_ENABLE_TELEMETRY=1264CLAUDE_CODE_ENABLE_TELEMETRY=1
224CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1265CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1
225OTEL_TRACES_EXPORTER=otlp266OTEL_TRACES_EXPORTER=otlp
229OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318270OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318
230```271```
231 272
232El texto del mensaje y las entradas de herramientas no se incluyen en las exportaciones de forma predeterminada. Consulte [Controlar datos sensibles en exportaciones](/es/agent-sdk/observability#control-sensitive-data-in-exports) para las banderas de inclusión voluntaria, y [Observabilidad](/es/agent-sdk/observability) para el catálogo de señales completo.273El texto del mensaje y las entradas de herramientas no se incluyen en las exportaciones de forma predeterminada. Consulte [Controlar datos sensibles en exportaciones](/docs/es/agent-sdk/observability#control-sensitive-data-in-exports) para las banderas de inclusión, y [Observabilidad](/docs/es/agent-sdk/observability) para el catálogo de señales completo.
233 274
234<h3 id="auth-and-secrets">275<h3 id="auth-and-secrets">
235 Autenticación y secretos276 Autenticación y secretos
237 278
238Tres preocupaciones de autenticación importan en el momento del alojamiento:279Tres preocupaciones de autenticación importan en el momento del alojamiento:
239 280
240* **API de Anthropic**: el subproceso lee `ANTHROPIC_API_KEY` de su entorno. Suministrelo desde su gestor de secretos, o establezca `ANTHROPIC_BASE_URL` para enrutar llamadas de modelo a través de un proxy que inyecte la clave fuera del contenedor. Consulte [Gestión de credenciales](/es/agent-sdk/secure-deployment#credential-management) para el patrón de proxy y la [descripción general del SDK](/es/agent-sdk/overview#get-started) para los métodos de autenticación admitidos.281* **API de Anthropic**: el subproceso lee `ANTHROPIC_API_KEY` de su entorno. Suministrelo desde su gestor de secretos, o establezca `ANTHROPIC_BASE_URL` para enrutar llamadas de modelo a través de un proxy que inyecte la clave fuera del contenedor. Consulte [Gestión de credenciales](/docs/es/agent-sdk/secure-deployment#credential-management) para el patrón de proxy y [Configuración en el inicio rápido del SDK](/docs/es/agent-sdk/quickstart#setup) para los métodos de autenticación admitidos.
241* **Entrada**: coloque la autenticación en una puerta de enlace frente al contenedor del agente. El agente debe recibir solicitudes preauthenticadas y no debe ser el componente que valide los tokens del usuario.282* **Entrada**: coloque la autenticación en una puerta de enlace frente al contenedor del agente. El agente debe recibir solicitudes preauthenticadas y no debe ser el componente que valide los tokens de usuario.
242* **Herramientas salientes**: mantenga las credenciales de herramientas fuera del entorno del agente. Enrute las llamadas salientes a través de un proxy que inyecte claves API después de que la solicitud salga del contenedor. El agente realiza la llamada; el proxy añade la credencial.283* **Herramientas salientes**: mantenga las credenciales de herramientas fuera del entorno del agente. Enrute las llamadas salientes a través de un proxy que inyecte claves API después de que la solicitud salga del contenedor. El agente realiza la llamada; el proxy añade la credencial.
243 284
244<h3 id="scaling-and-concurrency">285<h3 id="scaling-and-concurrency">
257 298
258El enrutamiento de escalado horizontal depende de su patrón. Para sesiones de larga duración, donde los contenedores contienen muchas sesiones, ejecute un grupo de contenedores detrás de un equilibrador de carga y fije cada sesión a un contenedor usando hash consistente en `sessionId`. Una sesión fijada sigue golpeando el mismo contenedor y, por lo tanto, el mismo subproceso en ejecución, hasta que se desaloja o el contenedor se reinicia.299El enrutamiento de escalado horizontal depende de su patrón. Para sesiones de larga duración, donde los contenedores contienen muchas sesiones, ejecute un grupo de contenedores detrás de un equilibrador de carga y fije cada sesión a un contenedor usando hash consistente en `sessionId`. Una sesión fijada sigue golpeando el mismo contenedor y, por lo tanto, el mismo subproceso en ejecución, hasta que se desaloja o el contenedor se reinicia.
259 300
260Los grandes abanicos de [subagentes](/es/agent-sdk/subagents) concurrentes desde una única sesión pueden alcanzar límites de velocidad de API. Divida el trabajo en lotes más pequeños en lugar de emitir un envío amplio.
261
262<h3 id="cost">301<h3 id="cost">
263 Costo302 Costo
264</h3>303</h3>
265 304
266El costo de tokens de Anthropic típicamente domina el costo de infraestructura del contenedor por un orden de magnitud o más. Un contenedor mínimamente aprovisionado se ejecuta aproximadamente a \$0.05 por hora, mientras que una única sesión de agente largo puede gastar dólares en tokens. Consulte [Seguimiento de costos](/es/agent-sdk/cost-tracking) para contabilidad de tokens por sesión.305El costo de tokens de Anthropic típicamente domina el costo de infraestructura del contenedor por un orden de magnitud o más. Un contenedor mínimamente aprovisionado cuesta aproximadamente \$0.05 por hora, mientras que una única sesión de agente largo puede gastar dólares en tokens. Consulte [Seguimiento de costos](/docs/es/agent-sdk/cost-tracking) para contabilidad de tokens por sesión.
267 306
268<h3 id="multi-tenant-isolation">307<h3 id="multi-tenant-isolation">
269 Aislamiento multiinquilino308 Aislamiento multiinquilino
270</h3>309</h3>
271 310
272El comportamiento predeterminado del SDK lee configuraciones y archivos de memoria `CLAUDE.md` del sistema de archivos. En un contenedor compartido que sirve a múltiples inquilinos, esos archivos pueden filtrar el contexto de un inquilino a la sesión de otro inquilino.311El comportamiento predeterminado del SDK lee configuración y archivos de memoria `CLAUDE.md` del sistema de archivos. En un contenedor compartido que sirve a múltiples inquilinos, esos archivos pueden filtrar el contexto de un inquilino a la sesión de otro inquilino.
273 312
274Para aislar inquilinos dentro de un contenedor compartido:313Para aislar inquilinos dentro de un contenedor compartido:
275 314
276* Pase `settingSources: []` en TypeScript o `setting_sources=[]` en Python para que no se cargue ninguna configuración del sistema de archivos.315* Pase `settingSources: []` en TypeScript o `setting_sources=[]` en Python para omitir la configuración de usuario, proyecto y local.
277* Establezca `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` en `env`. [Auto memory](/es/memory#auto-memory) en `~/.claude/projects/<project>/memory/` se carga en el mensaje del sistema independientemente de `settingSources`. Consulte [Lo que settingSources no controla](/es/agent-sdk/claude-code-features#what-settingsources-does-not-control) para las otras entradas que se cargan incondicionalmente.316* Establezca `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` en `env`. [Auto memory](/docs/es/memory#auto-memory) en `~/.claude/projects/<project>/memory/` se carga en el mensaje del sistema independientemente de `settingSources`. Consulte [Lo que settingSources no controla](/docs/es/agent-sdk/claude-code-features#what-settingsources-does-not-control) para las otras entradas que se cargan incondicionalmente.
278* Apunte `CLAUDE_CONFIG_DIR` a un directorio por inquilino para que los inquilinos no compartan la configuración global `~/.claude.json`.317* Apunte `CLAUDE_CONFIG_DIR` a un directorio por inquilino para que los inquilinos no compartan la configuración global `~/.claude.json`. Cuando cada directorio de configuración sirve un directorio de trabajo y no comparte un [`SessionStore`](/docs/es/agent-sdk/session-storage) entre inquilinos, también puede establecer [`CLAUDE_CODE_PROJECT_DIR_NAME`](/docs/es/sessions#name-the-project-directory-yourself) en `env` para mantener las rutas de transcripción bajo él cortas. Requiere Agent SDK de TypeScript v0.3.234 o posterior, o Agent SDK de Python v0.2.140 o posterior.
279* Use un directorio de trabajo por inquilino. Pase `cwd` explícitamente en cada llamada `query()`.318* Use un directorio de trabajo por inquilino. Pase `cwd` explícitamente en cada llamada `query()`.
280* Aplique reglas de salida por inquilino en su proxy, como IPs salientes distintas, credenciales o listas de permitidos de dominio, para que un inquilino comprometido no pueda exfiltrar datos a través de la política de salida de otro inquilino.319* Aplique reglas de salida por inquilino en su proxy, como IPs salientes distintas, credenciales o listas de permitidos de dominio, para que un inquilino comprometido no pueda exfiltrar datos a través de la política saliente de otro inquilino.
281 320
282El ejemplo a continuación aplica las cuatro opciones a nivel de SDK juntas. Construya `tenantDir` y `configDir` para que cada inquilino obtenga una ruta que ningún otro inquilino pueda leer. En TypeScript, `env` reemplaza el entorno del subproceso, por lo que extienda `...process.env` para mantener variables heredadas como `PATH` y `ANTHROPIC_API_KEY`. En Python, `env` se fusiona en la parte superior del entorno heredado.321El ejemplo a continuación aplica las opciones de configuración, memoria automática, directorio de configuración y directorio de trabajo juntas. Construya `tenantDir` y `configDir` para que cada inquilino obtenga una ruta que ningún otro inquilino pueda leer. En TypeScript, `env` reemplaza el entorno del subproceso, por lo que extienda `...process.env` para mantener variables heredadas como `PATH` y `ANTHROPIC_API_KEY`. En Python, `env` se fusiona en la parte superior del entorno heredado.
283 322
284<CodeGroup>323<CodeGroup>
285 ```typescript TypeScript theme={null}324 ```typescript TypeScript theme={null}
307 346
308 ```python Python theme={null}347 ```python Python theme={null}
309 from claude_agent_sdk import query, ClaudeAgentOptions348 from claude_agent_sdk import query, ClaudeAgentOptions
349 import asyncio
310 350
351 prompt: str = ...
352 tenant_dir: str = ...
353 config_dir: str = ...
354
355
356 async def main():
311 async for message in query(357 async for message in query(
312 prompt=prompt,358 prompt=prompt,
313 options=ClaudeAgentOptions(359 options=ClaudeAgentOptions(
320 ),366 ),
321 ):367 ):
322 ...368 ...
369
370
371 asyncio.run(main())
323 ```372 ```
324</CodeGroup>373</CodeGroup>
325 374
326Para controles de red por inquilino, consulte [Despliegue Seguro](/es/agent-sdk/secure-deployment).
327
328<h2 id="known-limitations">375<h2 id="known-limitations">
329 Limitaciones conocidas376 Limitaciones conocidas
330</h2>377</h2>
331 378
332Planifique alrededor de estas en su diseño de implementación.379Planifique considerando estas limitaciones en su diseño de implementación.
333 380
334| Limitación | Qué hacer |381| Limitación | Qué hacer |
335| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |382| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
336| Sin tiempo de espera de sesión de nivel superior | Una sesión no agota el tiempo de espera por sí sola. Establezca `maxTurns` en `Options` para limitar cuántos viajes de uso de herramientas realiza el agente antes de detenerse. |383| Sin tiempo de espera de sesión de nivel superior | Una sesión no agota el tiempo de espera por sí sola. Establezca `maxTurns` en TypeScript o `max_turns` en Python para limitar cuántos viajes de ronda de uso de herramientas realiza el agente antes de detenerse. |
337| Crecimiento de memoria en sesiones largas | Limite la duración de la sesión o recicle subprocesos periódicamente. Consulte [Escalado y concurrencia](#scaling-and-concurrency). |384| Crecimiento de memoria en sesiones largas | Limite la duración de la sesión o recicle subprocesos periódicamente. Consulte [Escalado y concurrencia](#scaling-and-concurrency). |
338| Los despliegues paralelos grandes de subagentos pueden alcanzar límites de velocidad | Divida el trabajo en lotes más pequeños en lugar de emitir un envío amplio. |385| Los fanouts de subagentes paralelos grandes pueden alcanzar límites de velocidad | Divida el trabajo en lotes más pequeños en lugar de emitir un envío amplio. |
339| Sin plazo de reloj de pared por subagentos | Limite cada [subagentos](/es/agent-sdk/subagents) con `maxTurns` en su `AgentDefinition`. Solo para subagentos en segundo plano, `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` establece un perro guardián de estancamiento que se activa cuando un subagentos `run_in_background` deja de producir salida; no es un plazo de tiempo de ejecución total. |386| Sin plazo de reloj de pared por subagente | Limite cada [subagente](/docs/es/agent-sdk/subagents) con `maxTurns` en su `AgentDefinition`. `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` establece un perro guardián de estancamiento que se activa cuando un subagente deja de producir salida; no es un plazo de tiempo de ejecución total. |
387
388<h2 id="troubleshoot-deployment-failures">
389 Solucionar errores de implementación
390</h2>
391
392Utilice esta sección cuando un agente que funciona en su máquina falla en un servicio implementado. Cada elemento a continuación nombra un error y vincula la entrada que lo cubre:
393
394* **CLI no encontrado al iniciar el servicio**: en Python, un contenedor o administrador de servicios ejecuta su aplicación con una `PATH` diferente a la de su shell, por lo que una instalación que funciona localmente no es visible para el proceso. En TypeScript, la compilación de la imagen omitió las dependencias opcionales del SDK, o `pathToClaudeCodeExecutable` apunta a un archivo que no existe en la imagen. Consulte [Claude Code no encontrado](/docs/es/agent-sdk/troubleshooting#clinotfounderror-claude-code-not-found).
395* **CLI presente en la imagen pero no se inicia**: Claude Code no puede iniciarse desde un binario que no coincida con la arquitectura o libc del contenedor, o desde un archivo que perdió su permiso de ejecución en la compilación de la imagen. Consulte [Error al iniciar Claude Code](/docs/es/agent-sdk/troubleshooting#cliconnectionerror-failed-to-start-claude-code).
396* **El proceso de Claude Code se cierra durante la ejecución**: el error que recibe su aplicación depende del lenguaje del SDK y de si la CLI reportó primero un resultado de error. Las entradas bajo [Salida del proceso CLI](/docs/es/agent-sdk/troubleshooting#cli-process-exit) cubren cada mensaje.
340 397
341<h2 id="next-steps">398<h2 id="next-steps">
342 Próximos pasos399 Próximos pasos
343</h2>400</h2>
344 401
345* [Guía de alojamiento](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb): recorrido por el notebook con [código implementable](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) para Docker, Modal y Kubernetes.402* [Guía de alojamiento](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb): recorrido por el notebook con [código implementable](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) para Docker, Modal y Kubernetes.
346* [Almacenamiento de sesiones](/es/agent-sdk/session-storage): persistir transcripciones entre hosts con un adaptador `SessionStore`.403* [Almacenamiento de sesiones](/docs/es/agent-sdk/session-storage): persistir transcripciones entre hosts con un adaptador `SessionStore`.
347* [Observabilidad](/es/agent-sdk/observability): exportar trazas OTEL, métricas y registros a su recopilador.404* [Observabilidad](/docs/es/agent-sdk/observability): exportar trazas OTEL, métricas y registros a su recopilador.
348* [Implementación segura](/es/agent-sdk/secure-deployment): controles de red, gestión de credenciales y endurecimiento de aislamiento.405* [Implementación segura](/docs/es/agent-sdk/secure-deployment): controles de red, gestión de credenciales y endurecimiento de aislamiento.
349* [Seguimiento de costos](/es/agent-sdk/cost-tracking): contabilidad de tokens y costos por sesión.406* [Seguimiento de costos](/docs/es/agent-sdk/cost-tracking): contabilidad de tokens y costos por sesión.