Para OpenClaw v2026.2 | Este artículo asume que ya completaste la instalación básica y deseas gestionar OpenClaw a través del navegador.
TL;DR: Accede a la Web UI en http://127.0.0.1:18789. Incluye las páginas Chat (conversación), Sessions (sesiones), Config (configuración), Nodes (nodos), Logs (registros) y Skills (habilidades). Canvas es un espacio de trabajo visual impulsado por el Agent que permite crear gráficos, paneles de control e interfaces interactivas. Acceso remoto: Tailscale Serve o túnel SSH. Canvas móvil disponible en apps iOS/Android.
Web Control UI
Acceder a la Web UI
Después de iniciar el Gateway, abre el navegador y accede a:
http://127.0.0.1:18789
Vista general de la interfaz
flowchart LR
subgraph WebUI["Web Control UI"]
Chat[Chat Conversación]
Sessions[Sessions Sesiones]
Config[Config Configuración]
Nodes[Nodes Nodos]
Logs[Logs Registros]
Skills[Skills Habilidades]
end
subgraph Features["Funciones"]
F1[Conversación en tiempo real]
F2[Gestión de sesiones]
F3[Edición de configuración]
F4[Control de nodos]
F5[Visualización de registros]
F6[Gestión de habilidades]
end
Chat --> F1
Sessions --> F2
Config --> F3
Nodes --> F4
Logs --> F5
Skills --> F6
Funciones de las páginas
Chat (Conversación)
| Función | Descripción |
|---|---|
| Entrada de mensajes | Soporta texto, Markdown, bloques de código |
| Historial de mensajes | Muestra el registro completo de conversación |
| Llamadas a herramientas | Muestra el proceso y resultado de las llamadas a herramientas |
| Proceso de pensamiento | Opcionalmente muestra el proceso de pensamiento del Agent |
| Estadísticas de Token | Muestra el uso de Token |
| Cambio de modelo | Cambia rápidamente el modelo en uso |
Sessions (Sesiones)
| Función | Descripción |
|---|---|
| Lista de sesiones | Ver todas las sesiones activas |
| Detalles de sesión | Ver el estado y configuración de una sesión individual |
| Operaciones de sesión | Reiniciar, eliminar, exportar sesiones |
| Cambio de sesión | Cambiar entre diferentes sesiones |
| Aislamiento de sesión | Ver sesiones por canal o usuario |
Config (Configuración)
| Función | Descripción |
|---|---|
| Edición de configuración | Editar archivos de configuración en línea |
| Validación de configuración | Validación de sintaxis en tiempo real |
| Actualización en caliente | Se aplica sin necesidad de reiniciar |
| Exportación de configuración | Exportar copia de seguridad de la configuración |
| Historial de configuración | Ver historial de cambios de configuración |
Nodes (Nodos)
| Función | Descripción |
|---|---|
| Lista de nodos | Ver los nodos de dispositivo conectados |
| Estado de nodos | Mostrar estado en línea y permisos |
| Control de nodos | Habilitar/deshabilitar funciones de nodos |
| Emparejamiento de nodos | Emparejar nuevos nodos |
Logs (Registros)
| Función | Descripción |
|---|---|
| Registros en tiempo real | Mostrar registros del sistema en streaming |
| Filtro de registros | Filtrar por nivel o módulo |
| Búsqueda de registros | Buscar registros por palabra clave |
| Exportación de registros | Descargar archivos de registro |
Skills (Habilidades)
| Función | Descripción |
|---|---|
| Lista de habilidades | Ver habilidades instaladas |
| Instalación de habilidades | Instalar habilidades desde ClawHub |
| Configuración de habilidades | Configurar parámetros de habilidades |
| Desactivación de habilidades | Habilitar/deshabilitar habilidades |
Configurar la Web UI
{
"web": {
"enabled": true,
"port": 18789,
"bind": "loopback",
"auth": {
"mode": "password",
"password": "your-secure-password"
},
"theme": "dark"
}
}
| Parámetro | Descripción | Valor predeterminado |
|---|---|---|
enabled |
Habilitar Web UI | true |
port |
Puerto de escucha | 18789 |
bind |
Dirección de enlace | loopback |
auth.mode |
Modo de autenticación | none |
auth.password |
Contraseña de acceso | - |
theme |
Tema | dark |
Acceso remoto
Método uno: Tailscale
{
"gateway": {
"tailscale": {
"mode": "serve"
}
}
}
Accede a través de la red Tailscale:
https://your-tailnet-name.ts.net
Método dos: Túnel SSH
# Crear un túnel SSH en local
ssh -L 18789:localhost:18789 user@remote-server
# Luego accede a
http://localhost:18789
Método tres: Proxy inverso
Usando Caddy o Nginx:
Caddyfile:
your-domain.com {
reverse_proxy localhost:18789
}
Canvas: Espacio de trabajo visual
¿Qué es Canvas?
Canvas es un espacio de trabajo visual impulsado por el Agent. El Agent puede:
- Crear gráficos dinámicos
- Construir interfaces interactivas
- Mostrar datos en tiempo real
- Generar paneles de control
- Incrustar contenido externo
Arquitectura de Canvas
flowchart TB
subgraph Agent["Agent"]
PROMPT[Analizar solicitud]
GEN[Generar A2UI]
EXEC[Ejecutar operación]
end
subgraph Canvas["Canvas Runtime"]
RENDER[Motor de renderizado]
STATE[Gestión de estado]
EVENT[Manejo de eventos]
end
subgraph UI["Interfaz de usuario"]
DISPLAY[Mostrar Canvas]
INTERACT[Interacción del usuario]
end
Agent --> Canvas
PROMPT --> GEN
GEN --> RENDER
RENDER --> DISPLAY
DISPLAY --> INTERACT
INTERACT --> EVENT
EVENT --> EXEC
Uso básico
Usar Canvas en el chat
Usuario: Crea una aplicación simple de lista de tareas
Agent: Voy a crear una aplicación Canvas de lista de tareas...
[Genera componentes Canvas]
Comandos de Canvas
| Comando | Descripción |
|---|---|
/canvas create |
Crear nuevo Canvas |
/canvas show |
Mostrar Canvas actual |
/canvas clear |
Vaciar Canvas |
/canvas export |
Exportar Canvas |
Componentes de Canvas
Componente de texto
canvas.text({
content: "Hello, World!",
style: {
fontSize: "24px",
color: "#333",
fontWeight: "bold"
}
})
Componente de botón
canvas.button({
label: "Click Me",
onClick: () => {
console.log("Button clicked!")
},
style: {
background: "#3b82f6",
color: "white"
}
})
Componente de lista
canvas.list({
items: ["Item 1", "Item 2", "Item 3"],
onSelect: (item) => {
console.log(`Selected: ${item}`)
}
})
Componente de gráfico
canvas.chart({
type: "bar",
data: {
labels: ["Jan", "Feb", "Mar"],
datasets: [{
label: "Revenue",
data: [100, 200, 150]
}]
}
})
Componente de formulario
canvas.form({
fields: [
{ name: "username", type: "text", label: "Username" },
{ name: "email", type: "email", label: "Email" },
{ name: "submit", type: "submit", label: "Submit" }
],
onSubmit: (data) => {
console.log("Form submitted:", data)
}
})
Ejemplos prácticos
Ejemplo uno: Panel de datos
// Código Canvas generado por el Agent
canvas.render(`
<Dashboard>
<Header title="Sales Dashboard" />
<Row>
<Card title="Total Revenue" value="$125,430" trend="+12%" />
<Card title="Active Users" value="3,245" trend="+5%" />
<Card title="Conversion Rate" value="4.2%" trend="-1%" />
</Row>
<Row>
<Chart type="line" data={revenueData} title="Revenue Trend" />
<Chart type="bar" data={usersData} title="User Growth" />
</Row>
</Dashboard>
`)
Ejemplo dos: Calculadora interactiva
canvas.render(`
<Calculator>
<Display value={display} />
<Keypad>
<Button onClick={() => input('7')}>7</Button>
<Button onClick={() => input('8')}>8</Button>
<Button onClick={() => input('9')}>9</Button>
<Button onClick={() => input('/')}>/</Button>
// ... más botones
</Keypad>
</Calculator>
`)
const state = { display: '0' }
function input(value) {
state.display = calculate(state.display, value)
canvas.update()
}
Ejemplo tres: Monitoreo en tiempo real
canvas.render(`
<Monitor>
<Header title="System Monitor" />
<Metrics>
<Metric
label="CPU Usage"
value={cpuUsage}
threshold={80}
unit="%"
/>
<Metric
label="Memory"
value={memoryUsed}
threshold={90}
unit="GB"
/>
<Metric
label="Disk I/O"
value={diskIO}
unit="MB/s"
/>
</Metrics>
<Chart type="line" data={historyData} realtime />
</Monitor>
`)
// Actualizar datos periódicamente
setInterval(() => {
cpuUsage = getCpuUsage()
memoryUsed = getMemoryUsed()
diskIO = getDiskIO()
canvas.update()
}, 1000)
Canvas API
canvas.render(template)
Renderiza el contenido del Canvas.
canvas.render(`
<Container>
<Text>Hello</Text>
</Container>
`)
canvas.update()
Actualiza el estado del Canvas.
state.count++
canvas.update()
canvas.clear()
Vacía el Canvas.
canvas.clear()
canvas.snapshot()
Obtiene una captura del Canvas.
const image = await canvas.snapshot()
canvas.eval(code)
Ejecuta código en el contexto del Canvas.
await canvas.eval(`
document.getElementById('counter').innerText = '${count}'
`)
Biblioteca de componentes A2UI
Canvas utiliza la biblioteca de componentes A2UI (Agent-to-UI):
Componentes de diseño
| Componente | Descripción |
|---|---|
<Container> |
Contenedor |
<Row> |
Diseño horizontal |
<Column> |
Diseño vertical |
<Grid> |
Diseño de cuadrícula |
<Card> |
Contenedor de tarjeta |
Visualización de datos
| Componente | Descripción |
|---|---|
<Text> |
Texto |
<Heading> |
Título |
<List> |
Lista |
<Table> |
Tabla |
<Chart> |
Gráfico |
Componentes interactivos
| Componente | Descripción |
|---|---|
<Button> |
Botón |
<Input> |
Campo de entrada |
<Select> |
Selección desplegable |
<Checkbox> |
Casilla de verificación |
<Form> |
Formulario |
Colaboración entre Canvas y Agent
Agent crea Canvas
Usuario: Ayúdame a crear un panel de seguimiento de progreso del proyecto
Agent: De acuerdo, voy a crear un Canvas de seguimiento de progreso del proyecto...
El Agent:
- Analiza los requisitos
- Diseña la disposición
- Genera el código Canvas
- Renderiza la interfaz
Canvas activa el Agent
Cuando el usuario interactúa con Canvas, puede activar operaciones del Agent:
canvas.button({
label: "Generate Report",
onClick: async () => {
await agent.send("Generar informe mensual")
}
})
Usar Canvas en diferentes dispositivos
macOS
Canvas se muestra como una ventana independiente:
openclaw canvas show
iOS
Canvas está integrado en la iOS Node App:
- Abre la app OpenClaw para iOS
- Cambia a la pestaña Canvas
Android
Canvas está integrado en la Android Node App:
- Abre la app OpenClaw para Android
- Cambia a la pestaña Canvas
Web
Canvas se muestra en la Web UI:
- Abre http://localhost:18789
- Haz clic en la pestaña Canvas
Configurar Canvas
{
"canvas": {
"enabled": true,
"theme": "dark",
"autoUpdate": true,
"updateInterval": 1000,
"maxComponents": 100,
"persistState": true
}
}
| Parámetro | Descripción | Valor predeterminado |
|---|---|---|
enabled |
Habilitar Canvas | true |
theme |
Tema | dark |
autoUpdate |
Actualización automática de estado | true |
updateInterval |
Intervalo de actualización (milisegundos) | 1000 |
maxComponents |
Número máximo de componentes | 100 |
persistState |
Persistir estado | true |
Resumen
Web Control UI y Canvas hacen de OpenClaw no solo un asistente de chat, sino una plataforma de interacción completa:
- Web UI: Panel de control en el navegador para gestionar todo
- Canvas: Espacio de trabajo visual impulsado por el Agent
- A2UI: Rica biblioteca de componentes para construir interfaces rápidamente
- Multiplataforma: Experiencia unificada en macOS, iOS, Android y Web
Con estas funciones, puedes hacer que el Agent cree paneles de control, interfaces de gestión y herramientas interactivas, ampliando enormemente los escenarios de aplicación del asistente IA.
Resumen de este artículo:
- Dominaste las funciones y el uso de la Web Control UI
- Aprendiste los conceptos básicos y componentes de Canvas
- Conociste la biblioteca de componentes A2UI
- Aprendiste cómo Canvas y el Agent colaboran
- Dominaste el uso de Canvas en múltiples dispositivos
Historial de actualizaciones:
- 2026-02-26: Publicación inicial, basada en OpenClaw v2026.2
Navegación de la serie:
- ← Anterior: Personalización de la personalidad del Agent
- → Siguiente: Enrutamiento multi-Agent y aislamiento de sesiones