Guias de integração

Integrar com JavaScript

Use fetch e a API HTTP do serviço hospedado, sem acesso ao repositório privado.

Integre o serviço, sem clonar o servidor

O RAM é um serviço hospedado; seu repositório é privado. Para usar MCP, HTTP ou streaming, você não precisa clonar, compilar ou instalar o RAM. O exemplo usa fetch nativo do Node.js 24 no seu próprio aplicativo; não depende de um pacote privado.

Obtenha uma chave runner da sua conta em Meu acesso. Mantenha-a no host confiável, fora de prompts, URLs e logs. Consulte GET /api/computers, escolha o campo id de um computador próprio com state ready e availability available; GET /api/status?computer_id=ID confirma capacidades.

Delegue e guarde o identificador

Configure RAM_API_KEY e RAM_COMPUTER_ID por um mecanismo privado do seu aplicativo. O exemplo delega uma tarefa de observação, consulta estado e eventos; não executa um modelo no cliente. O Brain remoto requer provedor e limites configurados.

Uma falha de transporte na criação pode ter resultado desconhecido. Guarde os parâmetros e a chave estável antes do envio; não repita automaticamente nem invente outra chave para a mesma intenção.

const origin = 'https://ram-aws-qa.carneiro.ai';
const credential = process.env.RAM_API_KEY;
const computerId = process.env.RAM_COMPUTER_ID;
if (!credential || !computerId) throw new Error('Configure chave runner e computador');

async function request(path, input) {
  const response = await fetch(new URL(path, origin), {
    method: input ? 'POST' : 'GET',
    redirect: 'error',
    headers: {
      Authorization: `Bearer ${credential}`,
      ...(input ? { 'Content-Type': 'application/json' } : {}),
    },
    ...(input ? { body: JSON.stringify(input) } : {}),
  });
  if (!response.ok) throw new Error(`RAM HTTP ${response.status}; confira o estado antes de repetir`);
  return response.json();
}
// Persista esta chave por intenção ANTES de enviar; nunca gere outra no retry.
const requestKey = 'pedido-exemplo-estavel-001';
const { run } = await request('/api/runs', {
  objective: 'Descreva a página atualmente aberta, sem executar alterações.',
  idempotency_key: requestKey,
  runtime: 'agent', computer_id: computerId, allow_mutations: false,
  max_steps: 5, max_duration_seconds: 60, max_output_tokens: 512,
});
// Guarde run.id (UUID), sem imprimir objetivos ou resultados privados.
const current = await request(`/api/runs/${run.id}`);
const history = await request(`/api/runs/${run.id}/events?after=0`);

Apresente intervenção e viewer

waiting_for_input com result.outcome needs_input significa pausa. Consulte GET /api/runs/{id}/intervention-descriptor para apresentar a ação à pessoa sem capabilities; siga https://ram-aws-qa.carneiro.ai/docs/interventions. Após intervenção e liberação do controle humano, a continuação é um POST explícito separado com chave estável.

Na criação, consulta e continuação, viewer pode acompanhar run. O localizador HTTP GET /api/runs/{id}/viewer exige login web. Via MCP, run_start, run_continue e computer_acquire oferecem uma capability temporária quando o computador está pronto; run_viewer e computer_viewer_create emitem um novo link explicitamente. viewer.url é absoluta na origem do RAM: ofereça o link à pessoa ao iniciar a tarefa ou assumir o computador e abra somente com o consentimento dela. Confira que o link permanece na mesma origem do RAM antes de mostrá-lo; nunca aceite um destino arbitrário vindo do modelo.

Os localizadores HTTP /view exigem login web. Já a capability MCP /watch#HASH permite acompanhar sem login por 10 minutos; não concede controle. O hash é segredo temporário: não registre o link, não envie para analytics e compartilhe somente com a pessoa pretendida. Ambos mostram o computador atual, não gravação histórica. Para frames numa interface nativa, siga https://ram-aws-qa.carneiro.ai/docs/streaming; task_observer não concede tela.

Link MCP temporário sem login web

Escolha computer_id e chame computer_viewer_create. A resposta viewer contém id, computer_id, generation, url, mode observe, requires_login false, expires_at e expires_in_seconds 600. Se houver browser embutido, ofereça abrir viewer.url para a pessoa acompanhar. Verifique a mesma origem do MCP, pathname /watch, nenhuma query e fragmento aleatório de 43 caracteres base64url. Não transforme a URL em um localizador /view nem retire o fragmento antes de abrir.

Para renovar, chame computer_viewer_create novamente. O campo opcional replaces com o id anterior revoga aquele link ao emitir o novo. Após expiração, peça um novo link sem replaces. computer_viewer_revoke com id revoga um link desta mesma credencial. Expiração, revogação de chave, perda da atribuição ou mudança de geração encerram os streams; não há login nem redirecionamento como fallback.

A tela temporária é somente observação, inclusive para quem tem cookie RAM no browser. Controle humano continua exigindo o fluxo autenticado separado. O resgate faz POST sem cookies para /api/visual/links/session com token no corpo e X-RAM-Intent visual-link, depois usa ticket de uso único no WebSocket. O fragmento nunca vai em requisições HTTP; a página o remove do histórico. Não registre corpos, headers de ticket ou screenshots pessoais.

As capabilities atuais ficam somente na memória do gateway e são invalidadas por reinício. Em uma instalação com várias réplicas, um link pode ser recusado por outra réplica: peça um novo link, sem ampliar permissões. Android usa protocolo próprio e não recebe estas ferramentas de Computer. Uma MicroVM ainda creating não tem binding pronto: aguarde running e solicite computer_viewer_create; a criação não inventa um link.

Contrato do localizador HTTP autenticado

O localizador HTTP GET /api/runs/{id}/viewer retorna o objeto abaixo; a capability MCP está descrita na seção anterior. Nas respostas HTTP de criação/consulta/continuação, o localizador aparece ao lado de run. MCP computer_acquire oferece a capability temporária descrita acima. SEU_COMPUTADOR representa o ID real do computador. viewer.url já é absoluta na origem desta instalação; clientes que guardaram o formato relativo anterior devem resolvê-lo com essa mesma origem e confirmar que permanece nela.

viewer é opcional nas respostas de tarefa: uma execução simulated ou sem computador não oferece streaming. O endpoint dedicado recusa com HTTP 409 quando não há viewer autorizado. Não invente um link substituto; informe a indisponibilidade. Login expirado ao abrir a tela exige entrar no RAM e abrir o mesmo link novamente.

{
  "viewer": {
    "url": "https://ram-aws-qa.carneiro.ai/view?computer_id=SEU_COMPUTADOR",
    "computer_id": "SEU_COMPUTADOR",
    "requires_login": true,
    "mode": "observe",
    "scope": "computer"
  }
}

Perguntas frequentes

Preciso clonar ou instalar o RAM?

Não. Use o endpoint MCP ou a API HTTP autenticada do serviço hospedado. O repositório do servidor é privado.

Existe um pacote SDK público para instalar?

Não há pacote público anunciado. Este guia usa fetch nativo; o caminho /docs/sdk permanece para links existentes.

Esta documentação é pública e não concede acesso à conta. Confirme capacidades e permissões na instalação autenticada. Segredos não pertencem à conversa do agente.