View a markdown version of this page

Conchas interativas (terminais) - Base da Amazônia AgentCore

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Conchas interativas (terminais)

A InvokeAgentRuntimeCommandShell operação abre uma sessão de terminal persistente e interativa dentro de uma sessão AgentCore de tempo de execução WebSocket. Diferentemente da execução única de comandos, as sessões do shell mantêm o estado — as variáveis de ambiente, o diretório de trabalho e o histórico de comandos são transmitidos pelas entradas. Isso permite depuração, inspeção ambiental e 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 omitida, uma nova sessão será criada para cada conexão. Para usar a reconexão, você deve armazenar e reutilizar e. session_id shellId

A conexão suporta:

Recurso Description

Estado persistente

As variáveis de ambiente, o diretório de trabalho e o histórico de comandos são transmitidos pelas entradas na mesma sessão.

Reconexão

Forneça o mesmo session_id e shellId reconecte-se ao mesmo shell após uma desconexão. O serviço reproduz até 256 KB de saída armazenada em buffer.

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 em capacidade máxima.

Pré-requisitos

  • Permissão bedrock-agentcore:InvokeAgentRuntimeCommandShell do IAM

  • Um ARN AgentCore de endpoint de tempo de execução válido com um tempo de execução no estado READY

nota

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 Começar a usar a AgentCore CLI.

A CLI fornece uma experiência de terminal integrada comagentcore 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 desprender 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 exemplos adicionais de CLI, consulte AgentCore exemplos em. GitHub

Usando o AgentCore SDK

Instale o SDK do Python:

pip install bedrock-agentcore
exemplo
SigV4 (default)
  1. O exemplo a seguir mostra como abrir uma sessão de shell usando AWS credenciais padrão.

    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. O exemplo a seguir mostra como abrir uma sessão de shell usando uma URL pré-assinada.

    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. O exemplo a seguir mostra como abrir uma sessão de shell usando um token portador do 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())

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 cair. 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 outros exemplos de SDK, veja AgentCore exemplos em. GitHub

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 de rede, as ferramentas disponíveis e o estado do sistema de arquivos. Útil ao 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 na qual podem escrever código iterativamente, 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, cd alterações) está 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 de tela cheia sem sobrecarga de codificação.

Reconexão com repetição de saída

Quando você se reconecta usando o mesmoshellId, o serviço reproduz até 256 KB da saída recente. Isso permite que você se recupere de interrupções na rede sem perder o contexto. O processo de 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 uma visão consolidada de todas as recomendações de segurança do Runtime, consulte Práticas recomendadas de segurança para AgentCore Runtime.

Importante

No modelo de responsabilidade AWS compartilhada, você é responsável pelos comandos executados 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, em sua VM, os comandos shell têm acesso total ao sistema de arquivos do contêiner e a quaisquer credenciais ou segredos que você tenha configurado.

Auditoria com registros CloudWatch

AgentCore O Runtime envia o ID da solicitação e os metadados de 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, data e hora, endereço IP de origem e status da resposta. CloudTrail não registra a carga útil da solicitação ou da resposta. Use CloudTrail para auditar quem abriu as sessões do shell e quando e, em seguida, correlacione-o 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

  • Revisando CloudTrail 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:InvokeAgentRuntimeCommandShell permissã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 simultâneas de shell (terminais) atingido (10 abertas) — feche uma sessão existente e tente novamente. (2) Formato de ID do 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 o recuo. Analise o error campo 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 repetição.

ConflictException

Outra conexão está reivindicando o mesmo shellId simultaneamente. Tente novamente após 1 segundo. Essa é uma condição de corrida restrita (não um estado persistente) e é resolvida imediatamente ao tentar novamente.

RetryableConflictException (409)

Ocorre quando você abre uma conexão de sessão shell enquanto o serviço está provisionando ou desativando a sessão de destino. A mensagem éSession operation in progress, please retry. Essa condição é transitória e pode ser repetida. A janela é breve e as sessões já em execução não são afetadas. Tente novamente com um pequeno recuo exponencial. Como InvokeAgentRuntimeCommandShell é uma WebSocket API, os AWS SDKs não a repetem automaticamente. Tente você mesmo novamente.

Uma vez conectado, os seguintes códigos de fechamento indicam por que uma conexão foi encerrada:

Código Significado Ação do cliente

1000

Fechamento normal — o invólucro saiu de forma limpa ou desconexão elegante

Exibir “desconectado”. Rescisão normal.

1001

Desaparecendo — implantação ou desligamento do servidor

Auto-reconnect com armazenadoshellId.

1003

Dados não suportados — enviados após 5 quadros de texto consecutivos (protocolo somente binário)

NÃO se reconecte automaticamente. Mude para quadros binários.

1006

Fechamento anormal — sintetizado localmente quando nenhum quadro fechado é recebido (morte da rede, TCP RST)

Auto-reconnect com armazenadoshellId.

1008

Violação da política — conexão TTL expirada (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.

1009

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.

1011

Erro no servidor — falha interna inesperada

Tente novamente com o backoff.

4000

Substituído — outro cliente conectado ao mesmo shellId

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 ativar a reconexão. Armazene o shellId no lado do cliente.

  • Use ReconnectConfig no 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 será preenchido e a conexão será 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 fechar o 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 shellId para 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

Quadros que excedem esse limite resultam em código 1009 fechado.

Taxa de quadros

250 frames/sec

Exceder isso aciona o código de fechamento. 1008

Duração máxima da conexão

1 hora

A conexão é fechada com o código1008. Reconecte usando o mesmo shellId para continuar.

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.

Buffer de reconexão

256 KB

Saída máxima repetida ao se reconectar a um shell.

Para ver os limites completos do serviço, consulte Cotas para o Amazon Bedrock AgentCore.