---
read_when:
    - Depurar o configurar el acceso a WebChat
summary: Host estático WebChat en loopback y uso de Gateway WS para la UI de chat
title: WebChat
x-i18n:
    generated_at: "2026-04-05T12:57:34Z"
    model: gpt-5.4
    provider: openai
    source_hash: 2588be04e9ae38149bdf284bf4d75b6784d63899026d2351c4e0e7efdf05ff39
    source_path: web/webchat.md
    workflow: 15
---

# WebChat (UI WebSocket del Gateway)

Estado: la UI de chat SwiftUI de macOS/iOS se comunica directamente con el WebSocket del Gateway.

## Qué es

- Una UI de chat nativa para el gateway (sin navegador incrustado ni servidor estático local).
- Usa las mismas sesiones y reglas de enrutamiento que otros canales.
- Enrutamiento determinista: las respuestas siempre vuelven a WebChat.

## Inicio rápido

1. Inicia el gateway.
2. Abre la UI de WebChat (app de macOS/iOS) o la pestaña de chat de la Control UI.
3. Asegúrate de que esté configurada una ruta de autenticación válida del gateway (shared-secret de forma predeterminada,
   incluso en loopback).

## Cómo funciona (comportamiento)

- La UI se conecta al WebSocket del Gateway y usa `chat.history`, `chat.send` y `chat.inject`.
- `chat.history` está acotado por estabilidad: Gateway puede truncar campos de texto largos, omitir metadatos pesados y sustituir entradas sobredimensionadas por `[chat.history omitted: message too large]`.
- `chat.history` también está normalizado para visualización: se eliminan del texto visible las etiquetas de directivas de entrega en línea
  como `[[reply_to_*]]` y `[[audio_as_voice]]`, las cargas útiles XML de llamadas a herramientas en texto plano
  (incluidas `<tool_call>...</tool_call>`,
  `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`,
  `<function_calls>...</function_calls>` y bloques truncados de llamadas a herramientas), y
  los tokens de control del modelo filtrados en ASCII/de ancho completo,
  y se omiten las entradas del asistente cuyo texto visible completo sea solo el
  token silencioso exacto `NO_REPLY` / `no_reply`.
- `chat.inject` añade una nota del asistente directamente a la transcripción y la difunde a la UI (sin ejecución del agente).
- Las ejecuciones abortadas pueden mantener salida parcial visible del asistente en la UI.
- Gateway persiste en el historial de la transcripción el texto parcial abortado del asistente cuando existe salida almacenada en búfer, y marca esas entradas con metadatos de aborto.
- El historial siempre se obtiene del gateway (sin observación de archivos local).
- Si no se puede acceder al gateway, WebChat es de solo lectura.

## Panel de herramientas de agentes de la Control UI

- El panel de herramientas de `/agents` de la Control UI tiene dos vistas separadas:
  - **Available Right Now** usa `tools.effective(sessionKey=...)` y muestra lo que la sesión actual
    puede usar realmente en runtime, incluidas herramientas core, de plugins y propias del canal.
  - **Tool Configuration** usa `tools.catalog` y sigue centrado en perfiles, anulaciones y
    semántica de catálogo.
- La disponibilidad en runtime está acotada a la sesión. Cambiar de sesión en el mismo agente puede cambiar la
  lista de **Available Right Now**.
- El editor de configuración no implica disponibilidad en runtime; el acceso efectivo sigue la precedencia
  de políticas (`allow`/`deny`, anulaciones por agente y por proveedor/canal).

## Uso remoto

- El modo remoto tuneliza el WebSocket del gateway a través de SSH/Tailscale.
- No necesitas ejecutar un servidor WebChat independiente.

## Referencia de configuración (WebChat)

Configuración completa: [Configuración](/es/gateway/configuration)

Opciones de WebChat:

- `gateway.webchat.chatHistoryMaxChars`: recuento máximo de caracteres para campos de texto en respuestas de `chat.history`. Cuando una entrada de la transcripción supera este límite, Gateway trunca los campos de texto largos y puede sustituir mensajes sobredimensionados por un marcador. El cliente también puede enviar `maxChars` por solicitud para anular este valor predeterminado en una sola llamada a `chat.history`.

Opciones globales relacionadas:

- `gateway.port`, `gateway.bind`: host/puerto del WebSocket.
- `gateway.auth.mode`, `gateway.auth.token`, `gateway.auth.password`:
  autenticación shared-secret del WebSocket.
- `gateway.auth.allowTailscale`: la pestaña de chat de la Control UI del navegador puede usar encabezados de identidad de Tailscale
  Serve cuando está habilitado.
- `gateway.auth.mode: "trusted-proxy"`: autenticación de proxy inverso para clientes del navegador detrás de un origen de proxy **fuera de loopback** con reconocimiento de identidad (consulta [Autenticación de proxy de confianza](/es/gateway/trusted-proxy-auth)).
- `gateway.remote.url`, `gateway.remote.token`, `gateway.remote.password`: destino del gateway remoto.
- `session.*`: valores predeterminados para almacenamiento de sesiones y clave principal.
