View a markdown version of this page

Carcasas interactivas (terminales) - Base amazónica AgentCore

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Carcasas interactivas (terminales)

La InvokeAgentRuntimeCommandShell operación abre una sesión de terminal interactiva y persistente dentro de una sesión AgentCore de Runtime en ejecución WebSocket. A diferencia de la ejecución de comandos en un solo paso, las sesiones de shell mantienen el estado: las variables de entorno, el directorio de trabajo y el historial de comandos se transfieren entre las entradas. Esto permite la depuración, la inspección del entorno y la creación de experiencias de terminal en su aplicación.

Para llamarInvokeAgentRuntimeCommandShell, necesita bedrock-agentcore:InvokeAgentRuntimeCommandShell permisos.

Funcionamiento

InvokeAgentRuntimeCommandShellestablece una WebSocket conexión con un proceso de shell interactivo que se ejecuta dentro de la sesión de su agente. La conexión utiliza marcos binarios para transmitir la entrada y la salida del terminal en ambas direcciones.

Mismo agente, misma sesión

InvokeAgentRuntimeCommandShellfunciona en el mismo tiempo de ejecución del agente que InvokeAgentRuntime yInvokeAgentRuntimeCommand. No se crean recursos independientes. El agente con el que implementaste CreateAgentRuntime acepta conexiones de shell en cualquier sesión activa.

nota

Puede pasar un session_id a una sesión de tiempo de ejecución específica como objetivo. Si se omite, se crea una nueva sesión para cada conexión. Para usar la reconexión, debe almacenar y reutilizar tanto comosession_id. shellId

La conexión admite:

Característica Description (Descripción)

Estado persistente

Las variables de entorno, el directorio de trabajo y el historial de comandos se transfieren a las entradas de la misma sesión.

Reconexión

Proporcione lo mismo session_id y vuelva shellId a conectarse al mismo shell después de una desconexión. El servicio reproduce hasta 256 KB de salida almacenada en búfer.

Múltiples shells simultáneos

Hasta 10 sesiones de shell activas (terminales) por tiempo de ejecución. Las conexiones nuevas se rechazan cuando están llenas.

Requisitos previos

  • Permiso de IAM bedrock-agentcore:InvokeAgentRuntimeCommandShell

  • Un ARN AgentCore de punto final de ejecución válido con un tiempo de ejecución en estado LISTO

nota

Los agentes creados después del 5 de junio de 2026 admiten automáticamente los shells interactivos (terminales). Si implementó el agente antes de esta fecha, debe volver a implementarlo para actualizar el tiempo de ejecución del agente.

Uso de la CLI AgentCore

Para obtener instrucciones de instalación y configuración, consulte Introducción a la AgentCore CLI.

La CLI proporciona una experiencia de terminal integrada conagentcore exec.

agentcore exec --it

Para conectarse a un tiempo de ejecución específico:

agentcore exec --it --runtime <runtime-arn> --region us-west-2

Presiona Ctrl+] para separarte de una carcasa sin cerrarla. La CLI imprime un comando de reconexión:

agentcore exec --it \ --runtime <arn> \ --region <region> \ --session-id <uuid> \ --shell-id <id>

Para los comandos de un solo uso, omita: --it

agentcore exec "ls -la /tmp"

Para obtener una salida legible por máquina, usa el modo JSON:

agentcore exec --json "echo hello" # Output: {"success":true,"exitCode":0,"stdout":"hello\n","stderr":""}

Para ver más ejemplos de CLI, consulta los AgentCore ejemplos en. GitHub

Uso del AgentCore SDK

Instale el SDK de Python:

pip install bedrock-agentcore
ejemplo
SigV4 (default)
  1. El siguiente ejemplo muestra cómo abrir una sesión de shell con AWS las credenciales predeterminadas.

    import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, ShellChannel async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn) as shell: print(f"Connected. Shell ID: {shell.shell_id}") # Send a command await shell.send("echo Hello from AgentCore Shell\n") # Read output frames async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") if "Hello from AgentCore Shell" in frame.text: break asyncio.run(main())
Pre-signed URL
  1. El siguiente ejemplo muestra cómo abrir una sesión de shell con una URL prefirmada.

    import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, PresignedAuth, ShellChannel async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn, auth=PresignedAuth(expires=120)) as shell: await shell.send("whoami\n") async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") break asyncio.run(main())
OAuth
  1. En el siguiente ejemplo, se muestra cómo abrir una sesión de shell con un token portador de OAuth.

    import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, OAuthAuth, ShellChannel async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" bearer_token = "your_oauth_token_here" client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn, auth=OAuthAuth(bearer_token=bearer_token)) as shell: await shell.send("echo oauth-connected\n") async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") if "oauth-connected" in frame.text: break asyncio.run(main())

Reconexión

Un patrón común es volver a conectarse shellId a un shell después de una desconexión, conservando todo el estado de la sesión.

import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient async def main(): client = AgentCoreRuntimeClient(region="us-west-2") runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" session_id = "my-session-0000000000000000000000" shell_id = "my-shell" shell = await client.open_shell( runtime_arn, session_id=session_id, shell_id=shell_id, ).__aenter__() print(f"connected (reconnected={shell.reconnected})") await shell.send("export GREETING='hello'\n") await asyncio.sleep(1) async with client.open_shell( runtime_arn, session_id=session_id, shell_id=shell_id, ) as shell2: print(f"reconnected (reconnected={shell2.reconnected})") assert shell2.reconnected if __name__ == "__main__": asyncio.run(main())

Auto-reconnect

El SDK también puede volver a conectarse automáticamente cuando se interrumpe la WebSocket conexión. ReconnectConfigUtilízalo para habilitar esto:

import asyncio from bedrock_agentcore.runtime import AgentCoreRuntimeClient, ReconnectConfig, ShellChannel async def on_reconnect(reconnected: bool): print(f"Reconnected: {reconnected}") async def main(): runtime_arn = "arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/my-agent" shell_id = "my-persistent-shell" config = ReconnectConfig(max_retries=5, base_delay=0.5, on_reconnect=on_reconnect) client = AgentCoreRuntimeClient(region="us-west-2") async with client.open_shell(runtime_arn, shell_id=shell_id, reconnect_config=config) as shell: # If the connection drops, the SDK retries automatically await shell.send("long-running-command\n") async for frame in shell: if frame.channel == ShellChannel.STDOUT: print(frame.text, end="") asyncio.run(main())

Para ver más ejemplos de SDK, consulta los AgentCore ejemplos de GitHub.

Casos de uso comunes

Depuración interactiva

Abre un shell para inspeccionar el entorno de ejecución de tu agente: comprueba los paquetes instalados, lee los archivos de registro, examina el sistema de archivos o prueba los comandos antes de añadirlos al código del agente.

python --version && pip list | head -20
Inspección del entorno

Verifique las variables de entorno, la conectividad de la red, las herramientas disponibles y el estado del sistema de archivos. Resulta útil para diagnosticar errores de agentes o validar la configuración de implementación.

env | grep AWS && curl -s http://169.254.169.254/latest/meta-data/
Acceso al terminal del agente de codificación

Los agentes de codificación de IA utilizan shells interactivos (terminales) como entorno de ejecución. Cuando un agente de codificación necesita ejecutar código, instalar paquetes o ejecutar pruebas, abre una sesión de shell en el AgentCore Runtime y ejecuta los comandos directamente, del mismo modo que un desarrollador utilizaría una terminal. Por ejemplo, Claude Code, Amazon Kiro y OpenAI Codex se conectan cada uno a una sesión de shell en la que pueden escribir código, ejecutarlo, observar el resultado y corregir errores de forma iterativa. El estado persistente significa que el agente puede ejecutar una secuencia de comandos sin perder el contexto entre los pasos.

# A coding agent opens a shell and iterates on code async with client.open_shell(runtime_arn, shell_id="agent-workspace") as shell: await shell.send("cd /workspace && git clone https://github.com/user/repo.git\n") await shell.send("cd repo && pip install -r requirements.txt\n") await shell.send("python -m pytest tests/ -v\n") # Agent reads test output, fixes failures, re-runs — all in the same shell
Long-running procesos

Inicie procesos que sobrevivan a una sola solicitud HTTP. Utilice la reconexión para comprobar el progreso o para proporcionar información adicional a lo largo del tiempo.

nohup python train.py > /tmp/train.log 2>&1 &

Elecciones clave de diseño

Sesiones interactivas persistentes

Cada conexión se asigna a un proceso de shell de larga duración. Puede enviar varios comandos sin restablecer la conexión, y el estado acumulado por los comandos anteriores (variables exportadas, cd cambios) está disponible para los comandos posteriores.

Se acabó el encuadre binario WebSocket

I/O La terminal se transmite como fotogramas binarios WebSocket . Esto admite secuencias de control de terminales sin procesar, colores, movimientos del cursor y aplicaciones de pantalla completa sin procesar sin sobrecargar la codificación.

Reconexión con reproducción de salida

Cuando se vuelve a conectar con la misma herramientashellId, el servicio reproduce hasta 256 KB de la salida reciente. Esto le permite recuperarse de las interrupciones de la red sin perder el contexto. El proceso de shell continúa ejecutándose durante la desconexión.

Límite de sesión

Cuando ya hay 10 sesiones de shell (terminales) abiertas en un tiempo de ejecución, las nuevas conexiones se rechazan con un error. Debe cerrar una sesión existente antes de abrir una nueva.

Consideraciones de seguridad

sugerencia

Para obtener una vista consolidada de todas las recomendaciones de seguridad en Runtime, consulte las prácticas recomendadas de seguridad para AgentCore Runtime.

importante

Según el modelo de responsabilidad AWS compartida, eres responsable de los comandos que ejecutas en tus sesiones AgentCore de Runtime. AWS proporciona la infraestructura segura y el aislamiento a nivel de microVM. Usted es responsable de los comandos que ejecuta, los datos que procesa y los controles de acceso que configura.

El límite de seguridad para las sesiones de shell (terminales) es la microVM. Cada sesión AgentCore de Runtime se ejecuta en una microVM aislada con su propio núcleo, memoria y sistema de archivos. Las sesiones de Shell no pueden acceder a las cargas de trabajo de otros clientes ni escapar de los límites de las máquinas virtuales. Sin embargo, dentro de su máquina virtual, los comandos de shell tienen acceso total al sistema de archivos del contenedor y a cualquier credencial o secreto que haya configurado.

Auditoría con registros CloudWatch

AgentCore Runtime envía el identificador de la solicitud y los metadatos de la conexión al grupo de CloudWatch registros de Amazon Logs de su agente. Puede utilizar estos registros para supervisar la actividad de las conexiones de shell y mantener un registro de auditoría. I/O El contenido del terminal (stdin/stdout) se transmite a su cliente y el servicio no lo registra.

Auditoría con CloudTrail

AWS CloudTrail graba las llamadas a la InvokeAgentRuntimeCommandShell API en su cuenta. Cada registro incluye metadatos como la identidad de la persona que llama, la marca de tiempo, la dirección IP de origen y el estado de la respuesta. CloudTrail no registra la carga útil de la solicitud o la respuesta. CloudTrail Utilízalo para auditar quién abrió las sesiones de shell y cuándo y, a continuación, correlaciona con CloudWatch los registros utilizando el identificador de solicitud para obtener información sobre la conexión.

En el caso de las cargas de trabajo delicadas, considera la posibilidad de implementar controles adicionales, como los siguientes:

  • Usar políticas de IAM para restringir qué directores pueden llamar InvokeAgentRuntimeCommandShell

  • Configurar los puntos finales de la VPC para mantener el tráfico dentro de la red

  • Configuración de CloudWatch registros, filtros métricos y alarmas para detectar patrones de conexión inesperados

  • Revisar CloudTrail los registros con regularidad para detectar intentos de acceso no autorizados

Gestión de errores

Al establecer una conexión de sesión de shell, es posible que se produzcan los siguientes errores durante la WebSocket actualización:

ValidationException

Se produce cuando los parámetros de la solicitud no son válidos. Esto puede ocurrir si el identificador de sesión tiene menos de 33 caracteres, si la función no está habilitada en la región de destino o si el agente no está en estado LISTO.

AccessDeniedException

Se produce cuando no tiene los permisos necesarios. Asegúrese de que su política de IAM incluya el bedrock-agentcore:InvokeAgentRuntimeCommandShell permiso.

ResourceNotFoundException

Se produce cuando no se puede encontrar el tiempo de ejecución del agente especificado. Compruebe que el ARN en tiempo de ejecución sea correcto.

RuntimeClientError (424)

Ocurre en varios escenarios: (1) Se alcanza el máximo de sesiones simultáneas de shell (terminales) (10 abiertas); cierra una sesión existente y vuelve a intentarlo. (2) El formato del identificador de shell no es válido: debe contener entre 1 y 128 caracteres alfanuméricos, guiones bajos o guiones. (3) No se puede acceder al tiempo de ejecución: vuelva a intentarlo después de retroceder. Analice el error campo JSON del cuerpo de la respuesta para distinguir las causas.

ThrottlingException

Se produce cuando superas el límite de velocidad de la API. Implemente la lógica de retroceso y reintento exponencial.

ConflictException

Otra conexión afirma lo mismo simultáneamente. shellId Vuelva a intentarlo después de 1 segundo. Se trata de una condición de carrera limitada (no un estado persistente) y se resuelve inmediatamente al volver a intentarlo.

RetryableConflictException (409)

Se produce cuando se abre una conexión de sesión shell mientras el servicio aprovisiona o desactiva la sesión de destino. El mensaje es. Session operation in progress, please retry Esta condición es transitoria y se puede volver a intentar. La ventana es breve y las sesiones que ya se están ejecutando no se ven afectadas. Vuelva a intentarlo con un breve retroceso exponencial. Como InvokeAgentRuntimeCommandShell es una WebSocket API, los AWS SDK no la reintentan automáticamente. Vuelva a intentarlo usted mismo.

Una vez conectada, los siguientes códigos de cierre indican el motivo por el que se interrumpió la conexión:

Código Significado Acción del cliente

1000

Cierre normal: la carcasa salió limpiamente o se desconectó correctamente

Muestra «desconectado». Terminación normal.

1001

Desaparición: implementación o cierre del servidor

Auto-reconnect con almacenamientoshellId.

1003

Datos no compatibles: se envían después de 5 marcos de texto consecutivos (protocolo solo binario)

NO te vuelvas a conectar automáticamente. Cambie a marcos binarios.

1006

Cierre anormal: se sintetiza localmente cuando no se recibe ningún fotograma cerrado (muerte de la red, TCP RST)

Auto-reconnect con almacenadoshellId.

1008

Infracción de la política: el TTL de la conexión ha caducado (1 hora), se ha superado el límite de velocidad de fotogramas (250 frames/sec) o se ha desbordado el búfer de escritura

Auto-reconnect por caducidad del TTL (TTL nuevo al volver a conectarse). Para el límite de velocidad: apágalo y vuelve a conectarte.

1009

El mensaje es demasiado grande: la carga útil de fotogramas supera los 64 KB

Reduzca el tamaño del marco (el fragmento a menos de 64 KB) y vuelva a conectarlo. La sesión sigue activa.

1011

Error del servidor: fallo interno inesperado

Vuelva a intentarlo con la opción de retroceso.

4000

Reemplazado: otro cliente conectado al mismo shellId

NO vuelva a conectarse automáticamente. Muestra «sesión adjunta desde otro cliente».

Prácticas recomendadas

Siga estas prácticas recomendadas cuando utiliceInvokeAgentRuntimeCommandShell:

  • Utilice un identificador único shellId (como un UUID) para cada sesión lógica a fin de permitir la reconexión. Almacénelos shellId en el lado del cliente.

  • Úselo ReconnectConfig en el SDK para gestionar automáticamente las interrupciones transitorias de la red sin la lógica de reconexión manual.

  • Lea los fotogramas de salida con prontitud. Si el cliente se retrasa, el búfer de escritura del servidor se llena y la conexión se cierra con código1008.

  • En el caso de entradas de gran tamaño (como pegar un archivo), divida el contenido en fragmentos de menos de 64 KB por fotograma para evitar cerrar el código. 1009

  • Establezca los tiempos de espera de conexión adecuados. La duración máxima de la conexión es de 1 hora; vuelve a conectarte con la misma conexión shellId para continuar más allá de esa hora.

  • Cierre las sesiones de forma explícita cuando haya terminado. Las sesiones independientes se tienen en cuenta para el límite de 10 sesiones.

Cuotas y límites

Límite Valor Description (Descripción)

Tamaño máximo de carga útil de fotogramas

64 KB

Los fotogramas que superen este límite dan como resultado un código 1009 cerrado.

Velocidad de fotogramas

250 frames/sec

Superar este límite activa el código de cierre1008.

Duración máxima de la conexión

1 hora

La conexión se cierra con un código1008. Vuelva a conectarse usando lo mismo shellId para continuar.

Sesiones de shell simultáneas (terminales) por tiempo de ejecución

10

Las conexiones nuevas se rechazan si ya hay 10 sesiones abiertas. Cierre una sesión existente y vuelva a intentarlo.

Búfer de reconexión

256 KB

Salida máxima que se reproduce al volver a conectarse a un shell.

Para ver los límites de servicio completos, consulte Cuotas para Amazon Bedrock. AgentCore