Conchas interativas (terminais)
A InvokeAgentRuntimeCommandShell operação abre uma sessão de terminal persistente e interativa dentro de uma sessão de Runtime em AgentCore execução WebSocket. Ao contrário da execução única de comandos, as sessões de shell mantêm o estado — as variáveis de ambiente, o diretório de trabalho e o histórico de comandos são transmitidos entre as entradas. Isso permite a depuração, a inspeção do ambiente e a criação de experiências de terminal em seu aplicativo.
Para ligarInvokeAgentRuntimeCommandShell, você precisa de bedrock-agentcore:InvokeAgentRuntimeCommandShell permissões.
Como funciona
InvokeAgentRuntimeCommandShellestabelece uma WebSocket conexão com um processo de shell interativo em execução na sessão do seu agente. A conexão usa quadros binários para transmitir a entrada e a saída do terminal em ambas as direções.
Mesmo agente, mesma sessão
InvokeAgentRuntimeCommandShellopera no mesmo tempo de execução do agente que InvokeAgentRuntime InvokeAgentRuntimeCommand e. Você não cria recursos separados. O agente com o qual você implantou CreateAgentRuntime aceita conexões shell em qualquer sessão ativa.
nota
Você pode passar um session_id para direcionar uma sessão de tempo de execução específica. Se for omitido, uma nova sessão será criada para cada conexão. Para usar a reconexão, você deve armazenar e reutilizar ambos e. session_id shellId
A conexão suporta:
| Recurso | Description |
|---|---|
|
Estado persistente |
Variáveis de ambiente, diretório de trabalho e histórico de comandos são transferidos entre as entradas na mesma sessão. |
|
Reconexão |
Forneça o mesmo |
|
Vários shells simultâneos |
Até 10 sessões de shell ativas (terminais) por tempo de execução. Novas conexões são rejeitadas quando estão lotadas. |
Pré-requisitos
-
Permissão
bedrock-agentcore:InvokeAgentRuntimeCommandShelldo IAM -
Um ARN AgentCore de endpoint de tempo de execução válido com um tempo de execução no estado PRONTO
nota
Os agentes criados após 5 de junho de 2026 oferecem suporte automático a shells interativos (terminais). Se você implantou seu agente antes dessa data, deverá reimplantá-lo para atualizar o tempo de execução do agente.
Usando a AgentCore CLI
Para obter instruções de instalação e configuração, consulte Comece a usar o AgentCore Runtime usando a CLI.
A CLI fornece uma experiência de terminal integrada com. agentcore exec
agentcore exec --it
Para se conectar a um tempo de execução específico:
agentcore exec --it --runtime <runtime-arn> --region us-west-2
Pressione Ctrl+] para se soltar de uma concha sem fechá-la. A CLI imprime um comando de reconexão:
agentcore exec --it \ --runtime <arn> \ --region <region> \ --session-id <uuid> \ --shell-id <id>
Para comandos únicos, --it omita:
agentcore exec "ls -la /tmp"
Para uma saída legível por máquina, use o modo JSON:
agentcore exec --json "echo hello" # Output: {"success":true,"exitCode":0,"stdout":"hello\n","stderr":""}
Para obter exemplos adicionais de CLI, consulte AgentCore exemplos
Usando o AgentCore SDK
Instale o SDK do Python:
pip install bedrock-agentcore
exemplo
Reconexão
Um padrão comum é usar para se shellId reconectar a um shell após uma desconexão, preservando todo o estado da sessão.
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
O SDK também pode se reconectar automaticamente quando a WebSocket conexão é interrompida. Use ReconnectConfig para habilitar isso:
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 exemplos adicionais de SDK, veja AgentCore exemplos
Casos de uso comuns
- Depuração interativa
-
Abra um shell para inspecionar o ambiente de execução do seu agente — verifique os pacotes instalados, leia os arquivos de log, examine o sistema de arquivos ou teste os comandos antes de adicioná-los ao código do agente.
python --version && pip list | head -20 - Inspeção ambiental
-
Verifique as variáveis do ambiente, a conectividade da rede, as ferramentas disponíveis e o estado do sistema de arquivos. Útil para diagnosticar falhas do agente ou validar a configuração de implantação.
env | grep AWS && curl -s http://169.254.169.254/latest/meta-data/ - Acesso ao terminal do agente de codificação
-
Os agentes de codificação de IA usam shells interativos (terminais) como ambiente de execução. Quando um agente de codificação precisa executar código, instalar pacotes ou executar testes, ele abre uma sessão de shell no AgentCore Runtime e executa comandos diretamente, da mesma forma que um desenvolvedor usaria um terminal. Por exemplo, Claude Code, Amazon Kiro e OpenAI Codex se conectam a uma sessão de shell onde podem escrever código de forma iterativa, executá-lo, observar a saída e corrigir erros em um loop. O estado persistente significa que o agente pode executar uma sequência de comandos sem perder o contexto entre as etapas.
# 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 processos
-
Inicie processos que sobrevivem a uma única solicitação HTTP. Use a reconexão para verificar o progresso ou fornecer informações adicionais ao longo do tempo.
nohup python train.py > /tmp/train.log 2>&1 &
Principais opções de design
- Sessões interativas persistentes
-
Cada conexão é mapeada para um processo de shell de longa duração. Você pode enviar vários comandos sem restabelecer a conexão, e o estado acumulado pelos comandos anteriores (variáveis exportadas,
cdalterações) fica disponível para os posteriores. - Enquadramento binário WebSocket
-
I/O O terminal é transmitido como WebSocket quadros binários. Isso suporta sequências brutas de controle de terminal, cores, movimento do cursor e aplicativos em tela cheia sem sobrecarga de codificação.
- Reconexão com replay de saída
-
Quando você se reconecta usando o mesmo
shellId, o serviço reproduz até 256 KB de saída recente. Isso permite que você se recupere de interrupções na rede sem perder o contexto. O processo do shell continua em execução durante a desconexão. - Limite de sessão
-
Quando 10 sessões de shell (terminais) já estão abertas em um tempo de execução, novas conexões são rejeitadas com um erro. Você deve fechar uma sessão existente antes de abrir uma nova.
Considerações sobre segurança
dica
Para obter uma visão consolidada de todas as recomendações de segurança do Runtime, consulte Melhores práticas de segurança para o AgentCore Runtime.
Importante
No modelo de responsabilidade AWS compartilhada, você é responsável pelos comandos que executa nas sessões do AgentCore Runtime. AWS fornece a infraestrutura segura e o isolamento no nível da microVM. Você é responsável pelos comandos que executa, pelos dados que processa e pelos controles de acesso que configura.
O limite de segurança para sessões de shell (terminais) é a microVM. Cada sessão do AgentCore Runtime é executada em uma microVM isolada com seu próprio kernel, memória e sistema de arquivos. As sessões do Shell não podem acessar as cargas de trabalho de outros clientes nem escapar dos limites da VM. No entanto, na sua VM, os comandos shell têm acesso total ao sistema de arquivos do contêiner e a todas as credenciais ou segredos que você configurou.
Auditoria com registros CloudWatch
AgentCore O Runtime envia o ID da solicitação e os metadados da conexão para o grupo de CloudWatch logs do Amazon Logs do seu agente. Você pode usar esses registros para monitorar a atividade de conexão do shell e manter uma trilha de auditoria. I/O O conteúdo do terminal (stdin/stdout) é transmitido para seu cliente e não é registrado pelo serviço.
Auditoria com CloudTrail
AWS CloudTrail registra chamadas de InvokeAgentRuntimeCommandShell API em sua conta. Cada registro inclui metadados, como identidade do chamador, carimbo de data/hora, endereço IP de origem e status da resposta. CloudTrail não registra a carga útil da solicitação ou resposta. Use CloudTrail para auditar quem abriu as sessões de shell e quando, depois correlacione com CloudWatch os registros usando o ID da solicitação para obter detalhes da conexão.
Para cargas de trabalho confidenciais, considere a implementação de controles adicionais, como:
-
Usando políticas do IAM para restringir quais diretores podem ligar
InvokeAgentRuntimeCommandShell -
Configurando endpoints VPC para manter o tráfego em sua rede
-
Configurando filtros métricos e alarmes do CloudWatch Logs para detectar padrões de conexão inesperados
-
Analisar CloudTrail os registros regularmente em busca de tentativas de acesso não autorizado
Tratamento de erros
Ao estabelecer uma conexão de sessão de shell, você pode encontrar os seguintes erros durante a WebSocket atualização:
- ValidationException
-
Ocorre quando os parâmetros da solicitação são inválidos. Isso pode acontecer se o ID da sessão tiver menos de 33 caracteres, se o recurso não estiver ativado na região de destino ou se o agente não estiver no estado PRONTO.
- AccessDeniedException
-
Ocorre quando você não tem as permissões necessárias. Certifique-se de que sua política do IAM inclua a
bedrock-agentcore:InvokeAgentRuntimeCommandShellpermissão. - ResourceNotFoundException
-
Ocorre quando o tempo de execução do agente especificado não pode ser encontrado. Verifique se o ARN do tempo de execução está correto.
- RuntimeClientError (424)
-
Ocorre em vários cenários: (1) Máximo de sessões de shell simultâneas (terminais) atingido (10 abertas) — feche uma sessão existente e tente novamente. (2) Formato de ID de shell inválido — deve ter de 1 a 128 caracteres alfanuméricos, sublinhados ou hífens. (3) Tempo de execução inacessível — tente novamente após recuar. Analise o
errorcampo JSON do corpo da resposta para distinguir as causas. - ThrottlingException
-
Ocorre quando você excede o limite de taxa da API. Implemente a lógica de recuo exponencial e tente novamente.
- ConflictException
-
Outra conexão está reivindicando o mesmo
shellIdsimultaneamente. Tente novamente após 1 segundo. Essa é uma condição de corrida restrita (não um estado persistente) e é resolvida imediatamente após uma nova tentativa.
Depois de conectado, os seguintes códigos de fechamento indicam por que a conexão foi encerrada:
| Código | Significado | Ação do cliente |
|---|---|---|
|
|
Fechamento normal — a concha saiu de forma limpa ou desconectou corretamente |
Display “desconectado”. Rescisão normal. |
|
|
Desaparecendo — implantação ou desligamento do servidor |
Auto-reconnect com armazenado |
|
|
Dados não compatíveis — enviados após 5 quadros de texto consecutivos (protocolo somente binário) |
NÃO se reconecte automaticamente. Mude para quadros binários. |
|
|
Fechamento anormal — sintetizado localmente quando nenhum quadro fechado é recebido (morte da rede, TCP RST) |
Auto-reconnect com armazenado |
|
|
Violação de política — TTL de conexão expirado (1 hora), limite de taxa de quadros excedido (250 frames/sec) ou estouro de buffer de gravação |
Auto-reconnect para expiração de TTL (TTL novo na reconexão). Para limite de taxa: desligue e reconecte. |
|
|
Mensagem muito grande — a carga útil do quadro excedeu 64 KB |
Reduza o tamanho do quadro (fragmento para <64 KB) e reconecte. A sessão ainda está ativa. |
|
|
Erro no servidor — falha interna inesperada |
Tente novamente com o backoff. |
|
|
Substituído — outro cliente conectado ao mesmo |
NÃO se reconecte automaticamente. Exibir “sessão anexada de outro cliente”. |
Práticas recomendadas
Siga estas melhores práticas ao usarInvokeAgentRuntimeCommandShell:
-
Use um exclusivo
shellId(como um UUID) para cada sessão lógica para permitir a reconexão. Armazene oshellIdno lado do cliente. -
Use
ReconnectConfigno SDK para lidar automaticamente com interrupções transitórias de rede sem lógica de reconexão manual. -
Leia os quadros de saída imediatamente. Se o cliente ficar para trás, o buffer de gravação do servidor é preenchido e a conexão é fechada com o código.
1008 -
Para entradas grandes (como colar um arquivo), divida o conteúdo em partes com menos de 64 KB por quadro para evitar o fechamento de código.
1009 -
Defina os tempos limite de conexão apropriados. A duração máxima da conexão é de 1 hora — reconecte-se com a mesma
shellIdpara continuar além disso. -
Feche as sessões explicitamente quando terminar. As sessões separadas contam para o limite de 10 sessões.
Cotas e limites
| Limite | Valor | Description |
|---|---|---|
|
Tamanho máximo da carga útil do quadro |
64 KB |
Os quadros que excedem esse limite resultam em código |
|
Taxa de quadros |
250 frames/sec |
Exceder isso aciona o código de fechamento. |
|
Duração máxima da conexão |
1 hora |
A conexão é fechada com o código |
|
Sessões de shell simultâneas (terminais) por tempo de execução |
10 |
Novas conexões serão rejeitadas se 10 sessões já estiverem abertas. Feche uma sessão existente e tente novamente. |
|
Tampão de reconexão |
256 KB |
Saída máxima reproduzida ao se reconectar a um shell. |
Para ver os limites completos do serviço, consulte Cotas para o Amazon Bedrock AgentCore.