chore(i18n): refresh es translations
This commit is contained in:
parent
b2744703ad
commit
2ea29d1a46
File diff suppressed because it is too large
Load Diff
@ -1,37 +1,33 @@
|
||||
---
|
||||
read_when:
|
||||
- Ampliar qa-lab o qa-channel
|
||||
- Agregar escenarios de QA respaldados por el repositorio
|
||||
- Crear una automatización de QA de mayor realismo en torno al panel de Gateway
|
||||
summary: Forma de la automatización privada de QA para qa-lab, qa-channel, escenarios con seed e informes de protocolo
|
||||
title: Automatización E2E de QA
|
||||
- Ampliación de qa-lab o qa-channel
|
||||
- Agregar escenarios de control de calidad respaldados por el repositorio
|
||||
- Creación de automatización de control de calidad de mayor realismo en torno al panel de Gateway
|
||||
summary: Forma de la automatización privada de control de calidad para qa-lab, qa-channel, escenarios con semillas e informes de protocolo
|
||||
title: Automatización E2E de control de calidad
|
||||
x-i18n:
|
||||
generated_at: "2026-04-18T04:59:15Z"
|
||||
generated_at: "2026-04-20T05:21:31Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: adf8c5f74e8fabdc8e9fd7ecd41afce8b60354c7dd24d92ac926d3c527927cd4
|
||||
source_hash: 34245ce871356caeab0d9e0eeeaa9fb4e408920a4a97ad27567fa365d8db17c7
|
||||
source_path: concepts/qa-e2e-automation.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Automatización E2E de QA
|
||||
# Automatización E2E de control de calidad
|
||||
|
||||
La pila privada de QA está pensada para ejercitar OpenClaw de una manera más realista,
|
||||
con forma de canal, que la que puede cubrir una sola prueba unitaria.
|
||||
La pila privada de control de calidad está pensada para ejercitar OpenClaw de una forma más realista y con forma de canal que una sola prueba unitaria.
|
||||
|
||||
Piezas actuales:
|
||||
|
||||
- `extensions/qa-channel`: canal de mensajes sintético con superficies de MD, canal, hilo,
|
||||
reacción, edición y eliminación.
|
||||
- `extensions/qa-lab`: interfaz de depuración y bus de QA para observar la transcripción,
|
||||
inyectar mensajes entrantes y exportar un informe en Markdown.
|
||||
- `qa/`: recursos seed respaldados por el repositorio para la tarea inicial y los
|
||||
escenarios base de QA.
|
||||
- `extensions/qa-channel`: canal de mensajes sintético con superficies de DM, canal, hilo, reacción, edición y eliminación.
|
||||
- `extensions/qa-lab`: interfaz de depuración y bus de control de calidad para observar la transcripción, inyectar mensajes entrantes y exportar un informe en Markdown.
|
||||
- `qa/`: recursos semilla respaldados por el repositorio para la tarea inicial y los escenarios base de control de calidad.
|
||||
|
||||
El flujo actual del operador de QA es un sitio de QA de dos paneles:
|
||||
El flujo actual del operador de control de calidad es un sitio de control de calidad de dos paneles:
|
||||
|
||||
- Izquierda: panel de Gateway (Control UI) con el agente.
|
||||
- Derecha: QA Lab, que muestra la transcripción tipo Slack y el plan del escenario.
|
||||
- Derecha: QA Lab, que muestra la transcripción estilo Slack y el plan del escenario.
|
||||
|
||||
Ejecútalo con:
|
||||
|
||||
@ -39,13 +35,9 @@ Ejecútalo con:
|
||||
pnpm qa:lab:up
|
||||
```
|
||||
|
||||
Eso compila el sitio de QA, inicia el carril de Gateway respaldado por Docker y expone la
|
||||
página de QA Lab, donde un operador o un bucle de automatización puede darle al agente una
|
||||
misión de QA, observar el comportamiento real del canal y registrar qué funcionó, qué falló o
|
||||
qué siguió bloqueado.
|
||||
Eso compila el sitio de control de calidad, inicia el carril de Gateway respaldado por Docker y expone la página de QA Lab donde un operador o un bucle de automatización puede darle al agente una misión de control de calidad, observar el comportamiento real del canal y registrar qué funcionó, qué falló o qué siguió bloqueado.
|
||||
|
||||
Para una iteración más rápida de la UI de QA Lab sin reconstruir la imagen de Docker cada vez,
|
||||
inicia la pila con un bundle de QA Lab montado por enlace:
|
||||
Para una iteración más rápida de la interfaz de QA Lab sin reconstruir la imagen de Docker cada vez, inicia la pila con un bundle de QA Lab montado con bind:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa docker-build-image
|
||||
@ -54,105 +46,73 @@ pnpm qa:lab:up:fast
|
||||
pnpm qa:lab:watch
|
||||
```
|
||||
|
||||
`qa:lab:up:fast` mantiene los servicios de Docker sobre una imagen precompilada y monta por enlace
|
||||
`extensions/qa-lab/web/dist` dentro del contenedor `qa-lab`. `qa:lab:watch`
|
||||
recompila ese bundle cuando hay cambios, y el navegador se recarga automáticamente cuando cambia el hash
|
||||
de recursos de QA Lab.
|
||||
`qa:lab:up:fast` mantiene los servicios de Docker sobre una imagen precompilada y monta con bind `extensions/qa-lab/web/dist` dentro del contenedor `qa-lab`. `qa:lab:watch` recompila ese bundle cuando hay cambios, y el navegador se recarga automáticamente cuando cambia el hash de recursos de QA Lab.
|
||||
|
||||
Para un carril smoke de Matrix con transporte real, ejecuta:
|
||||
Para un carril de humo de Matrix con transporte real, ejecuta:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa matrix
|
||||
```
|
||||
|
||||
Ese carril aprovisiona un homeserver Tuwunel desechable en Docker, registra usuarios temporales
|
||||
de controlador, SUT y observador, crea una sala privada y luego ejecuta el Plugin real de Matrix dentro
|
||||
de un proceso hijo de Gateway de QA. El carril de transporte en vivo mantiene la configuración del proceso hijo
|
||||
limitada al transporte bajo prueba, por lo que Matrix se ejecuta sin `qa-channel` en la configuración
|
||||
del proceso hijo. Escribe los artefactos de informe estructurado y un registro combinado de stdout/stderr
|
||||
en el directorio de salida de Matrix QA seleccionado. Para capturar también la salida externa de compilación/lanzamiento
|
||||
de `scripts/run-node.mjs`, establece `OPENCLAW_RUN_NODE_OUTPUT_LOG=<path>` en un archivo de registro local del repositorio.
|
||||
Ese carril aprovisiona un homeserver Tuwunel desechable en Docker, registra usuarios temporales de controlador, SUT y observador, crea una sala privada y luego ejecuta el plugin real de Matrix dentro de un proceso hijo de Gateway de control de calidad. El carril de transporte en vivo mantiene la configuración hija acotada al transporte bajo prueba, de modo que Matrix se ejecuta sin `qa-channel` en la configuración hija. Escribe los artefactos de informe estructurado y un registro combinado de stdout/stderr en el directorio de salida de QA de Matrix seleccionado. Para capturar también la salida externa de compilación/lanzamiento de `scripts/run-node.mjs`, establece `OPENCLAW_RUN_NODE_OUTPUT_LOG=<path>` en un archivo de registro local del repositorio.
|
||||
|
||||
Para un carril smoke de Telegram con transporte real, ejecuta:
|
||||
Para un carril de humo de Telegram con transporte real, ejecuta:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa telegram
|
||||
```
|
||||
|
||||
Ese carril apunta a un grupo privado real de Telegram en lugar de aprovisionar un servidor desechable.
|
||||
Requiere `OPENCLAW_QA_TELEGRAM_GROUP_ID`,
|
||||
`OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN` y
|
||||
`OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`, además de dos bots distintos en el mismo
|
||||
grupo privado. El bot SUT debe tener un nombre de usuario de Telegram, y la observación bot a bot
|
||||
funciona mejor cuando ambos bots tienen habilitado el modo de comunicación Bot-to-Bot
|
||||
en `@BotFather`.
|
||||
Ese carril apunta a un grupo privado real de Telegram en lugar de aprovisionar un servidor desechable. Requiere `OPENCLAW_QA_TELEGRAM_GROUP_ID`, `OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN` y `OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`, además de dos bots distintos en el mismo grupo privado. El bot SUT debe tener un nombre de usuario de Telegram, y la observación entre bots funciona mejor cuando ambos bots tienen habilitado el Bot-to-Bot Communication Mode en `@BotFather`.
|
||||
El comando sale con un código distinto de cero cuando falla cualquier escenario. Usa `--allow-failures` cuando quieras artefactos sin un código de salida fallido.
|
||||
|
||||
Los carriles de transporte en vivo ahora comparten un contrato más pequeño en lugar de que cada uno invente
|
||||
su propia forma de lista de escenarios.
|
||||
Los carriles de transporte en vivo ahora comparten un contrato más pequeño en lugar de que cada uno invente su propia forma de lista de escenarios:
|
||||
|
||||
`qa-channel` sigue siendo la amplia suite sintética de comportamiento del producto y no forma parte
|
||||
de la matriz de cobertura de transporte en vivo.
|
||||
`qa-channel` sigue siendo la suite amplia de comportamiento sintético del producto y no forma parte de la matriz de cobertura de transporte en vivo.
|
||||
|
||||
| Carril | Canary | Puerta por mención | Bloqueo por allowlist | Respuesta de nivel superior | Reanudación tras reinicio | Seguimiento en hilo | Aislamiento de hilo | Observación de reacciones | Comando help |
|
||||
| -------- | ------ | ------------------ | --------------------- | --------------------------- | ------------------------- | ------------------- | ------------------- | ------------------------- | ------------ |
|
||||
| Matrix | x | x | x | x | x | x | x | x | |
|
||||
| Telegram | x | | | | | | | | x |
|
||||
| Carril | Canary | Restricción por mención | Bloqueo por lista de permitidos | Respuesta de nivel superior | Reanudación tras reinicio | Seguimiento en hilo | Aislamiento de hilo | Observación de reacciones | Comando de ayuda |
|
||||
| -------- | ------ | ----------------------- | -------------------------------- | --------------------------- | ------------------------- | ------------------- | ------------------- | ------------------------- | ---------------- |
|
||||
| Matrix | x | x | x | x | x | x | x | x | |
|
||||
| Telegram | x | | | | | | | | x |
|
||||
|
||||
Esto mantiene `qa-channel` como la amplia suite de comportamiento del producto, mientras que Matrix,
|
||||
Telegram y futuros transportes en vivo comparten una lista explícita de comprobación del contrato
|
||||
de transporte.
|
||||
Esto mantiene `qa-channel` como la suite amplia de comportamiento del producto, mientras que Matrix, Telegram y futuros transportes en vivo comparten una lista de verificación explícita del contrato de transporte.
|
||||
|
||||
Para un carril de VM Linux desechable sin incorporar Docker en la ruta de QA, ejecuta:
|
||||
Para un carril en VM Linux desechable sin incorporar Docker en la ruta de control de calidad, ejecuta:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
|
||||
```
|
||||
|
||||
Esto inicia un huésped nuevo de Multipass, instala dependencias, compila OpenClaw
|
||||
dentro del huésped, ejecuta `qa suite` y luego copia el informe y resumen normales de QA de vuelta a
|
||||
`.artifacts/qa-e2e/...` en el host.
|
||||
Esto arranca un invitado nuevo de Multipass, instala dependencias, compila OpenClaw dentro del invitado, ejecuta `qa suite` y luego copia el informe y resumen normales de control de calidad de vuelta a `.artifacts/qa-e2e/...` en el host.
|
||||
Reutiliza el mismo comportamiento de selección de escenarios que `qa suite` en el host.
|
||||
Las ejecuciones del host y de Multipass ejecutan varios escenarios seleccionados en paralelo
|
||||
con workers de Gateway aislados de forma predeterminada, hasta 64 workers o la cantidad de escenarios
|
||||
seleccionados. Usa `--concurrency <count>` para ajustar la cantidad de workers, o
|
||||
`--concurrency 1` para ejecución en serie.
|
||||
Las ejecuciones en vivo reenvían las entradas de autenticación de QA compatibles que son prácticas para el
|
||||
huésped: claves de proveedor basadas en variables de entorno, la ruta de configuración del proveedor en vivo de QA y
|
||||
`CODEX_HOME` cuando esté presente. Mantén `--output-dir` bajo la raíz del repositorio para que el huésped
|
||||
pueda escribir de vuelta a través del espacio de trabajo montado.
|
||||
Las ejecuciones de suite en host y en Multipass ejecutan varios escenarios seleccionados en paralelo con workers de Gateway aislados por defecto. `qa-channel` usa por defecto una concurrencia de 4, limitada por el número de escenarios seleccionados. Usa `--concurrency <count>` para ajustar el número de workers, o `--concurrency 1` para ejecución en serie.
|
||||
El comando sale con un código distinto de cero cuando falla cualquier escenario. Usa `--allow-failures` cuando quieras artefactos sin un código de salida fallido.
|
||||
Las ejecuciones en vivo reenvían las entradas de autenticación de control de calidad compatibles que son prácticas para el invitado: claves de proveedor basadas en entorno, la ruta de configuración del proveedor en vivo de control de calidad y `CODEX_HOME` cuando está presente. Mantén `--output-dir` bajo la raíz del repositorio para que el invitado pueda escribir de vuelta a través del espacio de trabajo montado.
|
||||
|
||||
## Seeds respaldados por el repositorio
|
||||
## Semillas respaldadas por el repositorio
|
||||
|
||||
Los recursos seed viven en `qa/`:
|
||||
Los recursos semilla viven en `qa/`:
|
||||
|
||||
- `qa/scenarios/index.md`
|
||||
- `qa/scenarios/<theme>/*.md`
|
||||
|
||||
Estos están intencionalmente en git para que el plan de QA sea visible tanto para las personas como para el
|
||||
agente.
|
||||
Estos están intencionalmente en git para que el plan de control de calidad sea visible tanto para humanos como para el agente.
|
||||
|
||||
`qa-lab` debe seguir siendo un ejecutor genérico de Markdown. Cada archivo Markdown de escenario es
|
||||
la fuente de verdad para una ejecución de prueba y debe definir:
|
||||
`qa-lab` debe seguir siendo un ejecutor genérico de Markdown. Cada archivo Markdown de escenario es la fuente de verdad para una ejecución de prueba y debe definir:
|
||||
|
||||
- metadatos del escenario
|
||||
- metadatos opcionales de categoría, capacidad, carril y riesgo
|
||||
- referencias de documentación y código
|
||||
- requisitos opcionales de Plugin
|
||||
- referencias a documentación y código
|
||||
- requisitos opcionales de plugin
|
||||
- parche opcional de configuración de Gateway
|
||||
- el `qa-flow` ejecutable
|
||||
|
||||
La superficie de ejecución reutilizable que respalda `qa-flow` puede seguir siendo genérica
|
||||
y transversal. Por ejemplo, los escenarios Markdown pueden combinar ayudantes del lado del transporte
|
||||
con ayudantes del lado del navegador que controlan la Control UI integrada a través de la
|
||||
interfaz `browser.request` de Gateway sin agregar un ejecutor de caso especial.
|
||||
La superficie de tiempo de ejecución reutilizable que respalda `qa-flow` puede seguir siendo genérica y transversal. Por ejemplo, los escenarios Markdown pueden combinar helpers del lado del transporte con helpers del lado del navegador que controlan la Control UI incrustada a través de la superficie `browser.request` de Gateway sin agregar un ejecutor de caso especial.
|
||||
|
||||
Los archivos de escenario deben agruparse por capacidad del producto en lugar de por carpeta del árbol
|
||||
de código fuente. Mantén estables los ID de escenario cuando los archivos se muevan; usa `docsRefs` y `codeRefs`
|
||||
para la trazabilidad de implementación.
|
||||
Los archivos de escenario deben agruparse por capacidad del producto en lugar de por carpeta del árbol de código fuente. Mantén estables los IDs de escenario cuando se muevan archivos; usa `docsRefs` y `codeRefs` para la trazabilidad de implementación.
|
||||
|
||||
La lista base debe seguir siendo lo suficientemente amplia como para cubrir:
|
||||
La lista base debe seguir siendo lo bastante amplia como para cubrir:
|
||||
|
||||
- chat por MD y canal
|
||||
- chat por DM y por canal
|
||||
- comportamiento de hilos
|
||||
- ciclo de vida de acciones de mensajes
|
||||
- callbacks de Cron
|
||||
@ -160,38 +120,31 @@ La lista base debe seguir siendo lo suficientemente amplia como para cubrir:
|
||||
- cambio de modelo
|
||||
- transferencia a subagente
|
||||
- lectura del repositorio y de la documentación
|
||||
- una pequeña tarea de compilación como Lobster Invaders
|
||||
- una tarea pequeña de compilación como Lobster Invaders
|
||||
|
||||
## Carriles de proveedor simulado
|
||||
## Carriles de simulación de proveedores
|
||||
|
||||
`qa suite` tiene dos carriles locales de proveedor simulado:
|
||||
`qa suite` tiene dos carriles locales de simulación de proveedores:
|
||||
|
||||
- `mock-openai` es el simulador de OpenClaw consciente del escenario. Sigue siendo el
|
||||
carril simulado determinista predeterminado para QA respaldado por el repositorio y compuertas de paridad.
|
||||
- `aimock` inicia un servidor de proveedor respaldado por AIMock para cobertura experimental de protocolo,
|
||||
fixtures, grabación/reproducción y caos. Es complementario y no reemplaza al despachador de escenarios
|
||||
`mock-openai`.
|
||||
- `mock-openai` es el simulador de OpenClaw consciente de escenarios. Sigue siendo el carril de simulación determinista predeterminado para el control de calidad respaldado por el repositorio y las compuertas de paridad.
|
||||
- `aimock` inicia un servidor de proveedor respaldado por AIMock para cobertura experimental de protocolo, fixtures, grabación/reproducción y caos. Es aditivo y no reemplaza el despachador de escenarios de `mock-openai`.
|
||||
|
||||
La implementación del carril de proveedor vive en `extensions/qa-lab/src/providers/`.
|
||||
Cada proveedor es dueño de sus valores predeterminados, el arranque del servidor local, la configuración
|
||||
del modelo de Gateway, las necesidades de preparación del perfil de autenticación y los indicadores de capacidad
|
||||
live/mock. El código compartido de suite y Gateway debe enrutar a través del registro de proveedores
|
||||
en lugar de ramificarse según los nombres de proveedor.
|
||||
Cada proveedor es dueño de sus valores predeterminados, el arranque del servidor local, la configuración del modelo de Gateway, las necesidades de preparación del perfil de autenticación y los indicadores de capacidad de vivo/simulado. El código compartido de suite y Gateway debe enrutar a través del registro de proveedores en lugar de bifurcar según nombres de proveedor.
|
||||
|
||||
## Adaptadores de transporte
|
||||
|
||||
`qa-lab` es dueño de una interfaz genérica de transporte para escenarios Markdown de QA.
|
||||
`qa-channel` es el primer adaptador sobre esa interfaz, pero el objetivo de diseño es más amplio:
|
||||
canales futuros, reales o sintéticos, deberían integrarse en el mismo ejecutor de suite en lugar
|
||||
de agregar un ejecutor de QA específico para cada transporte.
|
||||
`qa-lab` es dueño de una superficie genérica de transporte para escenarios de control de calidad en Markdown.
|
||||
`qa-channel` es el primer adaptador sobre esa superficie, pero el objetivo de diseño es más amplio:
|
||||
los futuros canales reales o sintéticos deben conectarse al mismo ejecutor de suite en lugar de agregar un ejecutor de control de calidad específico por transporte.
|
||||
|
||||
A nivel de arquitectura, la división es:
|
||||
|
||||
- `qa-lab` es dueño de la ejecución genérica de escenarios, la concurrencia de workers, la escritura de artefactos y los informes.
|
||||
- el adaptador de transporte es dueño de la configuración de Gateway, la preparación, la observación de entrada y salida, las acciones de transporte y el estado de transporte normalizado.
|
||||
- los archivos Markdown de escenarios bajo `qa/scenarios/` definen la ejecución de prueba; `qa-lab` proporciona la superficie de ejecución reutilizable que los ejecuta.
|
||||
- `qa-lab` es dueño de la ejecución genérica de escenarios, la concurrencia de workers, la escritura de artefactos y la generación de informes.
|
||||
- el adaptador de transporte es dueño de la configuración de Gateway, la preparación, la observación entrante y saliente, las acciones de transporte y el estado de transporte normalizado.
|
||||
- los archivos de escenario Markdown en `qa/scenarios/` definen la ejecución de prueba; `qa-lab` proporciona la superficie de tiempo de ejecución reutilizable que los ejecuta.
|
||||
|
||||
La guía de adopción dirigida a mantenedores para nuevos adaptadores de canal se encuentra en
|
||||
La guía de adopción orientada a mantenedores para nuevos adaptadores de canal vive en
|
||||
[Testing](/es/help/testing#adding-a-channel-to-qa).
|
||||
|
||||
## Informes
|
||||
@ -204,8 +157,7 @@ El informe debe responder:
|
||||
- Qué siguió bloqueado
|
||||
- Qué escenarios de seguimiento vale la pena agregar
|
||||
|
||||
Para comprobaciones de carácter y estilo, ejecuta el mismo escenario con múltiples referencias de modelos en vivo
|
||||
y escribe un informe Markdown evaluado:
|
||||
Para verificaciones de carácter y estilo, ejecuta el mismo escenario en múltiples refs de modelos en vivo y escribe un informe evaluado en Markdown:
|
||||
|
||||
```bash
|
||||
pnpm openclaw qa character-eval \
|
||||
@ -224,30 +176,12 @@ pnpm openclaw qa character-eval \
|
||||
--judge-concurrency 16
|
||||
```
|
||||
|
||||
El comando ejecuta procesos hijo locales de Gateway de QA, no Docker. Los escenarios de evaluación de carácter
|
||||
deben establecer la personalidad mediante `SOUL.md`, y luego ejecutar turnos de usuario normales
|
||||
como chat, ayuda del espacio de trabajo y pequeñas tareas con archivos. No se le debe decir al
|
||||
modelo candidato que está siendo evaluado. El comando conserva cada transcripción completa,
|
||||
registra estadísticas básicas de ejecución y luego pide a los modelos jueces en modo fast con
|
||||
razonamiento `xhigh` que clasifiquen las ejecuciones por naturalidad, vibra y humor.
|
||||
Usa `--blind-judge-models` al comparar proveedores: el prompt del juez sigue recibiendo
|
||||
cada transcripción y estado de ejecución, pero las referencias candidatas se reemplazan por
|
||||
etiquetas neutras como `candidate-01`; el informe vuelve a mapear las clasificaciones a las referencias reales
|
||||
después del análisis.
|
||||
Las ejecuciones candidatas usan `high` thinking de forma predeterminada, con `xhigh` para los modelos de OpenAI
|
||||
que lo admiten. Sustituye un candidato específico en línea con
|
||||
`--model provider/model,thinking=<level>`. `--thinking <level>` sigue estableciendo una
|
||||
alternativa global, y la forma antigua `--model-thinking <provider/model=level>` se
|
||||
mantiene por compatibilidad.
|
||||
Las referencias candidatas de OpenAI usan el modo fast de forma predeterminada para que se use procesamiento prioritario
|
||||
cuando el proveedor lo admita. Agrega `,fast`, `,no-fast` o `,fast=false` en línea cuando
|
||||
un solo candidato o juez necesite una sustitución. Pasa `--fast` solo cuando quieras
|
||||
forzar el modo fast para todos los modelos candidatos. Las duraciones de candidatos y jueces se
|
||||
registran en el informe para análisis comparativo, pero los prompts de los jueces indican explícitamente
|
||||
que no se clasifique por velocidad.
|
||||
Tanto las ejecuciones de modelos candidatos como las de los jueces usan concurrencia 16 de forma predeterminada. Reduce
|
||||
`--concurrency` o `--judge-concurrency` cuando los límites del proveedor o la presión del Gateway local
|
||||
hagan que una ejecución sea demasiado ruidosa.
|
||||
El comando ejecuta procesos hijo locales de Gateway de control de calidad, no Docker. Los escenarios de evaluación de carácter deben establecer la persona mediante `SOUL.md`, y luego ejecutar turnos ordinarios de usuario como chat, ayuda del espacio de trabajo y pequeñas tareas de archivos. No se le debe decir al modelo candidato que está siendo evaluado. El comando conserva cada transcripción completa, registra estadísticas básicas de ejecución y luego pide a los modelos jueces en modo rápido con razonamiento `xhigh` que clasifiquen las ejecuciones por naturalidad, vibra y humor.
|
||||
Usa `--blind-judge-models` al comparar proveedores: el prompt del juez sigue recibiendo cada transcripción y estado de ejecución, pero las refs candidatas se reemplazan por etiquetas neutrales como `candidate-01`; el informe vuelve a mapear las clasificaciones a las refs reales después del análisis.
|
||||
Las ejecuciones candidatas usan por defecto thinking `high`, con `xhigh` para modelos OpenAI que lo admiten. Sustituye un candidato específico en línea con
|
||||
`--model provider/model,thinking=<level>`. `--thinking <level>` sigue estableciendo un valor de respaldo global, y la forma anterior `--model-thinking <provider/model=level>` se mantiene por compatibilidad.
|
||||
Las refs candidatas de OpenAI usan por defecto el modo rápido para que se use procesamiento prioritario cuando el proveedor lo admita. Agrega `,fast`, `,no-fast` o `,fast=false` en línea cuando un solo candidato o juez necesite una sustitución. Pasa `--fast` solo cuando quieras forzar el modo rápido para cada modelo candidato. Las duraciones de candidatos y jueces se registran en el informe para análisis comparativo, pero los prompts de los jueces indican explícitamente que no deben clasificar por velocidad.
|
||||
Las ejecuciones de modelos candidatos y jueces usan ambas por defecto una concurrencia de 16. Reduce `--concurrency` o `--judge-concurrency` cuando los límites del proveedor o la presión local sobre Gateway hagan que una ejecución sea demasiado ruidosa.
|
||||
Cuando no se pasa ningún `--model` candidato, la evaluación de carácter usa por defecto
|
||||
`openai/gpt-5.4`, `openai/gpt-5.2`, `openai/gpt-5`, `anthropic/claude-opus-4-6`,
|
||||
`anthropic/claude-sonnet-4-6`, `zai/glm-5.1`,
|
||||
@ -261,4 +195,4 @@ Cuando no se pasa ningún `--judge-model`, los jueces usan por defecto
|
||||
|
||||
- [Testing](/es/help/testing)
|
||||
- [QA Channel](/es/channels/qa-channel)
|
||||
- [Dashboard](/web/dashboard)
|
||||
- [Panel](/web/dashboard)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
1753
docs/es/help/faq.md
1753
docs/es/help/faq.md
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,24 +1,24 @@
|
||||
---
|
||||
read_when:
|
||||
- Necesitas un método de instalación distinto del inicio rápido de Primeros pasos
|
||||
- Quieres desplegar en una plataforma en la nube
|
||||
- Quieres implementar en una plataforma en la nube
|
||||
- Necesitas actualizar, migrar o desinstalar
|
||||
summary: 'Instalar OpenClaw: script de instalación, npm/pnpm/bun, desde el código fuente, Docker y más'
|
||||
title: Instalación
|
||||
summary: Instalar OpenClaw — script de instalación, npm/pnpm/bun, desde el código fuente, Docker y más
|
||||
title: Instalar
|
||||
x-i18n:
|
||||
generated_at: "2026-04-05T12:45:45Z"
|
||||
generated_at: "2026-04-20T05:21:26Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: eca17c76a2a66166b3d8cda9dc3144ab920d30ad0ed2a220eb9389d7a383ba5d
|
||||
source_hash: ad0a5fdbbf13dcaf2fed6840f35aa22b2e9e458509509f98303c8d87c2556a6f
|
||||
source_path: install/index.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Instalación
|
||||
# Instalar
|
||||
|
||||
## Recomendado: script de instalación
|
||||
|
||||
La forma más rápida de instalar. Detecta tu sistema operativo, instala Node si es necesario, instala OpenClaw e inicia el onboarding.
|
||||
La forma más rápida de instalar. Detecta tu sistema operativo, instala Node si hace falta, instala OpenClaw e inicia la configuración guiada.
|
||||
|
||||
<Tabs>
|
||||
<Tab title="macOS / Linux / WSL2">
|
||||
@ -33,7 +33,7 @@ La forma más rápida de instalar. Detecta tu sistema operativo, instala Node si
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
Para instalar sin ejecutar el onboarding:
|
||||
Para instalar sin ejecutar la configuración guiada:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="macOS / Linux / WSL2">
|
||||
@ -48,31 +48,30 @@ Para instalar sin ejecutar el onboarding:
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
Para ver todos los flags y opciones de CI/automatización, consulta [Elementos internos del instalador](/install/installer).
|
||||
Para ver todas las banderas y opciones de CI/automatización, consulta [Detalles internos del instalador](/es/install/installer).
|
||||
|
||||
## Requisitos del sistema
|
||||
|
||||
- **Node 24** (recomendado) o Node 22.14+ — el script de instalación se encarga de esto automáticamente
|
||||
- **macOS, Linux o Windows** — se admiten tanto Windows nativo como WSL2; WSL2 es más estable. Consulta [Windows](/platforms/windows).
|
||||
- **macOS, Linux o Windows** — se admiten tanto Windows nativo como WSL2; WSL2 es más estable. Consulta [Windows](/es/platforms/windows).
|
||||
- `pnpm` solo es necesario si compilas desde el código fuente
|
||||
|
||||
## Métodos de instalación alternativos
|
||||
|
||||
### Instalador con prefijo local (`install-cli.sh`)
|
||||
|
||||
Úsalo cuando quieras mantener OpenClaw y Node bajo un prefijo local como
|
||||
Úsalo cuando quieras que OpenClaw y Node se mantengan bajo un prefijo local como
|
||||
`~/.openclaw`, sin depender de una instalación de Node en todo el sistema:
|
||||
|
||||
```bash
|
||||
curl -fsSL https://openclaw.ai/install-cli.sh | bash
|
||||
```
|
||||
|
||||
Admite instalaciones npm de forma predeterminada, además de instalaciones desde checkout git dentro del mismo
|
||||
flujo con prefijo. Referencia completa: [Elementos internos del instalador](/install/installer#install-clish).
|
||||
Admite instalaciones con npm de forma predeterminada, además de instalaciones desde una copia de git dentro del mismo flujo de prefijo. Referencia completa: [Detalles internos del instalador](/es/install/installer#install-clish).
|
||||
|
||||
### npm, pnpm o bun
|
||||
|
||||
Si ya gestionas Node por tu cuenta:
|
||||
Si ya administras Node por tu cuenta:
|
||||
|
||||
<Tabs>
|
||||
<Tab title="npm">
|
||||
@ -117,17 +116,17 @@ SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm install -g openclaw@latest
|
||||
|
||||
### Desde el código fuente
|
||||
|
||||
Para colaboradores o cualquiera que quiera ejecutarlo desde un checkout local:
|
||||
Para colaboradores o cualquier persona que quiera ejecutar desde una copia local del repositorio:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/openclaw/openclaw.git
|
||||
cd openclaw
|
||||
pnpm install && pnpm ui:build && pnpm build
|
||||
pnpm install && pnpm build && pnpm ui:build
|
||||
pnpm link --global
|
||||
openclaw onboard --install-daemon
|
||||
```
|
||||
|
||||
O bien omite el enlace y usa `pnpm openclaw ...` desde dentro del repositorio. Consulta [Setup](/start/setup) para ver los flujos completos de desarrollo.
|
||||
O bien, omite el enlace y usa `pnpm openclaw ...` desde dentro del repositorio. Consulta [Configuración](/es/start/setup) para ver los flujos de desarrollo completos.
|
||||
|
||||
### Instalar desde GitHub main
|
||||
|
||||
@ -138,64 +137,64 @@ npm install -g github:openclaw/openclaw#main
|
||||
### Contenedores y gestores de paquetes
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Docker" href="/install/docker" icon="container">
|
||||
Despliegues en contenedor o headless.
|
||||
<Card title="Docker" href="/es/install/docker" icon="container">
|
||||
Implementaciones en contenedores o sin interfaz.
|
||||
</Card>
|
||||
<Card title="Podman" href="/install/podman" icon="container">
|
||||
Alternativa en contenedor rootless a Docker.
|
||||
<Card title="Podman" href="/es/install/podman" icon="container">
|
||||
Alternativa de contenedores sin privilegios a Docker.
|
||||
</Card>
|
||||
<Card title="Nix" href="/install/nix" icon="snowflake">
|
||||
Instalación declarativa mediante Nix flake.
|
||||
<Card title="Nix" href="/es/install/nix" icon="snowflake">
|
||||
Instalación declarativa mediante flake de Nix.
|
||||
</Card>
|
||||
<Card title="Ansible" href="/install/ansible" icon="server">
|
||||
<Card title="Ansible" href="/es/install/ansible" icon="server">
|
||||
Aprovisionamiento automatizado de flotas.
|
||||
</Card>
|
||||
<Card title="Bun" href="/install/bun" icon="zap">
|
||||
Uso solo de CLI mediante el runtime de Bun.
|
||||
<Card title="Bun" href="/es/install/bun" icon="zap">
|
||||
Uso solo de la CLI mediante el runtime de Bun.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## Verificar la instalación
|
||||
|
||||
```bash
|
||||
openclaw --version # confirmar que la CLI está disponible
|
||||
openclaw doctor # comprobar si hay problemas de configuración
|
||||
openclaw gateway status # verificar que la Gateway está en ejecución
|
||||
openclaw --version # confirma que la CLI esté disponible
|
||||
openclaw doctor # comprueba si hay problemas de configuración
|
||||
openclaw gateway status # verifica que Gateway esté en ejecución
|
||||
```
|
||||
|
||||
Si quieres inicio administrado después de la instalación:
|
||||
|
||||
- macOS: LaunchAgent mediante `openclaw onboard --install-daemon` o `openclaw gateway install`
|
||||
- Linux/WSL2: servicio de usuario systemd mediante los mismos comandos
|
||||
- Windows nativo: primero Scheduled Task, con fallback a un elemento de inicio de sesión por usuario en la carpeta Startup si se deniega la creación de la tarea
|
||||
- Windows nativo: primero una tarea programada, con un elemento de inicio de sesión en la carpeta de Inicio por usuario como alternativa si se deniega la creación de la tarea
|
||||
|
||||
## Alojamiento y despliegue
|
||||
## Hosting e implementación
|
||||
|
||||
Despliega OpenClaw en un servidor en la nube o VPS:
|
||||
Implementa OpenClaw en un servidor en la nube o VPS:
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="VPS" href="/vps">Cualquier VPS Linux</Card>
|
||||
<Card title="Docker VM" href="/install/docker-vm-runtime">Pasos compartidos de Docker</Card>
|
||||
<Card title="Kubernetes" href="/install/kubernetes">K8s</Card>
|
||||
<Card title="Fly.io" href="/install/fly">Fly.io</Card>
|
||||
<Card title="Hetzner" href="/install/hetzner">Hetzner</Card>
|
||||
<Card title="GCP" href="/install/gcp">Google Cloud</Card>
|
||||
<Card title="Azure" href="/install/azure">Azure</Card>
|
||||
<Card title="Railway" href="/install/railway">Railway</Card>
|
||||
<Card title="Render" href="/install/render">Render</Card>
|
||||
<Card title="Northflank" href="/install/northflank">Northflank</Card>
|
||||
<Card title="VPS" href="/es/vps">Cualquier VPS de Linux</Card>
|
||||
<Card title="Docker VM" href="/es/install/docker-vm-runtime">Pasos compartidos de Docker</Card>
|
||||
<Card title="Kubernetes" href="/es/install/kubernetes">K8s</Card>
|
||||
<Card title="Fly.io" href="/es/install/fly">Fly.io</Card>
|
||||
<Card title="Hetzner" href="/es/install/hetzner">Hetzner</Card>
|
||||
<Card title="GCP" href="/es/install/gcp">Google Cloud</Card>
|
||||
<Card title="Azure" href="/es/install/azure">Azure</Card>
|
||||
<Card title="Railway" href="/es/install/railway">Railway</Card>
|
||||
<Card title="Render" href="/es/install/render">Render</Card>
|
||||
<Card title="Northflank" href="/es/install/northflank">Northflank</Card>
|
||||
</CardGroup>
|
||||
|
||||
## Actualizar, migrar o desinstalar
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card title="Updating" href="/install/updating" icon="refresh-cw">
|
||||
<Card title="Actualización" href="/es/install/updating" icon="refresh-cw">
|
||||
Mantén OpenClaw actualizado.
|
||||
</Card>
|
||||
<Card title="Migrating" href="/install/migrating" icon="arrow-right">
|
||||
Muévete a una máquina nueva.
|
||||
<Card title="Migración" href="/es/install/migrating" icon="arrow-right">
|
||||
Muévete a una nueva máquina.
|
||||
</Card>
|
||||
<Card title="Uninstall" href="/install/uninstall" icon="trash-2">
|
||||
<Card title="Desinstalar" href="/es/install/uninstall" icon="trash-2">
|
||||
Elimina OpenClaw por completo.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
@ -207,13 +206,13 @@ Si la instalación se completó correctamente pero `openclaw` no se encuentra en
|
||||
```bash
|
||||
node -v # ¿Node está instalado?
|
||||
npm prefix -g # ¿Dónde están los paquetes globales?
|
||||
echo "$PATH" # ¿Está el directorio global bin en PATH?
|
||||
echo "$PATH" # ¿El directorio global de binarios está en PATH?
|
||||
```
|
||||
|
||||
Si `$(npm prefix -g)/bin` no está en tu `$PATH`, añádelo al archivo de inicio de tu shell (`~/.zshrc` o `~/.bashrc`):
|
||||
Si `$(npm prefix -g)/bin` no está en tu `$PATH`, añádelo a tu archivo de inicio del shell (`~/.zshrc` o `~/.bashrc`):
|
||||
|
||||
```bash
|
||||
export PATH="$(npm prefix -g)/bin:$PATH"
|
||||
```
|
||||
|
||||
Luego abre un terminal nuevo. Consulta [Node setup](/install/node) para más detalles.
|
||||
Luego abre una terminal nueva. Consulta [Configuración de Node](/es/install/node) para más detalles.
|
||||
|
||||
@ -2,14 +2,14 @@
|
||||
read_when:
|
||||
- Instalar OpenClaw en Windows
|
||||
- Elegir entre Windows nativo y WSL2
|
||||
- Buscar el estado de la app complementaria de Windows
|
||||
summary: 'Compatibilidad con Windows: rutas de instalación nativa y WSL2, daemon y advertencias actuales'
|
||||
- Consultar el estado de la aplicación complementaria de Windows
|
||||
summary: 'Compatibilidad con Windows: rutas de instalación nativas y con WSL2, daemon y limitaciones actuales'
|
||||
title: Windows
|
||||
x-i18n:
|
||||
generated_at: "2026-04-05T12:49:00Z"
|
||||
generated_at: "2026-04-20T05:21:27Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 7d9819206bdd65cf03519c1bc73ed0c7889b0ab842215ea94343262300adfd14
|
||||
source_hash: 1e7451c785a1d75c809522ad93e2c44a00b211f77f14c5c489fd0b01840d3fe2
|
||||
source_path: platforms/windows.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -17,62 +17,62 @@ x-i18n:
|
||||
# Windows
|
||||
|
||||
OpenClaw es compatible tanto con **Windows nativo** como con **WSL2**. WSL2 es la
|
||||
ruta más estable y la recomendada para la experiencia completa: la CLI, el Gateway y las
|
||||
herramientas se ejecutan dentro de Linux con compatibilidad total. Windows nativo funciona para
|
||||
el uso principal de CLI y Gateway, con algunas advertencias indicadas más abajo.
|
||||
ruta más estable y la recomendada para la experiencia completa: la CLI, Gateway y
|
||||
las herramientas se ejecutan dentro de Linux con compatibilidad total. Windows nativo funciona para
|
||||
el uso básico de la CLI y de Gateway, con algunas limitaciones indicadas más abajo.
|
||||
|
||||
Están previstas apps complementarias nativas para Windows.
|
||||
Las aplicaciones complementarias nativas para Windows están previstas.
|
||||
|
||||
## WSL2 (recomendado)
|
||||
|
||||
- [Primeros pasos](/es/start/getting-started) (úsalo dentro de WSL)
|
||||
- [Instalación y actualizaciones](/install/updating)
|
||||
- [Instalación y actualizaciones](/es/install/updating)
|
||||
- Guía oficial de WSL2 (Microsoft): [https://learn.microsoft.com/windows/wsl/install](https://learn.microsoft.com/windows/wsl/install)
|
||||
|
||||
## Estado de Windows nativo
|
||||
|
||||
Los flujos de CLI nativos de Windows están mejorando, pero WSL2 sigue siendo la ruta recomendada.
|
||||
Los flujos de la CLI nativa en Windows están mejorando, pero WSL2 sigue siendo la ruta recomendada.
|
||||
|
||||
Qué funciona bien hoy en Windows nativo:
|
||||
Lo que funciona bien hoy en Windows nativo:
|
||||
|
||||
- instalador del sitio web mediante `install.ps1`
|
||||
- uso local de CLI como `openclaw --version`, `openclaw doctor` y `openclaw plugins list --json`
|
||||
- prueba smoke integrada de agente/proveedor local como:
|
||||
- uso local de la CLI como `openclaw --version`, `openclaw doctor` y `openclaw plugins list --json`
|
||||
- pruebas básicas integradas de agente/proveedor local como:
|
||||
|
||||
```powershell
|
||||
openclaw agent --local --agent main --thinking low -m "Reply with exactly WINDOWS-HATCH-OK."
|
||||
```
|
||||
|
||||
Advertencias actuales:
|
||||
Limitaciones actuales:
|
||||
|
||||
- `openclaw onboard --non-interactive` todavía espera un gateway local accesible a menos que pases `--skip-health`
|
||||
- `openclaw onboard --non-interactive --install-daemon` y `openclaw gateway install` intentan primero usar Tareas programadas de Windows
|
||||
- si se deniega la creación de la tarea programada, OpenClaw recurre a un elemento de inicio de sesión por usuario en la carpeta Startup y arranca el gateway inmediatamente
|
||||
- si `schtasks` se cuelga o deja de responder, OpenClaw ahora aborta rápidamente esa ruta y recurre al respaldo en lugar de quedarse bloqueado para siempre
|
||||
- las Tareas programadas siguen siendo la opción preferida cuando están disponibles porque proporcionan mejor estado del supervisor
|
||||
- `openclaw onboard --non-interactive` sigue esperando un gateway local accesible a menos que pases `--skip-health`
|
||||
- `openclaw onboard --non-interactive --install-daemon` y `openclaw gateway install` intentan primero usar Windows Scheduled Tasks
|
||||
- si se deniega la creación de Scheduled Task, OpenClaw recurre a un elemento de inicio de sesión por usuario en la carpeta Startup del usuario y arranca el gateway inmediatamente
|
||||
- si `schtasks` se bloquea o deja de responder, OpenClaw ahora abandona esa ruta rápidamente y recurre a la alternativa en lugar de quedarse colgado indefinidamente
|
||||
- Scheduled Tasks siguen siendo la opción preferida cuando están disponibles porque proporcionan un mejor estado del supervisor
|
||||
|
||||
Si solo quieres la CLI nativa, sin instalación del servicio gateway, usa una de estas opciones:
|
||||
Si quieres solo la CLI nativa, sin instalar el servicio de gateway, usa una de estas opciones:
|
||||
|
||||
```powershell
|
||||
openclaw onboard --non-interactive --skip-health
|
||||
openclaw gateway run
|
||||
```
|
||||
|
||||
Si sí quieres un inicio gestionado en Windows nativo:
|
||||
Si sí quieres inicio administrado en Windows nativo:
|
||||
|
||||
```powershell
|
||||
openclaw gateway install
|
||||
openclaw gateway status --json
|
||||
```
|
||||
|
||||
Si la creación de la tarea programada está bloqueada, el modo de servicio de respaldo seguirá iniciándose automáticamente después del inicio de sesión mediante la carpeta Startup del usuario actual.
|
||||
Si la creación de Scheduled Task está bloqueada, el modo de servicio alternativo seguirá iniciándose automáticamente después del inicio de sesión mediante la carpeta Startup del usuario actual.
|
||||
|
||||
## Gateway
|
||||
|
||||
- [Runbook del Gateway](/gateway)
|
||||
- [Configuración](/gateway/configuration)
|
||||
- [Guía operativa de Gateway](/es/gateway)
|
||||
- [Configuración](/es/gateway/configuration)
|
||||
|
||||
## Instalación del servicio Gateway (CLI)
|
||||
## Instalación del servicio de Gateway (CLI)
|
||||
|
||||
Dentro de WSL2:
|
||||
|
||||
@ -92,7 +92,7 @@ O bien:
|
||||
openclaw configure
|
||||
```
|
||||
|
||||
Selecciona **Gateway service** cuando se te pida.
|
||||
Selecciona **Servicio de Gateway** cuando se te solicite.
|
||||
|
||||
Reparar/migrar:
|
||||
|
||||
@ -100,12 +100,12 @@ Reparar/migrar:
|
||||
openclaw doctor
|
||||
```
|
||||
|
||||
## Inicio automático del Gateway antes del inicio de sesión en Windows
|
||||
## Inicio automático de Gateway antes del inicio de sesión en Windows
|
||||
|
||||
Para configuraciones sin interfaz, asegúrate de que toda la cadena de arranque funcione incluso cuando nadie haya iniciado sesión en
|
||||
Para configuraciones sin interfaz, asegúrate de que toda la cadena de arranque se ejecute incluso cuando nadie inicie sesión en
|
||||
Windows.
|
||||
|
||||
### 1) Mantener los servicios de usuario activos sin iniciar sesión
|
||||
### 1) Mantener los servicios de usuario en ejecución sin iniciar sesión
|
||||
|
||||
Dentro de WSL:
|
||||
|
||||
@ -113,7 +113,7 @@ Dentro de WSL:
|
||||
sudo loginctl enable-linger "$(whoami)"
|
||||
```
|
||||
|
||||
### 2) Instalar el servicio de usuario del gateway de OpenClaw
|
||||
### 2) Instalar el servicio de usuario de Gateway de OpenClaw
|
||||
|
||||
Dentro de WSL:
|
||||
|
||||
@ -129,7 +129,7 @@ En PowerShell como administrador:
|
||||
schtasks /create /tn "WSL Boot" /tr "wsl.exe -d Ubuntu --exec /bin/true" /sc onstart /ru SYSTEM
|
||||
```
|
||||
|
||||
Sustituye `Ubuntu` por el nombre de tu distribución obtenido con:
|
||||
Reemplaza `Ubuntu` por el nombre de tu distribución obtenido con:
|
||||
|
||||
```powershell
|
||||
wsl --list --verbose
|
||||
@ -137,19 +137,19 @@ wsl --list --verbose
|
||||
|
||||
### Verificar la cadena de inicio
|
||||
|
||||
Después de un reinicio (antes de iniciar sesión en Windows), comprueba desde WSL:
|
||||
Después de reiniciar (antes de iniciar sesión en Windows), comprueba desde WSL:
|
||||
|
||||
```bash
|
||||
systemctl --user is-enabled openclaw-gateway.service
|
||||
systemctl --user status openclaw-gateway.service --no-pager
|
||||
```
|
||||
|
||||
## Avanzado: exponer servicios WSL por LAN (portproxy)
|
||||
## Avanzado: exponer servicios de WSL por la LAN (portproxy)
|
||||
|
||||
WSL tiene su propia red virtual. Si otra máquina necesita llegar a un servicio
|
||||
que se ejecuta **dentro de WSL** (SSH, un servidor local de TTS o el Gateway), debes
|
||||
reenviar un puerto de Windows a la IP actual de WSL. La IP de WSL cambia después de reinicios,
|
||||
por lo que puede que necesites actualizar la regla de reenvío.
|
||||
WSL tiene su propia red virtual. Si otra máquina necesita acceder a un servicio
|
||||
que se ejecuta **dentro de WSL** (SSH, un servidor TTS local o Gateway), debes
|
||||
redirigir un puerto de Windows a la IP actual de WSL. La IP de WSL cambia después de reinicios,
|
||||
así que es posible que tengas que actualizar la regla de reenvío.
|
||||
|
||||
Ejemplo (PowerShell **como administrador**):
|
||||
|
||||
@ -165,7 +165,7 @@ netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=$ListenPor
|
||||
connectaddress=$WslIp connectport=$TargetPort
|
||||
```
|
||||
|
||||
Permite el puerto en el Firewall de Windows (una sola vez):
|
||||
Permite el puerto en Windows Firewall (una sola vez):
|
||||
|
||||
```powershell
|
||||
New-NetFirewallRule -DisplayName "WSL SSH $ListenPort" -Direction Inbound `
|
||||
@ -182,31 +182,31 @@ netsh interface portproxy add v4tov4 listenport=$ListenPort listenaddress=0.0.0.
|
||||
|
||||
Notas:
|
||||
|
||||
- El SSH desde otra máquina apunta a la **IP del host de Windows** (ejemplo: `ssh user@windows-host -p 2222`).
|
||||
- Los nodos remotos deben apuntar a una URL de Gateway **alcanzable** (no `127.0.0.1`); usa
|
||||
- El acceso SSH desde otra máquina apunta a la **IP del host Windows** (ejemplo: `ssh user@windows-host -p 2222`).
|
||||
- Los nodos remotos deben apuntar a una URL de Gateway **accesible** (no `127.0.0.1`); usa
|
||||
`openclaw status --all` para confirmarlo.
|
||||
- Usa `listenaddress=0.0.0.0` para acceso por LAN; `127.0.0.1` lo mantiene solo local.
|
||||
- Si quieres esto automático, registra una Tarea programada para ejecutar el paso de
|
||||
- Si quieres automatizar esto, registra una Scheduled Task para ejecutar el paso de
|
||||
actualización al iniciar sesión.
|
||||
|
||||
## Instalación paso a paso de WSL2
|
||||
|
||||
### 1) Instalar WSL2 + Ubuntu
|
||||
|
||||
Abre PowerShell (administrador):
|
||||
Abre PowerShell (Admin):
|
||||
|
||||
```powershell
|
||||
wsl --install
|
||||
# Or pick a distro explicitly:
|
||||
# O elige una distribución explícitamente:
|
||||
wsl --list --online
|
||||
wsl --install -d Ubuntu-24.04
|
||||
```
|
||||
|
||||
Reinicia si Windows lo solicita.
|
||||
|
||||
### 2) Habilitar systemd (obligatorio para instalar el gateway)
|
||||
### 2) Habilitar systemd (obligatorio para instalar Gateway)
|
||||
|
||||
En tu terminal WSL:
|
||||
En tu terminal de WSL:
|
||||
|
||||
```bash
|
||||
sudo tee /etc/wsl.conf >/dev/null <<'EOF'
|
||||
@ -229,20 +229,30 @@ systemctl --user status
|
||||
|
||||
### 3) Instalar OpenClaw (dentro de WSL)
|
||||
|
||||
Sigue el flujo de Linux de Primeros pasos dentro de WSL:
|
||||
Para una configuración inicial normal dentro de WSL, sigue el flujo de primeros pasos de Linux:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/openclaw/openclaw.git
|
||||
cd openclaw
|
||||
pnpm install
|
||||
pnpm ui:build # auto-installs UI deps on first run
|
||||
pnpm build
|
||||
openclaw onboard
|
||||
pnpm ui:build
|
||||
pnpm openclaw onboard --install-daemon
|
||||
```
|
||||
|
||||
Si estás desarrollando desde el código fuente en lugar de realizar la configuración inicial, usa el
|
||||
bucle de desarrollo desde [Configuración](/es/start/setup):
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
# Solo la primera ejecución (o después de restablecer la configuración/espacio de trabajo local de OpenClaw)
|
||||
pnpm openclaw setup
|
||||
pnpm gateway:watch
|
||||
```
|
||||
|
||||
Guía completa: [Primeros pasos](/es/start/getting-started)
|
||||
|
||||
## App complementaria de Windows
|
||||
## Aplicación complementaria de Windows
|
||||
|
||||
Todavía no tenemos una app complementaria para Windows. Las contribuciones son bienvenidas si quieres
|
||||
hacerla realidad.
|
||||
Todavía no tenemos una aplicación complementaria para Windows. Las contribuciones son bienvenidas si quieres
|
||||
contribuir a que esto suceda.
|
||||
|
||||
@ -1,14 +1,14 @@
|
||||
---
|
||||
read_when:
|
||||
- Configurar una máquina nueva
|
||||
- Quieres “lo último y lo mejor” sin romper tu configuración personal
|
||||
- Quieres lo último y lo mejor sin romper tu configuración personal
|
||||
summary: Configuración avanzada y flujos de trabajo de desarrollo para OpenClaw
|
||||
title: Configuración
|
||||
x-i18n:
|
||||
generated_at: "2026-04-05T12:54:29Z"
|
||||
generated_at: "2026-04-20T05:21:26Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: be4e280dde7f3a224345ca557ef2fb35a9c9db8520454ff63794ac6f8d4e71e7
|
||||
source_hash: 773cdbef5f38b069303b5e13fca5fcdc28f082746869f17b8b92aab1610b95a8
|
||||
source_path: start/setup.md
|
||||
workflow: 15
|
||||
---
|
||||
@ -16,42 +16,42 @@ x-i18n:
|
||||
# Configuración
|
||||
|
||||
<Note>
|
||||
Si vas a configurarlo por primera vez, empieza con [Primeros pasos](/es/start/getting-started).
|
||||
Para detalles de onboarding, consulta [Onboarding (CLI)](/es/start/wizard).
|
||||
Si vas a configurar por primera vez, empieza con [Primeros pasos](/es/start/getting-started).
|
||||
Para obtener detalles sobre la incorporación, consulta [Incorporación (CLI)](/es/start/wizard).
|
||||
</Note>
|
||||
|
||||
## En resumen
|
||||
## Resumen rápido
|
||||
|
||||
- **La personalización vive fuera del repositorio:** `~/.openclaw/workspace` (espacio de trabajo) + `~/.openclaw/openclaw.json` (configuración).
|
||||
- **La personalización vive fuera del repositorio:** `~/.openclaw/workspace` (workspace) + `~/.openclaw/openclaw.json` (configuración).
|
||||
- **Flujo de trabajo estable:** instala la app de macOS; deja que ejecute el Gateway incluido.
|
||||
- **Flujo de trabajo de vanguardia:** ejecuta el Gateway tú mismo mediante `pnpm gateway:watch`, y luego deja que la app de macOS se conecte en modo Local.
|
||||
|
||||
## Requisitos previos (desde el código fuente)
|
||||
|
||||
- Se recomienda Node 24 (Node 22 LTS, actualmente `22.14+`, sigue siendo compatible)
|
||||
- Se prefiere `pnpm` (o Bun si usas intencionalmente el [flujo de trabajo con Bun](/es/install/bun))
|
||||
- Se prefiere `pnpm` (o Bun si usas intencionalmente el [flujo de trabajo de Bun](/es/install/bun))
|
||||
- Docker (opcional; solo para configuración en contenedores/e2e — consulta [Docker](/es/install/docker))
|
||||
|
||||
## Estrategia de personalización (para que las actualizaciones no perjudiquen)
|
||||
|
||||
Si quieres que esté “100 % adaptado a mí” _y_ tener actualizaciones fáciles, mantén tu personalización en:
|
||||
Si quieres algo “100 % adaptado a mí” _y_ actualizaciones sencillas, mantén tu personalización en:
|
||||
|
||||
- **Configuración:** `~/.openclaw/openclaw.json` (similar a JSON/JSON5)
|
||||
- **Espacio de trabajo:** `~/.openclaw/workspace` (Skills, prompts, memorias; conviértelo en un repositorio git privado)
|
||||
- **Configuración:** `~/.openclaw/openclaw.json` (tipo JSON/JSON5)
|
||||
- **Workspace:** `~/.openclaw/workspace` (Skills, prompts, memorias; conviértelo en un repositorio git privado)
|
||||
|
||||
Inicialízalo una vez:
|
||||
Inicializa una vez:
|
||||
|
||||
```bash
|
||||
openclaw setup
|
||||
```
|
||||
|
||||
Desde dentro de este repositorio, usa la entrada local de la CLI:
|
||||
Desde dentro de este repositorio, usa la entrada de CLI local:
|
||||
|
||||
```bash
|
||||
openclaw setup
|
||||
```
|
||||
|
||||
Si todavía no tienes una instalación global, ejecútalo mediante `pnpm openclaw setup` (o `bun run openclaw setup` si estás usando el flujo de trabajo con Bun).
|
||||
Si aún no tienes una instalación global, ejecútalo con `pnpm openclaw setup` (o `bun run openclaw setup` si estás usando el flujo de trabajo de Bun).
|
||||
|
||||
## Ejecutar el Gateway desde este repositorio
|
||||
|
||||
@ -64,116 +64,118 @@ node openclaw.mjs gateway --port 18789 --verbose
|
||||
## Flujo de trabajo estable (primero la app de macOS)
|
||||
|
||||
1. Instala e inicia **OpenClaw.app** (barra de menús).
|
||||
2. Completa la lista de comprobación de onboarding/permisos (solicitudes TCC).
|
||||
2. Completa la lista de comprobación de incorporación/permisos (avisos de TCC).
|
||||
3. Asegúrate de que Gateway esté en **Local** y en ejecución (la app lo gestiona).
|
||||
4. Vincula superficies (ejemplo: WhatsApp):
|
||||
4. Vincula las superficies (ejemplo: WhatsApp):
|
||||
|
||||
```bash
|
||||
openclaw channels login
|
||||
```
|
||||
|
||||
5. Verificación rápida:
|
||||
5. Comprobación rápida:
|
||||
|
||||
```bash
|
||||
openclaw health
|
||||
```
|
||||
|
||||
Si el onboarding no está disponible en tu compilación:
|
||||
Si la incorporación no está disponible en tu compilación:
|
||||
|
||||
- Ejecuta `openclaw setup`, luego `openclaw channels login`, y después inicia el Gateway manualmente (`openclaw gateway`).
|
||||
- Ejecuta `openclaw setup`, luego `openclaw channels login` y después inicia el Gateway manualmente (`openclaw gateway`).
|
||||
|
||||
## Flujo de trabajo de vanguardia (Gateway en una terminal)
|
||||
|
||||
Objetivo: trabajar en el Gateway de TypeScript, obtener recarga en caliente y mantener conectada la UI de la app de macOS.
|
||||
Objetivo: trabajar en el Gateway de TypeScript, obtener recarga en caliente y mantener conectada la interfaz de la app de macOS.
|
||||
|
||||
### 0) (Opcional) Ejecutar también la app de macOS desde el código fuente
|
||||
### 0) (Opcional) Ejecuta también la app de macOS desde el código fuente
|
||||
|
||||
Si también quieres que la app de macOS esté en la versión de vanguardia:
|
||||
Si también quieres la app de macOS en la versión más reciente:
|
||||
|
||||
```bash
|
||||
./scripts/restart-mac.sh
|
||||
```
|
||||
|
||||
### 1) Iniciar el Gateway de desarrollo
|
||||
### 1) Inicia el Gateway de desarrollo
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
# Solo en la primera ejecución (o después de restablecer la configuración/workspace local de OpenClaw)
|
||||
pnpm openclaw setup
|
||||
pnpm gateway:watch
|
||||
```
|
||||
|
||||
`gateway:watch` ejecuta el gateway en modo watch y se recarga ante cambios relevantes en el código fuente,
|
||||
la configuración y los metadatos de plugins incluidos.
|
||||
`gateway:watch` ejecuta el gateway en modo observación y recarga con cambios relevantes en el código fuente, la configuración y los metadatos de plugins incluidos.
|
||||
`pnpm openclaw setup` es el paso único de inicialización de la configuración/workspace local para un checkout nuevo.
|
||||
`pnpm gateway:watch` no recompila `dist/control-ui`, así que vuelve a ejecutar `pnpm ui:build` después de cambios en `ui/` o usa `pnpm ui:dev` mientras desarrollas la Control UI.
|
||||
|
||||
Si usas intencionalmente el flujo de trabajo con Bun, los comandos equivalentes son:
|
||||
Si estás usando intencionalmente el flujo de trabajo de Bun, los comandos equivalentes son:
|
||||
|
||||
```bash
|
||||
bun install
|
||||
# Solo en la primera ejecución (o después de restablecer la configuración/workspace local de OpenClaw)
|
||||
bun run openclaw setup
|
||||
bun run gateway:watch
|
||||
```
|
||||
|
||||
### 2) Apuntar la app de macOS a tu Gateway en ejecución
|
||||
### 2) Apunta la app de macOS a tu Gateway en ejecución
|
||||
|
||||
En **OpenClaw.app**:
|
||||
|
||||
- Modo de conexión: **Local**
|
||||
La app se conectará al gateway en ejecución en el puerto configurado.
|
||||
|
||||
### 3) Verificar
|
||||
### 3) Verifica
|
||||
|
||||
- El estado del Gateway en la app debería mostrar **“Using existing gateway …”**
|
||||
- El estado de Gateway en la app debería mostrar **“Using existing gateway …”**
|
||||
- O mediante la CLI:
|
||||
|
||||
```bash
|
||||
openclaw health
|
||||
```
|
||||
|
||||
### Problemas habituales
|
||||
### Errores comunes
|
||||
|
||||
- **Puerto incorrecto:** Gateway WS usa de forma predeterminada `ws://127.0.0.1:18789`; mantén la app y la CLI en el mismo puerto.
|
||||
- **Puerto incorrecto:** el WS de Gateway usa por defecto `ws://127.0.0.1:18789`; mantén la app y la CLI en el mismo puerto.
|
||||
- **Dónde vive el estado:**
|
||||
- Estado de canal/proveedor: `~/.openclaw/credentials/`
|
||||
- Perfiles de autenticación del modelo: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json`
|
||||
- Estado de canales/proveedores: `~/.openclaw/credentials/`
|
||||
- Perfiles de autenticación de modelos: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json`
|
||||
- Sesiones: `~/.openclaw/agents/<agentId>/sessions/`
|
||||
- Registros: `/tmp/openclaw/`
|
||||
|
||||
## Mapa de almacenamiento de credenciales
|
||||
|
||||
Usa esto al depurar autenticación o decidir qué respaldar:
|
||||
Úsalo al depurar autenticación o decidir qué respaldar:
|
||||
|
||||
- **WhatsApp**: `~/.openclaw/credentials/whatsapp/<accountId>/creds.json`
|
||||
- **Token del bot de Telegram**: config/env o `channels.telegram.tokenFile` (solo archivo normal; se rechazan enlaces simbólicos)
|
||||
- **Token del bot de Discord**: config/env o SecretRef (proveedores env/file/exec)
|
||||
- **Token de bot de Telegram**: config/env o `channels.telegram.tokenFile` (solo archivo normal; se rechazan los enlaces simbólicos)
|
||||
- **Token de bot de Discord**: config/env o SecretRef (proveedores env/file/exec)
|
||||
- **Tokens de Slack**: config/env (`channels.slack.*`)
|
||||
- **Listas de permitidos de emparejamiento**:
|
||||
- `~/.openclaw/credentials/<channel>-allowFrom.json` (cuenta predeterminada)
|
||||
- `~/.openclaw/credentials/<channel>-<accountId>-allowFrom.json` (cuentas no predeterminadas)
|
||||
- **Perfiles de autenticación del modelo**: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json`
|
||||
- **Carga útil opcional de secrets respaldados por archivo**: `~/.openclaw/secrets.json`
|
||||
- **Perfiles de autenticación de modelos**: `~/.openclaw/agents/<agentId>/agent/auth-profiles.json`
|
||||
- **Carga útil de secretos respaldados por archivo (opcional)**: `~/.openclaw/secrets.json`
|
||||
- **Importación heredada de OAuth**: `~/.openclaw/credentials/oauth.json`
|
||||
Más detalles: [Seguridad](/es/gateway/security#credential-storage-map).
|
||||
|
||||
## Actualización (sin destrozar tu configuración)
|
||||
|
||||
- Mantén `~/.openclaw/workspace` y `~/.openclaw/` como “tus cosas”; no pongas prompts/configuración personales en el repositorio `openclaw`.
|
||||
- Para actualizar el código fuente: `git pull` + el paso de instalación de tu gestor de paquetes elegido (`pnpm install` de forma predeterminada; `bun install` para el flujo de trabajo con Bun) + sigue usando el comando `gateway:watch` correspondiente.
|
||||
- Para actualizar el código fuente: `git pull` + el paso de instalación del gestor de paquetes que elijas (`pnpm install` de forma predeterminada; `bun install` para el flujo de trabajo de Bun) + sigue usando el comando `gateway:watch` correspondiente.
|
||||
|
||||
## Linux (servicio de usuario systemd)
|
||||
|
||||
Las instalaciones de Linux usan un servicio de usuario de systemd. De forma predeterminada, systemd detiene los
|
||||
servicios de usuario al cerrar sesión o en inactividad, lo que mata el Gateway. Onboarding intenta habilitar
|
||||
lingering por ti (puede pedir sudo). Si sigue desactivado, ejecuta:
|
||||
Las instalaciones de Linux usan un servicio de **usuario** de systemd. De forma predeterminada, systemd detiene los servicios de usuario al cerrar sesión o por inactividad, lo que mata el Gateway. La incorporación intenta habilitar el modo persistente por ti (puede pedir sudo). Si sigue desactivado, ejecuta:
|
||||
|
||||
```bash
|
||||
sudo loginctl enable-linger $USER
|
||||
```
|
||||
|
||||
Para servidores siempre activos o multiusuario, considera un servicio de **sistema** en lugar de un
|
||||
servicio de usuario (no requiere lingering). Consulta [Manual operativo del Gateway](/es/gateway) para ver las notas sobre systemd.
|
||||
Para servidores siempre activos o multiusuario, considera un servicio de **sistema** en lugar de un servicio de usuario (no hace falta habilitar persistencia). Consulta el [manual operativo de Gateway](/es/gateway) para ver las notas sobre systemd.
|
||||
|
||||
## Documentación relacionada
|
||||
|
||||
- [Manual operativo del Gateway](/es/gateway) (flags, supervisión, puertos)
|
||||
- [Configuración del Gateway](/es/gateway/configuration) (esquema de configuración + ejemplos)
|
||||
- [Manual operativo de Gateway](/es/gateway) (flags, supervisión, puertos)
|
||||
- [Configuración de Gateway](/es/gateway/configuration) (esquema de configuración + ejemplos)
|
||||
- [Discord](/es/channels/discord) y [Telegram](/es/channels/telegram) (etiquetas de respuesta + ajustes de replyToMode)
|
||||
- [Configuración del asistente OpenClaw](/start/openclaw)
|
||||
- [Configuración del asistente OpenClaw](/es/start/openclaw)
|
||||
- [app de macOS](/es/platforms/macos) (ciclo de vida del gateway)
|
||||
|
||||
@ -1,28 +1,28 @@
|
||||
---
|
||||
read_when:
|
||||
- Agregar automatización del navegador controlada por el agente
|
||||
- Depuración de por qué openclaw está interfiriendo con tu propio Chrome
|
||||
- Depurar por qué openclaw está interfiriendo con tu propio Chrome
|
||||
- Implementar la configuración y el ciclo de vida del navegador en la app de macOS
|
||||
summary: Servicio integrado de control del navegador + comandos de acción
|
||||
title: Navegador (gestionado por OpenClaw)
|
||||
title: Navegador (administrado por OpenClaw)
|
||||
x-i18n:
|
||||
generated_at: "2026-04-14T13:04:31Z"
|
||||
generated_at: "2026-04-20T05:21:57Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: ae9ef725f544d4236d229f498c7187871c69bd18d31069b30a7e67fac53166a2
|
||||
source_hash: 3f7d37b34ba48dc7c38f8c2e77f8bb97af987eac6a874ebfc921f950fb59de4b
|
||||
source_path: tools/browser.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# Navegador (gestionado por openclaw)
|
||||
# Navegador (administrado por openclaw)
|
||||
|
||||
OpenClaw puede ejecutar un **perfil dedicado de Chrome/Brave/Edge/Chromium** que el agente controla.
|
||||
Está aislado de tu navegador personal y se gestiona mediante un pequeño
|
||||
servicio de control local dentro del Gateway (solo loopback).
|
||||
Está aislado de tu navegador personal y se administra mediante un pequeño servicio local
|
||||
de control dentro de Gateway (solo loopback).
|
||||
|
||||
Vista para principiantes:
|
||||
|
||||
- Piénsalo como un **navegador separado, solo para el agente**.
|
||||
- Piensa en esto como un **navegador separado, solo para el agente**.
|
||||
- El perfil `openclaw` **no** toca el perfil de tu navegador personal.
|
||||
- El agente puede **abrir pestañas, leer páginas, hacer clic y escribir** en un entorno seguro.
|
||||
- El perfil integrado `user` se conecta a tu sesión real de Chrome con inicio de sesión mediante Chrome MCP.
|
||||
@ -31,11 +31,11 @@ Vista para principiantes:
|
||||
|
||||
- Un perfil de navegador separado llamado **openclaw** (acento naranja de forma predeterminada).
|
||||
- Control determinista de pestañas (listar/abrir/enfocar/cerrar).
|
||||
- Acciones del agente (clic/escritura/arrastrar/seleccionar), instantáneas, capturas de pantalla y PDF.
|
||||
- Acciones del agente (clic/escribir/arrastrar/seleccionar), snapshots, capturas de pantalla, PDF.
|
||||
- Compatibilidad opcional con varios perfiles (`openclaw`, `work`, `remote`, ...).
|
||||
|
||||
Este navegador **no** es tu navegador de uso diario. Es una superficie segura y aislada para
|
||||
la automatización y verificación por parte del agente.
|
||||
Este navegador **no** es tu navegador principal del día a día. Es una superficie
|
||||
segura y aislada para la automatización y verificación por parte del agente.
|
||||
|
||||
## Inicio rápido
|
||||
|
||||
@ -46,16 +46,16 @@ openclaw browser --browser-profile openclaw open https://example.com
|
||||
openclaw browser --browser-profile openclaw snapshot
|
||||
```
|
||||
|
||||
Si aparece “Browser disabled”, actívalo en la configuración (ver abajo) y reinicia el
|
||||
Si ves “Browser disabled”, actívalo en la configuración (consulta abajo) y reinicia
|
||||
Gateway.
|
||||
|
||||
Si `openclaw browser` falta por completo, o el agente dice que la herramienta de navegador
|
||||
no está disponible, ve a [Falta el comando o la herramienta de navegador](/es/tools/browser#missing-browser-command-or-tool).
|
||||
Si `openclaw browser` no aparece en absoluto, o el agente dice que la herramienta de navegador
|
||||
no está disponible, ve a [Falta el comando o la herramienta del navegador](/es/tools/browser#missing-browser-command-or-tool).
|
||||
|
||||
## Control del Plugin
|
||||
|
||||
La herramienta `browser` predeterminada ahora es un Plugin integrado que se envía habilitado de
|
||||
forma predeterminada. Eso significa que puedes desactivarlo o reemplazarlo sin quitar el resto del
|
||||
La herramienta `browser` predeterminada ahora es un Plugin incluido que se envía activado
|
||||
de forma predeterminada. Eso significa que puedes desactivarlo o reemplazarlo sin quitar el resto del
|
||||
sistema de plugins de OpenClaw:
|
||||
|
||||
```json5
|
||||
@ -70,33 +70,33 @@ sistema de plugins de OpenClaw:
|
||||
}
|
||||
```
|
||||
|
||||
Desactiva el Plugin integrado antes de instalar otro Plugin que proporcione el
|
||||
Desactiva el Plugin incluido antes de instalar otro plugin que proporcione el
|
||||
mismo nombre de herramienta `browser`. La experiencia predeterminada del navegador necesita ambos:
|
||||
|
||||
- `plugins.entries.browser.enabled` no desactivado
|
||||
- `browser.enabled=true`
|
||||
|
||||
Si desactivas solo el Plugin, el CLI de navegador integrado (`openclaw browser`),
|
||||
el método del gateway (`browser.request`), la herramienta del agente y el servicio
|
||||
predeterminado de control del navegador desaparecen juntos. Tu configuración `browser.*` permanece intacta para que un
|
||||
Plugin de reemplazo la reutilice.
|
||||
Si desactivas solo el plugin, la CLI de navegador incluida (`openclaw browser`),
|
||||
el método de gateway (`browser.request`), la herramienta del agente y el servicio predeterminado de control del navegador
|
||||
desaparecen juntos. Tu configuración `browser.*` permanece intacta para que un
|
||||
plugin de reemplazo la reutilice.
|
||||
|
||||
El Plugin de navegador integrado ahora también es propietario de la implementación del runtime del navegador.
|
||||
El núcleo conserva solo los helpers compartidos del Plugin SDK más reexportaciones de compatibilidad para
|
||||
rutas de importación internas antiguas. En la práctica, quitar o reemplazar el paquete del Plugin
|
||||
de navegador elimina el conjunto de funciones del navegador en lugar de dejar detrás un segundo runtime
|
||||
El Plugin de navegador incluido ahora también es propietario de la implementación del runtime del navegador.
|
||||
El núcleo conserva solo helpers compartidos del Plugin SDK, además de reexportaciones de compatibilidad para
|
||||
rutas de importación internas más antiguas. En la práctica, quitar o reemplazar el paquete del plugin del navegador
|
||||
elimina el conjunto de funciones del navegador en lugar de dejar detrás un segundo runtime
|
||||
propiedad del núcleo.
|
||||
|
||||
Los cambios en la configuración del navegador siguen requiriendo reiniciar el Gateway para que el Plugin integrado
|
||||
Los cambios en la configuración del navegador siguen requiriendo reiniciar Gateway para que el Plugin incluido
|
||||
pueda volver a registrar su servicio de navegador con la nueva configuración.
|
||||
|
||||
## Falta el comando o la herramienta de navegador
|
||||
## Falta el comando o la herramienta del navegador
|
||||
|
||||
Si `openclaw browser` pasa a ser de repente un comando desconocido después de una actualización, o
|
||||
el agente informa que falta la herramienta de navegador, la causa más común es una lista restrictiva
|
||||
Si `openclaw browser` de repente pasa a ser un comando desconocido después de una actualización, o
|
||||
el agente informa de que falta la herramienta del navegador, la causa más común es una lista restrictiva
|
||||
`plugins.allow` que no incluye `browser`.
|
||||
|
||||
Ejemplo de configuración incorrecta:
|
||||
Ejemplo de configuración rota:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -106,7 +106,7 @@ Ejemplo de configuración incorrecta:
|
||||
}
|
||||
```
|
||||
|
||||
Soluciónalo agregando `browser` a la lista de permitidos de plugins:
|
||||
Corrígelo agregando `browser` a la lista de plugins permitidos:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -120,46 +120,46 @@ Notas importantes:
|
||||
|
||||
- `browser.enabled=true` no es suficiente por sí solo cuando `plugins.allow` está configurado.
|
||||
- `plugins.entries.browser.enabled=true` tampoco es suficiente por sí solo cuando `plugins.allow` está configurado.
|
||||
- `tools.alsoAllow: ["browser"]` **no** carga el Plugin de navegador integrado. Solo ajusta la política de herramientas después de que el Plugin ya está cargado.
|
||||
- Si no necesitas una lista restrictiva de plugins permitidos, eliminar `plugins.allow` también restaura el comportamiento predeterminado del navegador integrado.
|
||||
- `tools.alsoAllow: ["browser"]` **no** carga el Plugin de navegador incluido. Solo ajusta la política de herramientas después de que el plugin ya se haya cargado.
|
||||
- Si no necesitas una lista restrictiva de plugins permitidos, quitar `plugins.allow` también restaura el comportamiento predeterminado del navegador incluido.
|
||||
|
||||
Síntomas típicos:
|
||||
|
||||
- `openclaw browser` es un comando desconocido.
|
||||
- Falta `browser.request`.
|
||||
- El agente informa que la herramienta de navegador no está disponible o falta.
|
||||
- falta `browser.request`.
|
||||
- El agente informa que la herramienta del navegador no está disponible o falta.
|
||||
|
||||
## Perfiles: `openclaw` frente a `user`
|
||||
|
||||
- `openclaw`: navegador gestionado y aislado (no requiere extensión).
|
||||
- `user`: perfil integrado de conexión Chrome MCP para tu sesión **real de Chrome con inicio de sesión**.
|
||||
- `openclaw`: navegador administrado y aislado (no requiere extensión).
|
||||
- `user`: perfil integrado de conexión de Chrome MCP para tu sesión **real de Chrome con inicio de sesión**.
|
||||
|
||||
Para las llamadas de la herramienta de navegador del agente:
|
||||
|
||||
- Predeterminado: usa el navegador aislado `openclaw`.
|
||||
- Prefiere `profile="user"` cuando las sesiones existentes con inicio de sesión importan y el usuario
|
||||
está en la computadora para hacer clic/aprobar cualquier aviso de conexión.
|
||||
- Prefiere `profile="user"` cuando importen las sesiones existentes con inicio de sesión y el usuario
|
||||
esté en la computadora para hacer clic o aprobar cualquier aviso de conexión.
|
||||
- `profile` es la anulación explícita cuando quieres un modo de navegador específico.
|
||||
|
||||
Establece `browser.defaultProfile: "openclaw"` si quieres el modo gestionado de forma predeterminada.
|
||||
Configura `browser.defaultProfile: "openclaw"` si quieres el modo administrado de forma predeterminada.
|
||||
|
||||
## Configuración
|
||||
|
||||
La configuración del navegador vive en `~/.openclaw/openclaw.json`.
|
||||
La configuración del navegador se encuentra en `~/.openclaw/openclaw.json`.
|
||||
|
||||
```json5
|
||||
{
|
||||
browser: {
|
||||
enabled: true, // predeterminado: true
|
||||
enabled: true, // default: true
|
||||
ssrfPolicy: {
|
||||
// dangerouslyAllowPrivateNetwork: true, // optar solo para acceso confiable a red privada
|
||||
// allowPrivateNetwork: true, // alias heredado
|
||||
// dangerouslyAllowPrivateNetwork: true, // opt in only for trusted private-network access
|
||||
// allowPrivateNetwork: true, // legacy alias
|
||||
// hostnameAllowlist: ["*.example.com", "example.com"],
|
||||
// allowedHostnames: ["localhost"],
|
||||
},
|
||||
// cdpUrl: "http://127.0.0.1:18792", // anulación heredada de un solo perfil
|
||||
remoteCdpTimeoutMs: 1500, // tiempo de espera HTTP de CDP remoto (ms)
|
||||
remoteCdpHandshakeTimeoutMs: 3000, // tiempo de espera del handshake WebSocket de CDP remoto (ms)
|
||||
// cdpUrl: "http://127.0.0.1:18792", // legacy single-profile override
|
||||
remoteCdpTimeoutMs: 1500, // remote CDP HTTP timeout (ms)
|
||||
remoteCdpHandshakeTimeoutMs: 3000, // remote CDP WebSocket handshake timeout (ms)
|
||||
defaultProfile: "openclaw",
|
||||
color: "#FF4500",
|
||||
headless: false,
|
||||
@ -190,30 +190,30 @@ Notas:
|
||||
|
||||
- El servicio de control del navegador se enlaza a loopback en un puerto derivado de `gateway.port`
|
||||
(predeterminado: `18791`, que es gateway + 2).
|
||||
- Si anulas el puerto del Gateway (`gateway.port` o `OPENCLAW_GATEWAY_PORT`),
|
||||
los puertos derivados del navegador se desplazan para permanecer en la misma “familia”.
|
||||
- `cdpUrl` usa de forma predeterminada el puerto CDP local gestionado cuando no está establecido.
|
||||
- `remoteCdpTimeoutMs` se aplica a las comprobaciones de alcance de CDP remoto (no loopback).
|
||||
- `remoteCdpHandshakeTimeoutMs` se aplica a las comprobaciones de alcance del WebSocket de CDP remoto.
|
||||
- La navegación del navegador o apertura de pestañas está protegida contra SSRF antes de navegar y se vuelve a comprobar en el mejor esfuerzo en la URL final `http(s)` después de la navegación.
|
||||
- En el modo estricto de SSRF, también se comprueban el descubrimiento y los sondeos de endpoints CDP remotos (`cdpUrl`, incluidas las búsquedas de `/json/version`).
|
||||
- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` está desactivado de forma predeterminada. Establécelo en `true` solo cuando confíes intencionalmente en el acceso del navegador a redes privadas.
|
||||
- Si sobrescribes el puerto de Gateway (`gateway.port` o `OPENCLAW_GATEWAY_PORT`),
|
||||
los puertos derivados del navegador cambian para permanecer en la misma “familia”.
|
||||
- `cdpUrl` usa de forma predeterminada el puerto CDP local administrado cuando no está configurado.
|
||||
- `remoteCdpTimeoutMs` se aplica a las comprobaciones de accesibilidad de CDP remoto (no loopback).
|
||||
- `remoteCdpHandshakeTimeoutMs` se aplica a las comprobaciones de accesibilidad del handshake WebSocket de CDP remoto.
|
||||
- La navegación del navegador y la apertura de pestañas están protegidas contra SSRF antes de la navegación y se vuelven a comprobar en la medida de lo posible en la URL final `http(s)` después de la navegación.
|
||||
- En el modo SSRF estricto, la detección y las sondas del endpoint CDP remoto (`cdpUrl`, incluidas las búsquedas de `/json/version`) también se comprueban.
|
||||
- `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` está desactivado de forma predeterminada. Establécelo en `true` solo cuando confíes intencionalmente en el acceso del navegador a la red privada.
|
||||
- `browser.ssrfPolicy.allowPrivateNetwork` sigue siendo compatible como alias heredado por compatibilidad.
|
||||
- `attachOnly: true` significa “nunca iniciar un navegador local; solo conectarse si ya se está ejecutando.”
|
||||
- `color` + `color` por perfil tiñen la interfaz del navegador para que puedas ver qué perfil está activo.
|
||||
- El perfil predeterminado es `openclaw` (navegador independiente gestionado por OpenClaw). Usa `defaultProfile: "user"` para optar por el navegador del usuario con inicio de sesión.
|
||||
- Orden de autodetección: navegador predeterminado del sistema si está basado en Chromium; de lo contrario Chrome → Brave → Edge → Chromium → Chrome Canary.
|
||||
- Los perfiles `openclaw` locales asignan automáticamente `cdpPort`/`cdpUrl`; establécelos solo para CDP remoto.
|
||||
- `driver: "existing-session"` usa Chrome DevTools MCP en lugar de CDP sin procesar. No
|
||||
establezcas `cdpUrl` para ese driver.
|
||||
- Establece `browser.profiles.<name>.userDataDir` cuando un perfil de sesión existente
|
||||
- `attachOnly: true` significa “nunca iniciar un navegador local; solo conectarse si ya está en ejecución”.
|
||||
- `color` + el `color` por perfil tiñen la IU del navegador para que puedas ver qué perfil está activo.
|
||||
- El perfil predeterminado es `openclaw` (navegador independiente administrado por OpenClaw). Usa `defaultProfile: "user"` para optar por el navegador del usuario con inicio de sesión.
|
||||
- Orden de detección automática: navegador predeterminado del sistema si está basado en Chromium; en caso contrario Chrome → Brave → Edge → Chromium → Chrome Canary.
|
||||
- Los perfiles `openclaw` locales asignan `cdpPort`/`cdpUrl` automáticamente; configúralos solo para CDP remoto.
|
||||
- `driver: "existing-session"` usa Chrome DevTools MCP en lugar de CDP sin formato. No
|
||||
configures `cdpUrl` para ese driver.
|
||||
- Configura `browser.profiles.<name>.userDataDir` cuando un perfil existing-session
|
||||
deba conectarse a un perfil de usuario Chromium no predeterminado, como Brave o Edge.
|
||||
|
||||
## Usar Brave (u otro navegador basado en Chromium)
|
||||
|
||||
Si tu navegador **predeterminado del sistema** está basado en Chromium (Chrome/Brave/Edge/etc.),
|
||||
OpenClaw lo usa automáticamente. Establece `browser.executablePath` para anular la
|
||||
autodetección:
|
||||
OpenClaw lo usa automáticamente. Configura `browser.executablePath` para sobrescribir
|
||||
la detección automática:
|
||||
|
||||
Ejemplo de CLI:
|
||||
|
||||
@ -246,18 +246,18 @@ openclaw config set browser.executablePath "/usr/bin/google-chrome"
|
||||
|
||||
## Control local frente a remoto
|
||||
|
||||
- **Control local (predeterminado):** el Gateway inicia el servicio de control en loopback y puede iniciar un navegador local.
|
||||
- **Control remoto (host node):** ejecuta un host node en la máquina que tiene el navegador; el Gateway redirige a él las acciones del navegador.
|
||||
- **CDP remoto:** establece `browser.profiles.<name>.cdpUrl` (o `browser.cdpUrl`) para
|
||||
- **Control local (predeterminado):** Gateway inicia el servicio de control en loopback y puede iniciar un navegador local.
|
||||
- **Control remoto (host de Node):** ejecuta un host de Node en la máquina que tiene el navegador; Gateway envía mediante proxy las acciones del navegador hacia él.
|
||||
- **CDP remoto:** configura `browser.profiles.<name>.cdpUrl` (o `browser.cdpUrl`) para
|
||||
conectarte a un navegador remoto basado en Chromium. En este caso, OpenClaw no iniciará un navegador local.
|
||||
|
||||
El comportamiento de detención difiere según el modo del perfil:
|
||||
El comportamiento al detenerse difiere según el modo del perfil:
|
||||
|
||||
- perfiles locales gestionados: `openclaw browser stop` detiene el proceso del navegador que
|
||||
- perfiles locales administrados: `openclaw browser stop` detiene el proceso del navegador que
|
||||
OpenClaw inició
|
||||
- perfiles de solo conexión y CDP remoto: `openclaw browser stop` cierra la sesión de control
|
||||
activa y libera las anulaciones de emulación de Playwright/CDP (viewport,
|
||||
esquema de color, configuración regional, zona horaria, modo sin conexión y estado similar), aunque
|
||||
- perfiles solo de conexión y perfiles CDP remotos: `openclaw browser stop` cierra la sesión de
|
||||
control activa y libera las anulaciones de emulación de Playwright/CDP (viewport,
|
||||
combinación de colores, configuración regional, zona horaria, modo sin conexión y estados similares), aunque
|
||||
OpenClaw no haya iniciado ningún proceso de navegador
|
||||
|
||||
Las URL de CDP remoto pueden incluir autenticación:
|
||||
@ -271,25 +271,25 @@ tokens en lugar de confirmarlos en archivos de configuración.
|
||||
|
||||
## Proxy de navegador de Node (predeterminado sin configuración)
|
||||
|
||||
Si ejecutas un **host node** en la máquina que tiene tu navegador, OpenClaw puede
|
||||
redirigir automáticamente las llamadas de la herramienta de navegador a ese node sin ninguna configuración adicional del navegador.
|
||||
Si ejecutas un **host de Node** en la máquina que tiene tu navegador, OpenClaw puede
|
||||
enrutar automáticamente las llamadas a la herramienta del navegador a ese Node sin ninguna configuración adicional del navegador.
|
||||
Esta es la ruta predeterminada para gateways remotos.
|
||||
|
||||
Notas:
|
||||
|
||||
- El host node expone su servidor local de control del navegador mediante un **comando proxy**.
|
||||
- Los perfiles provienen de la propia configuración `browser.profiles` del node (igual que en local).
|
||||
- `nodeHost.browserProxy.allowProfiles` es opcional. Déjalo vacío para el comportamiento heredado/predeterminado: todos los perfiles configurados siguen siendo accesibles a través del proxy, incluidas las rutas para crear/eliminar perfiles.
|
||||
- Si estableces `nodeHost.browserProxy.allowProfiles`, OpenClaw lo trata como un límite de privilegio mínimo: solo se pueden seleccionar los perfiles de la lista permitida, y las rutas persistentes de creación/eliminación de perfiles se bloquean en la superficie del proxy.
|
||||
- El host de Node expone su servidor local de control del navegador mediante un **comando proxy**.
|
||||
- Los perfiles provienen de la propia configuración `browser.profiles` del nodo (igual que en local).
|
||||
- `nodeHost.browserProxy.allowProfiles` es opcional. Déjalo vacío para el comportamiento heredado/predeterminado: todos los perfiles configurados siguen siendo accesibles a través del proxy, incluidas las rutas de creación/eliminación de perfiles.
|
||||
- Si configuras `nodeHost.browserProxy.allowProfiles`, OpenClaw lo trata como un límite de privilegio mínimo: solo se pueden usar los perfiles permitidos, y las rutas persistentes de creación/eliminación de perfiles se bloquean en la superficie del proxy.
|
||||
- Desactívalo si no lo quieres:
|
||||
- En el node: `nodeHost.browserProxy.enabled=false`
|
||||
- En el nodo: `nodeHost.browserProxy.enabled=false`
|
||||
- En el gateway: `gateway.nodes.browser.mode="off"`
|
||||
|
||||
## Browserless (CDP remoto alojado)
|
||||
|
||||
[Browserless](https://browserless.io) es un servicio alojado de Chromium que expone
|
||||
URL de conexión CDP a través de HTTPS y WebSocket. OpenClaw puede usar cualquiera de las dos formas, pero
|
||||
para un perfil de navegador remoto la opción más simple es la URL WebSocket directa
|
||||
URL de conexión CDP mediante HTTPS y WebSocket. OpenClaw puede usar cualquiera de las dos formas, pero
|
||||
para un perfil de navegador remoto la opción más sencilla es la URL WebSocket directa
|
||||
de la documentación de conexión de Browserless.
|
||||
|
||||
Ejemplo:
|
||||
@ -319,23 +319,37 @@ Notas:
|
||||
`wss://` para una conexión CDP directa o conservar la URL HTTPS y dejar que OpenClaw
|
||||
descubra `/json/version`.
|
||||
|
||||
## Proveedores de CDP WebSocket directo
|
||||
## Proveedores CDP directos por WebSocket
|
||||
|
||||
Algunos servicios de navegador alojado exponen un endpoint **WebSocket directo** en lugar de
|
||||
la detección estándar de CDP basada en HTTP (`/json/version`). OpenClaw admite ambos:
|
||||
Algunos servicios de navegador alojados exponen un endpoint **WebSocket directo** en lugar de
|
||||
la detección CDP estándar basada en HTTP (`/json/version`). OpenClaw acepta tres
|
||||
formatos de URL CDP y elige automáticamente la estrategia de conexión correcta:
|
||||
|
||||
- **Endpoints HTTP(S)** — OpenClaw llama a `/json/version` para descubrir la
|
||||
URL del depurador WebSocket y luego se conecta.
|
||||
- **Endpoints WebSocket** (`ws://` / `wss://`) — OpenClaw se conecta directamente,
|
||||
omitiendo `/json/version`. Úsalo para servicios como
|
||||
[Browserless](https://browserless.io),
|
||||
[Browserbase](https://www.browserbase.com), o cualquier proveedor que te entregue una
|
||||
URL WebSocket.
|
||||
- **Detección HTTP(S)** — `http://host[:port]` o `https://host[:port]`.
|
||||
OpenClaw llama a `/json/version` para descubrir la URL del depurador WebSocket y luego
|
||||
se conecta. Sin fallback a WebSocket.
|
||||
- **Endpoints WebSocket directos** — `ws://host[:port]/devtools/<kind>/<id>` o
|
||||
`wss://...` con una ruta `/devtools/browser|page|worker|shared_worker|service_worker/<id>`.
|
||||
OpenClaw se conecta directamente mediante un handshake WebSocket y omite
|
||||
por completo `/json/version`.
|
||||
- **Raíces WebSocket simples** — `ws://host[:port]` o `wss://host[:port]` sin
|
||||
una ruta `/devtools/...` (por ejemplo, [Browserless](https://browserless.io),
|
||||
[Browserbase](https://www.browserbase.com)). OpenClaw intenta primero la detección HTTP
|
||||
de `/json/version` (normalizando el esquema a `http`/`https`);
|
||||
si la detección devuelve un `webSocketDebuggerUrl`, se usa; en caso contrario, OpenClaw
|
||||
recurre a un handshake WebSocket directo en la raíz simple. Esto cubre
|
||||
tanto puertos de depuración remota de estilo Chrome como proveedores solo WebSocket.
|
||||
|
||||
`ws://host:port` / `wss://host:port` simples sin una ruta `/devtools/...`
|
||||
apuntando a una instancia local de Chrome son compatibles mediante el fallback
|
||||
que intenta primero la detección: Chrome solo acepta actualizaciones WebSocket en la ruta específica por navegador
|
||||
o por destino devuelta por `/json/version`, por lo que un handshake solo en la raíz
|
||||
fallaría.
|
||||
|
||||
### Browserbase
|
||||
|
||||
[Browserbase](https://www.browserbase.com) es una plataforma en la nube para ejecutar
|
||||
navegadores headless con resolución integrada de CAPTCHA, modo sigiloso y proxies
|
||||
navegadores sin interfaz con resolución de CAPTCHA integrada, modo sigiloso y proxies
|
||||
residenciales.
|
||||
|
||||
```json5
|
||||
@ -359,59 +373,59 @@ Notas:
|
||||
|
||||
- [Regístrate](https://www.browserbase.com/sign-up) y copia tu **API Key**
|
||||
desde el [panel Overview](https://www.browserbase.com/overview).
|
||||
- Reemplaza `<BROWSERBASE_API_KEY>` por tu API key real de Browserbase.
|
||||
- Browserbase crea automáticamente una sesión de navegador al conectarse por WebSocket, así que
|
||||
no se necesita ningún paso manual de creación de sesión.
|
||||
- Reemplaza `<BROWSERBASE_API_KEY>` por tu clave de API real de Browserbase.
|
||||
- Browserbase crea automáticamente una sesión de navegador al conectarse por WebSocket, así que no
|
||||
hace falta ningún paso manual de creación de sesión.
|
||||
- El nivel gratuito permite una sesión concurrente y una hora de navegador al mes.
|
||||
Consulta los [precios](https://www.browserbase.com/pricing) para los límites de los planes de pago.
|
||||
- Consulta la [documentación de Browserbase](https://docs.browserbase.com) para la referencia completa de la API,
|
||||
las guías del SDK y los ejemplos de integración.
|
||||
Consulta los [precios](https://www.browserbase.com/pricing) para conocer los límites de los planes de pago.
|
||||
- Consulta la [documentación de Browserbase](https://docs.browserbase.com) para ver la referencia completa de la API,
|
||||
guías del SDK y ejemplos de integración.
|
||||
|
||||
## Seguridad
|
||||
|
||||
Ideas clave:
|
||||
|
||||
- El control del navegador es solo por loopback; el acceso fluye a través de la autenticación del Gateway o del emparejamiento de node.
|
||||
- La API HTTP independiente del navegador en loopback usa **solo autenticación de secreto compartido**:
|
||||
autenticación bearer con token del gateway, `x-openclaw-password`, o autenticación HTTP Basic con la
|
||||
contraseña de gateway configurada.
|
||||
- El control del navegador es solo loopback; el acceso fluye a través de la autenticación de Gateway o del emparejamiento de nodos.
|
||||
- La API HTTP independiente del navegador en loopback usa **solo autenticación con secreto compartido**:
|
||||
auth bearer con el token de gateway, `x-openclaw-password` o autenticación HTTP Basic con la
|
||||
contraseña configurada del gateway.
|
||||
- Los encabezados de identidad de Tailscale Serve y `gateway.auth.mode: "trusted-proxy"` **no**
|
||||
autentican esta API independiente del navegador en loopback.
|
||||
- Si el control del navegador está habilitado y no hay autenticación de secreto compartido configurada, OpenClaw
|
||||
genera automáticamente `gateway.auth.token` al iniciar y lo guarda en la configuración.
|
||||
autentican esta API HTTP independiente del navegador en loopback.
|
||||
- Si el control del navegador está activado y no se configura ninguna autenticación con secreto compartido, OpenClaw
|
||||
genera automáticamente `gateway.auth.token` al iniciar y lo persiste en la configuración.
|
||||
- OpenClaw **no** genera automáticamente ese token cuando `gateway.auth.mode` ya es
|
||||
`password`, `none` o `trusted-proxy`.
|
||||
- Mantén el Gateway y cualquier host node en una red privada (Tailscale); evita la exposición pública.
|
||||
- Trata las URL/tokens remotos de CDP como secretos; prefiere variables de entorno o un gestor de secretos.
|
||||
- Mantén Gateway y cualquier host de nodo en una red privada (Tailscale); evita la exposición pública.
|
||||
- Trata las URL y los tokens de CDP remoto como secretos; prefiere variables de entorno o un gestor de secretos.
|
||||
|
||||
Consejos para CDP remoto:
|
||||
|
||||
- Prefiere endpoints cifrados (HTTPS o WSS) y tokens de corta duración cuando sea posible.
|
||||
- Evita incrustar tokens de larga duración directamente en archivos de configuración.
|
||||
|
||||
## Perfiles (multi-browser)
|
||||
## Perfiles (varios navegadores)
|
||||
|
||||
OpenClaw admite varios perfiles con nombre (configuraciones de enrutamiento). Los perfiles pueden ser:
|
||||
|
||||
- **gestionados por openclaw**: una instancia dedicada de navegador basado en Chromium con su propio directorio de datos de usuario + puerto CDP
|
||||
- **remoto**: una URL de CDP explícita (navegador basado en Chromium ejecutándose en otro lugar)
|
||||
- **sesión existente**: tu perfil actual de Chrome mediante conexión automática de Chrome DevTools MCP
|
||||
- **administrados por openclaw**: una instancia dedicada de navegador basado en Chromium con su propio directorio de datos de usuario + puerto CDP
|
||||
- **remoto**: una URL CDP explícita (navegador basado en Chromium ejecutándose en otro lugar)
|
||||
- **sesión existente**: tu perfil de Chrome existente mediante conexión automática de Chrome DevTools MCP
|
||||
|
||||
Valores predeterminados:
|
||||
|
||||
- El perfil `openclaw` se crea automáticamente si falta.
|
||||
- El perfil `user` viene integrado para la conexión de sesión existente de Chrome MCP.
|
||||
- Los perfiles de sesión existente son opcionales más allá de `user`; créalos con `--driver existing-session`.
|
||||
- Los puertos CDP locales se asignan desde **18800–18899** de forma predeterminada.
|
||||
- Eliminar un perfil mueve su directorio de datos local a la Papelera.
|
||||
- El perfil `user` está integrado para la conexión de sesión existente de Chrome MCP.
|
||||
- Los perfiles de sesión existente son opcionales además de `user`; créalos con `--driver existing-session`.
|
||||
- Los puertos CDP locales se asignan del rango **18800–18899** de forma predeterminada.
|
||||
- Al eliminar un perfil, su directorio de datos local se mueve a la papelera.
|
||||
|
||||
Todos los endpoints de control aceptan `?profile=<name>`; el CLI usa `--browser-profile`.
|
||||
Todos los endpoints de control aceptan `?profile=<name>`; la CLI usa `--browser-profile`.
|
||||
|
||||
## Sesión existente mediante Chrome DevTools MCP
|
||||
|
||||
OpenClaw también puede conectarse a un perfil de navegador basado en Chromium en ejecución mediante el
|
||||
OpenClaw también puede conectarse a un perfil de navegador basado en Chromium en ejecución a través del
|
||||
servidor oficial Chrome DevTools MCP. Esto reutiliza las pestañas y el estado de inicio de sesión
|
||||
ya abiertos en ese perfil de navegador.
|
||||
ya abiertos en ese perfil del navegador.
|
||||
|
||||
Referencias oficiales de contexto y configuración:
|
||||
|
||||
@ -449,8 +463,8 @@ Usa `userDataDir` para Brave, Edge, Chromium o un perfil de Chrome no predetermi
|
||||
|
||||
Luego, en el navegador correspondiente:
|
||||
|
||||
1. Abre la página de inspección de ese navegador para depuración remota.
|
||||
2. Habilita la depuración remota.
|
||||
1. Abre la página de inspección de ese navegador para la depuración remota.
|
||||
2. Activa la depuración remota.
|
||||
3. Mantén el navegador en ejecución y aprueba el aviso de conexión cuando OpenClaw se conecte.
|
||||
|
||||
Páginas de inspección comunes:
|
||||
@ -468,7 +482,7 @@ openclaw browser --browser-profile user tabs
|
||||
openclaw browser --browser-profile user snapshot --format ai
|
||||
```
|
||||
|
||||
Cómo se ve el éxito:
|
||||
Cómo se ve un resultado correcto:
|
||||
|
||||
- `status` muestra `driver: existing-session`
|
||||
- `status` muestra `transport: chrome-mcp`
|
||||
@ -478,62 +492,63 @@ Cómo se ve el éxito:
|
||||
|
||||
Qué comprobar si la conexión no funciona:
|
||||
|
||||
- el navegador de destino basado en Chromium es versión `144+`
|
||||
- la depuración remota está habilitada en la página de inspección de ese navegador
|
||||
- el navegador mostró y aceptaste el aviso de consentimiento de conexión
|
||||
- el navegador basado en Chromium de destino es la versión `144+`
|
||||
- la depuración remota está activada en la página de inspección de ese navegador
|
||||
- el navegador mostró el aviso de consentimiento de conexión y lo aceptaste
|
||||
- `openclaw doctor` migra la configuración antigua del navegador basada en extensiones y comprueba que
|
||||
Chrome está instalado localmente para los perfiles predeterminados de conexión automática, pero no puede
|
||||
habilitar por ti la depuración remota del lado del navegador
|
||||
Chrome esté instalado localmente para los perfiles predeterminados con conexión automática, pero no puede
|
||||
activar por ti la depuración remota del lado del navegador
|
||||
|
||||
Uso por el agente:
|
||||
Uso por parte del agente:
|
||||
|
||||
- Usa `profile="user"` cuando necesites el estado del navegador del usuario con sesión iniciada.
|
||||
- Si usas un perfil personalizado de sesión existente, pasa ese nombre de perfil explícito.
|
||||
- Elige este modo solo cuando el usuario esté en la computadora para aprobar el
|
||||
aviso de conexión.
|
||||
- el Gateway o host node puede iniciar `npx chrome-devtools-mcp@latest --autoConnect`
|
||||
- Gateway o el host del nodo pueden ejecutar `npx chrome-devtools-mcp@latest --autoConnect`
|
||||
|
||||
Notas:
|
||||
|
||||
- Esta ruta tiene mayor riesgo que el perfil aislado `openclaw` porque puede
|
||||
actuar dentro de tu sesión del navegador con inicio de sesión.
|
||||
- OpenClaw no inicia el navegador para este driver; se conecta solo a una
|
||||
- Esta ruta es de mayor riesgo que el perfil aislado `openclaw` porque puede
|
||||
actuar dentro de tu sesión de navegador con inicio de sesión.
|
||||
- OpenClaw no inicia el navegador para este driver; solo se conecta a una
|
||||
sesión existente.
|
||||
- OpenClaw usa aquí el flujo oficial `--autoConnect` de Chrome DevTools MCP. Si
|
||||
`userDataDir` está configurado, OpenClaw lo pasa para apuntar a ese
|
||||
`userDataDir` está configurado, OpenClaw lo transmite para apuntar a ese
|
||||
directorio de datos de usuario de Chromium explícito.
|
||||
- Las capturas de pantalla de sesión existente admiten capturas de página y capturas de elementos con `--ref`
|
||||
desde instantáneas, pero no selectores CSS `--element`.
|
||||
- Las capturas de pantalla de página de sesión existente funcionan sin Playwright mediante Chrome MCP.
|
||||
- Las capturas de pantalla de sesión existente admiten capturas de página y capturas de elementos
|
||||
con `--ref` desde snapshots, pero no selectores CSS `--element`.
|
||||
- Las capturas de pantalla de páginas de sesión existente funcionan sin Playwright mediante Chrome MCP.
|
||||
Las capturas de elementos basadas en refs (`--ref`) también funcionan allí, pero `--full-page`
|
||||
no puede combinarse con `--ref` ni con `--element`.
|
||||
no se puede combinar con `--ref` ni con `--element`.
|
||||
- Las acciones de sesión existente siguen siendo más limitadas que la ruta del navegador
|
||||
gestionado:
|
||||
administrado:
|
||||
- `click`, `type`, `hover`, `scrollIntoView`, `drag` y `select` requieren
|
||||
refs de instantáneas en lugar de selectores CSS
|
||||
- `click` es solo con botón izquierdo (sin anulaciones de botón ni modificadores)
|
||||
refs de snapshot en lugar de selectores CSS
|
||||
- `click` es solo con el botón izquierdo (sin sobrescrituras de botón ni modificadores)
|
||||
- `type` no admite `slowly=true`; usa `fill` o `press`
|
||||
- `press` no admite `delayMs`
|
||||
- `hover`, `scrollIntoView`, `drag`, `select`, `fill` y `evaluate` no
|
||||
admiten anulaciones de tiempo de espera por llamada
|
||||
- `select` actualmente admite solo un valor
|
||||
- `wait --url` de sesión existente admite patrones exactos, de subcadena y glob
|
||||
como otros drivers de navegador. `wait --load networkidle` todavía no es compatible.
|
||||
- Los hooks de carga de archivos de sesión existente requieren `ref` o `inputRef`, admiten un archivo
|
||||
a la vez y no admiten selección CSS mediante `element`.
|
||||
- Los hooks de diálogos de sesión existente no admiten anulaciones de tiempo de espera.
|
||||
- Algunas funciones todavía requieren la ruta del navegador gestionado, incluidas acciones
|
||||
por lotes, exportación a PDF, interceptación de descargas y `responsebody`.
|
||||
- La sesión existente es local al host. Si Chrome está en otra máquina o en un
|
||||
espacio de nombres de red diferente, usa CDP remoto o un host node en su lugar.
|
||||
admiten sobrescrituras de timeout por llamada
|
||||
- `select` actualmente admite solo un único valor
|
||||
- La sesión existente `wait --url` admite patrones exactos, de subcadena y glob
|
||||
como otros drivers de navegador. `wait --load networkidle` aún no es compatible.
|
||||
- Los hooks de carga de sesión existente requieren `ref` o `inputRef`, admiten un archivo
|
||||
a la vez y no admiten direccionamiento CSS mediante `element`.
|
||||
- Los hooks de diálogos de sesión existente no admiten sobrescrituras de timeout.
|
||||
- Algunas funciones aún requieren la ruta del navegador administrado, incluidas acciones por lotes,
|
||||
exportación a PDF, interceptación de descargas y `responsebody`.
|
||||
- La sesión existente puede conectarse en el host seleccionado o a través de un nodo de navegador conectado.
|
||||
Si Chrome está en otro lugar y no hay ningún nodo de navegador conectado, usa
|
||||
CDP remoto o un host de nodo en su lugar.
|
||||
|
||||
## Garantías de aislamiento
|
||||
|
||||
- **Directorio de datos de usuario dedicado**: nunca toca el perfil de tu navegador personal.
|
||||
- **Puertos dedicados**: evita `9222` para prevenir conflictos con flujos de trabajo de desarrollo.
|
||||
- **Directorio dedicado de datos de usuario**: nunca toca el perfil de tu navegador personal.
|
||||
- **Puertos dedicados**: evita `9222` para prevenir colisiones con flujos de trabajo de desarrollo.
|
||||
- **Control determinista de pestañas**: apunta a las pestañas por `targetId`, no por “última pestaña”.
|
||||
|
||||
## Selección del navegador
|
||||
## Selección de navegador
|
||||
|
||||
Al iniciar localmente, OpenClaw elige el primero disponible:
|
||||
|
||||
@ -543,21 +558,21 @@ Al iniciar localmente, OpenClaw elige el primero disponible:
|
||||
4. Chromium
|
||||
5. Chrome Canary
|
||||
|
||||
Puedes anularlo con `browser.executablePath`.
|
||||
Puedes sobrescribirlo con `browser.executablePath`.
|
||||
|
||||
Plataformas:
|
||||
|
||||
- macOS: comprueba `/Applications` y `~/Applications`.
|
||||
- Linux: busca `google-chrome`, `brave`, `microsoft-edge`, `chromium`, etc.
|
||||
- Windows: comprueba ubicaciones comunes de instalación.
|
||||
- Windows: comprueba ubicaciones de instalación comunes.
|
||||
|
||||
## API de control (opcional)
|
||||
|
||||
Solo para integraciones locales, el Gateway expone una pequeña API HTTP en loopback:
|
||||
Solo para integraciones locales, Gateway expone una pequeña API HTTP en loopback:
|
||||
|
||||
- Estado/inicio/detención: `GET /`, `POST /start`, `POST /stop`
|
||||
- Pestañas: `GET /tabs`, `POST /tabs/open`, `POST /tabs/focus`, `DELETE /tabs/:targetId`
|
||||
- Instantánea/captura de pantalla: `GET /snapshot`, `POST /screenshot`
|
||||
- Snapshot/captura de pantalla: `GET /snapshot`, `POST /screenshot`
|
||||
- Acciones: `POST /navigate`, `POST /act`
|
||||
- Hooks: `POST /hooks/file-chooser`, `POST /hooks/dialog`
|
||||
- Descargas: `POST /download`, `POST /wait/download`
|
||||
@ -577,15 +592,15 @@ Si la autenticación de gateway con secreto compartido está configurada, las ru
|
||||
|
||||
Notas:
|
||||
|
||||
- Esta API independiente del navegador en loopback **no** consume `trusted-proxy` ni
|
||||
encabezados de identidad de Tailscale Serve.
|
||||
- Si `gateway.auth.mode` es `none` o `trusted-proxy`, estas rutas del navegador en loopback
|
||||
no heredan esos modos basados en identidad; mantenlas solo en loopback.
|
||||
- Esta API independiente del navegador en loopback **no** consume encabezados de identidad de trusted-proxy ni de
|
||||
Tailscale Serve.
|
||||
- Si `gateway.auth.mode` es `none` o `trusted-proxy`, estas rutas de navegador en loopback
|
||||
no heredan esos modos con identidad; mantenlas solo en loopback.
|
||||
|
||||
### Contrato de error de `/act`
|
||||
|
||||
`POST /act` usa una respuesta de error estructurada para fallos de validación a nivel de ruta y
|
||||
de política:
|
||||
`POST /act` usa una respuesta de error estructurada para fallos de validación y
|
||||
de política a nivel de ruta:
|
||||
|
||||
```json
|
||||
{ "error": "<message>", "code": "ACT_*" }
|
||||
@ -594,13 +609,13 @@ de política:
|
||||
Valores actuales de `code`:
|
||||
|
||||
- `ACT_KIND_REQUIRED` (HTTP 400): falta `kind` o no se reconoce.
|
||||
- `ACT_INVALID_REQUEST` (HTTP 400): el payload de la acción falló la normalización o la validación.
|
||||
- `ACT_INVALID_REQUEST` (HTTP 400): la carga útil de la acción falló en la normalización o validación.
|
||||
- `ACT_SELECTOR_UNSUPPORTED` (HTTP 400): se usó `selector` con un tipo de acción no compatible.
|
||||
- `ACT_EVALUATE_DISABLED` (HTTP 403): `evaluate` (o `wait --fn`) está deshabilitado por configuración.
|
||||
- `ACT_TARGET_ID_MISMATCH` (HTTP 403): el `targetId` de nivel superior o por lotes entra en conflicto con el destino de la solicitud.
|
||||
- `ACT_EVALUATE_DISABLED` (HTTP 403): `evaluate` (o `wait --fn`) está desactivado por configuración.
|
||||
- `ACT_TARGET_ID_MISMATCH` (HTTP 403): `targetId` de nivel superior o por lotes entra en conflicto con el destino de la solicitud.
|
||||
- `ACT_EXISTING_SESSION_UNSUPPORTED` (HTTP 501): la acción no es compatible con perfiles de sesión existente.
|
||||
|
||||
Otros fallos en tiempo de ejecución aún pueden devolver `{ "error": "<message>" }` sin un
|
||||
Otros fallos de runtime aún pueden devolver `{ "error": "<message>" }` sin un
|
||||
campo `code`.
|
||||
|
||||
### Requisito de Playwright
|
||||
@ -609,40 +624,40 @@ Algunas funciones (navigate/act/AI snapshot/role snapshot, capturas de pantalla
|
||||
PDF) requieren Playwright. Si Playwright no está instalado, esos endpoints devuelven
|
||||
un error 501 claro.
|
||||
|
||||
Lo que sigue funcionando sin Playwright:
|
||||
Qué sigue funcionando sin Playwright:
|
||||
|
||||
- Instantáneas ARIA
|
||||
- Capturas de pantalla de página para el navegador gestionado `openclaw` cuando hay un WebSocket
|
||||
- Snapshots ARIA
|
||||
- Capturas de pantalla de página para el navegador administrado `openclaw` cuando haya un WebSocket
|
||||
CDP por pestaña disponible
|
||||
- Capturas de pantalla de página para perfiles `existing-session` / Chrome MCP
|
||||
- Capturas de pantalla basadas en refs (`--ref`) de `existing-session` desde la salida de instantáneas
|
||||
- Capturas de pantalla basadas en refs de `existing-session` (`--ref`) a partir de la salida de snapshot
|
||||
|
||||
Lo que todavía necesita Playwright:
|
||||
Qué sigue necesitando Playwright:
|
||||
|
||||
- `navigate`
|
||||
- `act`
|
||||
- Instantáneas AI / instantáneas de rol
|
||||
- AI snapshots / role snapshots
|
||||
- Capturas de pantalla de elementos con selector CSS (`--element`)
|
||||
- Exportación completa de PDF del navegador
|
||||
|
||||
Las capturas de pantalla de elementos también rechazan `--full-page`; la ruta devuelve `fullPage is
|
||||
not supported for element screenshots`.
|
||||
|
||||
Si ves `Playwright is not available in this gateway build`, instala el paquete completo de
|
||||
Playwright (no `playwright-core`) y reinicia el gateway, o vuelve a instalar
|
||||
Si ves `Playwright is not available in this gateway build`, instala el paquete completo
|
||||
de Playwright (no `playwright-core`) y reinicia el gateway, o reinstala
|
||||
OpenClaw con compatibilidad para navegador.
|
||||
|
||||
#### Instalación de Playwright en Docker
|
||||
|
||||
Si tu Gateway se ejecuta en Docker, evita `npx playwright` (conflictos de anulación de npm).
|
||||
Usa en su lugar el CLI integrado:
|
||||
Si tu Gateway se ejecuta en Docker, evita `npx playwright` (conflictos con npm override).
|
||||
Usa la CLI incluida en su lugar:
|
||||
|
||||
```bash
|
||||
docker compose run --rm openclaw-cli \
|
||||
node /app/node_modules/playwright-core/cli.js install chromium
|
||||
```
|
||||
|
||||
Para conservar las descargas del navegador, establece `PLAYWRIGHT_BROWSERS_PATH` (por ejemplo,
|
||||
Para conservar las descargas del navegador, configura `PLAYWRIGHT_BROWSERS_PATH` (por ejemplo,
|
||||
`/home/node/.cache/ms-playwright`) y asegúrate de que `/home/node` se conserve mediante
|
||||
`OPENCLAW_HOME_VOLUME` o un bind mount. Consulta [Docker](/es/install/docker).
|
||||
|
||||
@ -652,19 +667,19 @@ Flujo de alto nivel:
|
||||
|
||||
- Un pequeño **servidor de control** acepta solicitudes HTTP.
|
||||
- Se conecta a navegadores basados en Chromium (Chrome/Brave/Edge/Chromium) mediante **CDP**.
|
||||
- Para acciones avanzadas (clic/escritura/instantánea/PDF), usa **Playwright** sobre
|
||||
- Para acciones avanzadas (click/type/snapshot/PDF), usa **Playwright** sobre
|
||||
CDP.
|
||||
- Cuando falta Playwright, solo están disponibles las operaciones que no usan Playwright.
|
||||
- Cuando falta Playwright, solo están disponibles las operaciones que no dependen de Playwright.
|
||||
|
||||
Este diseño mantiene al agente en una interfaz estable y determinista, a la vez que te permite
|
||||
intercambiar navegadores y perfiles locales/remotos.
|
||||
Este diseño mantiene al agente en una interfaz estable y determinista, al tiempo que te permite
|
||||
intercambiar navegadores y perfiles locales o remotos.
|
||||
|
||||
## Referencia rápida del CLI
|
||||
## Referencia rápida de la CLI
|
||||
|
||||
Todos los comandos aceptan `--browser-profile <name>` para apuntar a un perfil específico.
|
||||
Todos los comandos también aceptan `--json` para salida legible por máquina (payloads estables).
|
||||
Todos los comandos aceptan `--browser-profile <name>` para dirigirse a un perfil específico.
|
||||
Todos los comandos también aceptan `--json` para salida legible por máquina (cargas útiles estables).
|
||||
|
||||
Conceptos básicos:
|
||||
Básicos:
|
||||
|
||||
- `openclaw browser status`
|
||||
- `openclaw browser start`
|
||||
@ -695,10 +710,10 @@ Inspección:
|
||||
|
||||
Nota sobre el ciclo de vida:
|
||||
|
||||
- Para perfiles de solo conexión y CDP remoto, `openclaw browser stop` sigue siendo el
|
||||
- Para perfiles solo de conexión y de CDP remoto, `openclaw browser stop` sigue siendo el
|
||||
comando correcto de limpieza después de las pruebas. Cierra la sesión de control activa y
|
||||
limpia las anulaciones temporales de emulación en lugar de finalizar el
|
||||
navegador subyacente.
|
||||
borra las anulaciones temporales de emulación en lugar de finalizar el navegador
|
||||
subyacente.
|
||||
- `openclaw browser errors --clear`
|
||||
- `openclaw browser requests --filter api --clear`
|
||||
- `openclaw browser pdf`
|
||||
@ -749,47 +764,47 @@ Estado:
|
||||
|
||||
Notas:
|
||||
|
||||
- `upload` y `dialog` son llamadas de **preparación**; ejecútalas antes del clic/tecla
|
||||
- `upload` y `dialog` son llamadas de **preparación**; ejecútalas antes del click/press
|
||||
que activa el selector de archivos o el diálogo.
|
||||
- Las rutas de salida de descargas y trazas están restringidas a las raíces temporales de OpenClaw:
|
||||
- trazas: `/tmp/openclaw` (alternativa: `${os.tmpdir()}/openclaw`)
|
||||
- descargas: `/tmp/openclaw/downloads` (alternativa: `${os.tmpdir()}/openclaw/downloads`)
|
||||
- Las rutas de salida de descargas y trazas están restringidas a raíces temporales de OpenClaw:
|
||||
- trazas: `/tmp/openclaw` (fallback: `${os.tmpdir()}/openclaw`)
|
||||
- descargas: `/tmp/openclaw/downloads` (fallback: `${os.tmpdir()}/openclaw/downloads`)
|
||||
- Las rutas de carga están restringidas a una raíz temporal de cargas de OpenClaw:
|
||||
- cargas: `/tmp/openclaw/uploads` (alternativa: `${os.tmpdir()}/openclaw/uploads`)
|
||||
- `upload` también puede establecer entradas de archivo directamente mediante `--input-ref` o `--element`.
|
||||
- cargas: `/tmp/openclaw/uploads` (fallback: `${os.tmpdir()}/openclaw/uploads`)
|
||||
- `upload` también puede configurar directamente entradas de archivo mediante `--input-ref` o `--element`.
|
||||
- `snapshot`:
|
||||
- `--format ai` (predeterminado cuando Playwright está instalado): devuelve una instantánea AI con refs numéricos (`aria-ref="<n>"`).
|
||||
- `--format ai` (predeterminado cuando Playwright está instalado): devuelve un AI snapshot con refs numéricas (`aria-ref="<n>"`).
|
||||
- `--format aria`: devuelve el árbol de accesibilidad (sin refs; solo inspección).
|
||||
- `--efficient` (o `--mode efficient`): preajuste compacto de instantánea de rol (interactiva + compacta + profundidad + maxChars menor).
|
||||
- Predeterminado de configuración (solo herramienta/CLI): establece `browser.snapshotDefaults.mode: "efficient"` para usar instantáneas eficientes cuando el llamador no pasa un modo (consulta [Configuración del Gateway](/es/gateway/configuration-reference#browser)).
|
||||
- Las opciones de instantánea de rol (`--interactive`, `--compact`, `--depth`, `--selector`) fuerzan una instantánea basada en roles con refs como `ref=e12`.
|
||||
- `--frame "<iframe selector>"` limita las instantáneas de rol a un iframe (se empareja con refs de rol como `e12`).
|
||||
- `--interactive` genera una lista plana y fácil de seleccionar de elementos interactivos (lo mejor para ejecutar acciones).
|
||||
- `--labels` agrega una captura de pantalla solo del viewport con etiquetas de refs superpuestas (imprime `MEDIA:<path>`).
|
||||
- `click`/`type`/etc. requieren una `ref` de `snapshot` (ya sea numérica `12` o de rol `e12`).
|
||||
Los selectores CSS intencionalmente no son compatibles para acciones.
|
||||
- `--efficient` (o `--mode efficient`): preset compacto de role snapshot (interactive + compact + depth + maxChars menor).
|
||||
- Predeterminado de configuración (solo herramienta/CLI): configura `browser.snapshotDefaults.mode: "efficient"` para usar snapshots eficientes cuando quien llama no pasa un modo (consulta [Configuración de Gateway](/es/gateway/configuration-reference#browser)).
|
||||
- Las opciones de role snapshot (`--interactive`, `--compact`, `--depth`, `--selector`) fuerzan un snapshot basado en roles con refs como `ref=e12`.
|
||||
- `--frame "<iframe selector>"` limita los role snapshots a un iframe (se combina con refs de rol como `e12`).
|
||||
- `--interactive` genera una lista plana y fácil de elegir de elementos interactivos (ideal para ejecutar acciones).
|
||||
- `--labels` agrega una captura de pantalla solo de la ventana visible con etiquetas de ref superpuestas (imprime `MEDIA:<path>`).
|
||||
- `click`/`type`/etc. requieren una `ref` de `snapshot` (ya sea la numérica `12` o la ref de rol `e12`).
|
||||
Los selectores CSS no son compatibles intencionalmente para acciones.
|
||||
|
||||
## Instantáneas y refs
|
||||
## Snapshots y refs
|
||||
|
||||
OpenClaw admite dos estilos de “instantánea”:
|
||||
OpenClaw admite dos estilos de “snapshot”:
|
||||
|
||||
- **Instantánea AI (refs numéricos)**: `openclaw browser snapshot` (predeterminado; `--format ai`)
|
||||
- Salida: una instantánea de texto que incluye refs numéricos.
|
||||
- **AI snapshot (refs numéricas)**: `openclaw browser snapshot` (predeterminado; `--format ai`)
|
||||
- Salida: un snapshot de texto que incluye refs numéricas.
|
||||
- Acciones: `openclaw browser click 12`, `openclaw browser type 23 "hello"`.
|
||||
- Internamente, la ref se resuelve mediante `aria-ref` de Playwright.
|
||||
|
||||
- **Instantánea de rol (refs de rol como `e12`)**: `openclaw browser snapshot --interactive` (o `--compact`, `--depth`, `--selector`, `--frame`)
|
||||
- Salida: una lista/árbol basado en roles con `[ref=e12]` (y opcionalmente `[nth=1]`).
|
||||
- **Role snapshot (refs de rol como `e12`)**: `openclaw browser snapshot --interactive` (o `--compact`, `--depth`, `--selector`, `--frame`)
|
||||
- Salida: una lista o árbol basado en roles con `[ref=e12]` (y opcionalmente `[nth=1]`).
|
||||
- Acciones: `openclaw browser click e12`, `openclaw browser highlight e12`.
|
||||
- Internamente, la ref se resuelve mediante `getByRole(...)` (más `nth()` para duplicados).
|
||||
- Agrega `--labels` para incluir una captura de pantalla del viewport con etiquetas `e12` superpuestas.
|
||||
- Agrega `--labels` para incluir una captura de pantalla de la ventana visible con etiquetas `e12` superpuestas.
|
||||
|
||||
Comportamiento de las refs:
|
||||
|
||||
- Las refs **no son estables entre navegaciones**; si algo falla, vuelve a ejecutar `snapshot` y usa una ref nueva.
|
||||
- Si la instantánea de rol se tomó con `--frame`, las refs de rol quedan limitadas a ese iframe hasta la siguiente instantánea de rol.
|
||||
- Si el role snapshot se tomó con `--frame`, las refs de rol quedan limitadas a ese iframe hasta el siguiente role snapshot.
|
||||
|
||||
## Potenciadores de espera
|
||||
## Mejoras de `wait`
|
||||
|
||||
Puedes esperar algo más que tiempo/texto:
|
||||
|
||||
@ -799,7 +814,7 @@ Puedes esperar algo más que tiempo/texto:
|
||||
- `openclaw browser wait --load networkidle`
|
||||
- Esperar un predicado de JS:
|
||||
- `openclaw browser wait --fn "window.ready===true"`
|
||||
- Esperar a que un selector sea visible:
|
||||
- Esperar a que un selector se vuelva visible:
|
||||
- `openclaw browser wait "#main"`
|
||||
|
||||
Se pueden combinar:
|
||||
@ -822,7 +837,7 @@ Cuando falla una acción (por ejemplo, “not visible”, “strict mode violati
|
||||
4. Si la página se comporta de forma extraña:
|
||||
- `openclaw browser errors --clear`
|
||||
- `openclaw browser requests --filter api --clear`
|
||||
5. Para una depuración profunda: registra una traza:
|
||||
5. Para depuración profunda: graba una traza:
|
||||
- `openclaw browser trace start`
|
||||
- reproduce el problema
|
||||
- `openclaw browser trace stop` (imprime `TRACE:<path>`)
|
||||
@ -840,35 +855,35 @@ openclaw browser requests --filter api --json
|
||||
openclaw browser cookies --json
|
||||
```
|
||||
|
||||
Las instantáneas de rol en JSON incluyen `refs` más un pequeño bloque `stats` (líneas/chars/refs/interactive) para que las herramientas puedan razonar sobre el tamaño y la densidad del payload.
|
||||
Los role snapshots en JSON incluyen `refs` más un pequeño bloque `stats` (lines/chars/refs/interactive) para que las herramientas puedan razonar sobre el tamaño y la densidad de la carga útil.
|
||||
|
||||
## Controles de estado y entorno
|
||||
|
||||
Estos son útiles para flujos de trabajo de “hacer que el sitio se comporte como X”:
|
||||
Son útiles para flujos de trabajo de “hacer que el sitio se comporte como X”:
|
||||
|
||||
- Cookies: `cookies`, `cookies set`, `cookies clear`
|
||||
- Storage: `storage local|session get|set|clear`
|
||||
- Sin conexión: `set offline on|off`
|
||||
- Encabezados: `set headers --headers-json '{"X-Debug":"1"}'` (el heredado `set headers --json '{"X-Debug":"1"}'` sigue siendo compatible)
|
||||
- Autenticación HTTP Basic: `set credentials user pass` (o `--clear`)
|
||||
- Headers: `set headers --headers-json '{"X-Debug":"1"}'` (el heredado `set headers --json '{"X-Debug":"1"}'` sigue siendo compatible)
|
||||
- Auth HTTP basic: `set credentials user pass` (o `--clear`)
|
||||
- Geolocalización: `set geo <lat> <lon> --origin "https://example.com"` (o `--clear`)
|
||||
- Media: `set media dark|light|no-preference|none`
|
||||
- Zona horaria / configuración regional: `set timezone ...`, `set locale ...`
|
||||
- Dispositivo / viewport:
|
||||
- `set device "iPhone 14"` (preajustes de dispositivos de Playwright)
|
||||
- `set device "iPhone 14"` (presets de dispositivos de Playwright)
|
||||
- `set viewport 1280 720`
|
||||
|
||||
## Seguridad y privacidad
|
||||
|
||||
- El perfil de navegador openclaw puede contener sesiones iniciadas; trátalo como información sensible.
|
||||
- El perfil de navegador openclaw puede contener sesiones con inicio de sesión; trátalo como sensible.
|
||||
- `browser act kind=evaluate` / `openclaw browser evaluate` y `wait --fn`
|
||||
ejecutan JavaScript arbitrario en el contexto de la página. La inyección de prompts puede dirigir
|
||||
ejecutan JavaScript arbitrario en el contexto de la página. La inyección de prompts puede guiar
|
||||
esto. Desactívalo con `browser.evaluateEnabled=false` si no lo necesitas.
|
||||
- Para inicios de sesión y notas anti-bot (X/Twitter, etc.), consulta [Inicio de sesión en navegador + publicación en X/Twitter](/es/tools/browser-login).
|
||||
- Mantén el Gateway/host node en privado (solo loopback o tailnet).
|
||||
- Los endpoints remotos de CDP son potentes; tunelízalos y protégelos.
|
||||
- Para inicios de sesión y notas anti-bot (X/Twitter, etc.), consulta [Inicio de sesión del navegador + publicación en X/Twitter](/es/tools/browser-login).
|
||||
- Mantén privado el gateway o host del nodo (solo loopback o tailnet).
|
||||
- Los endpoints CDP remotos son potentes; canalízalos de forma segura y protégelos.
|
||||
|
||||
Ejemplo de modo estricto (bloquear destinos privados/internos de forma predeterminada):
|
||||
Ejemplo de modo estricto (bloquear por defecto destinos privados/internos):
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -876,7 +891,7 @@ Ejemplo de modo estricto (bloquear destinos privados/internos de forma predeterm
|
||||
ssrfPolicy: {
|
||||
dangerouslyAllowPrivateNetwork: false,
|
||||
hostnameAllowlist: ["*.example.com", "example.com"],
|
||||
allowedHostnames: ["localhost"], // permiso exacto opcional
|
||||
allowedHostnames: ["localhost"], // optional exact allow
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -884,18 +899,18 @@ Ejemplo de modo estricto (bloquear destinos privados/internos de forma predeterm
|
||||
|
||||
## Solución de problemas
|
||||
|
||||
Para problemas específicos de Linux (especialmente snap Chromium), consulta
|
||||
Para problemas específicos de Linux (especialmente Chromium de snap), consulta
|
||||
[Solución de problemas del navegador](/es/tools/browser-linux-troubleshooting).
|
||||
|
||||
Para configuraciones de host dividido WSL2 Gateway + Windows Chrome, consulta
|
||||
[Solución de problemas de WSL2 + Windows + CDP remoto de Chrome](/es/tools/browser-wsl2-windows-remote-cdp-troubleshooting).
|
||||
Para configuraciones de host dividido entre Gateway en WSL2 y Chrome en Windows, consulta
|
||||
[Solución de problemas de WSL2 + Windows + Chrome remoto CDP](/es/tools/browser-wsl2-windows-remote-cdp-troubleshooting).
|
||||
|
||||
### Fallo de inicio de CDP frente a bloqueo SSRF de navegación
|
||||
|
||||
Estas son clases de fallo diferentes y apuntan a rutas de código diferentes.
|
||||
Son clases de fallo diferentes y apuntan a rutas de código distintas.
|
||||
|
||||
- **Fallo de inicio o preparación de CDP** significa que OpenClaw no puede confirmar que el plano de control del navegador está en buen estado.
|
||||
- **Bloqueo SSRF de navegación** significa que el plano de control del navegador está en buen estado, pero un destino de navegación de página es rechazado por la política.
|
||||
- **Un fallo de inicio o preparación de CDP** significa que OpenClaw no puede confirmar que el plano de control del navegador esté en buen estado.
|
||||
- **Un bloqueo SSRF de navegación** significa que el plano de control del navegador está en buen estado, pero un destino de navegación de página es rechazado por la política.
|
||||
|
||||
Ejemplos comunes:
|
||||
|
||||
@ -903,9 +918,9 @@ Ejemplos comunes:
|
||||
- `Chrome CDP websocket for profile "openclaw" is not reachable after start`
|
||||
- `Remote CDP for profile "<name>" is not reachable at <cdpUrl>`
|
||||
- Bloqueo SSRF de navegación:
|
||||
- `open`, `navigate`, `snapshot` o los flujos de apertura de pestañas fallan con un error de política de navegador/red mientras `start` y `tabs` siguen funcionando
|
||||
- los flujos `open`, `navigate`, snapshot o apertura de pestañas fallan con un error de política del navegador o de red mientras `start` y `tabs` siguen funcionando
|
||||
|
||||
Usa esta secuencia mínima para separar los dos:
|
||||
Usa esta secuencia mínima para diferenciar ambos casos:
|
||||
|
||||
```bash
|
||||
openclaw browser --browser-profile openclaw start
|
||||
@ -916,38 +931,38 @@ openclaw browser --browser-profile openclaw open https://example.com
|
||||
Cómo interpretar los resultados:
|
||||
|
||||
- Si `start` falla con `not reachable after start`, primero soluciona la preparación de CDP.
|
||||
- Si `start` se realiza correctamente pero `tabs` falla, el plano de control sigue sin estar en buen estado. Trata esto como un problema de alcance de CDP, no como un problema de navegación de página.
|
||||
- Si `start` y `tabs` se realizan correctamente pero `open` o `navigate` fallan, el plano de control del navegador está activo y el fallo está en la política de navegación o en la página de destino.
|
||||
- Si `start`, `tabs` y `open` se realizan correctamente, la ruta básica de control del navegador gestionado está en buen estado.
|
||||
- Si `start` tiene éxito pero `tabs` falla, el plano de control sigue sin estar en buen estado. Trátalo como un problema de accesibilidad de CDP, no como un problema de navegación de página.
|
||||
- Si `start` y `tabs` tienen éxito pero `open` o `navigate` fallan, el plano de control del navegador está activo y el fallo está en la política de navegación o en la página de destino.
|
||||
- Si `start`, `tabs` y `open` tienen éxito, la ruta básica de control del navegador administrado está en buen estado.
|
||||
|
||||
Detalles importantes del comportamiento:
|
||||
|
||||
- La configuración del navegador usa de forma predeterminada un objeto de política SSRF de cierre por fallo, incluso cuando no configuras `browser.ssrfPolicy`.
|
||||
- Para el perfil gestionado local `openclaw` en loopback, las comprobaciones de estado de CDP omiten intencionalmente la aplicación de alcance SSRF del navegador para el propio plano de control local de OpenClaw.
|
||||
- La configuración del navegador usa de forma predeterminada un objeto de política SSRF de cierre por defecto incluso cuando no configuras `browser.ssrfPolicy`.
|
||||
- Para el perfil administrado local `openclaw` en loopback, las comprobaciones de estado de CDP omiten intencionalmente la aplicación de accesibilidad SSRF del navegador para el propio plano de control local de OpenClaw.
|
||||
- La protección de navegación es independiente. Un resultado correcto de `start` o `tabs` no significa que un destino posterior de `open` o `navigate` esté permitido.
|
||||
|
||||
Guía de seguridad:
|
||||
|
||||
- **No** flexibilices la política SSRF del navegador de forma predeterminada.
|
||||
- Prefiere excepciones de host limitadas, como `hostnameAllowlist` o `allowedHostnames`, en lugar de acceso amplio a redes privadas.
|
||||
- **No** relajes la política SSRF del navegador de forma predeterminada.
|
||||
- Prefiere excepciones de host específicas como `hostnameAllowlist` o `allowedHostnames` en lugar de un acceso amplio a redes privadas.
|
||||
- Usa `dangerouslyAllowPrivateNetwork: true` solo en entornos intencionalmente confiables donde el acceso del navegador a redes privadas sea necesario y haya sido revisado.
|
||||
|
||||
Ejemplo: navegación bloqueada, plano de control en buen estado
|
||||
|
||||
- `start` se realiza correctamente
|
||||
- `tabs` se realiza correctamente
|
||||
- `start` tiene éxito
|
||||
- `tabs` tiene éxito
|
||||
- `open http://internal.example` falla
|
||||
|
||||
Eso normalmente significa que el inicio del navegador está bien y que el destino de navegación necesita revisión de política.
|
||||
Eso normalmente significa que el inicio del navegador está bien y que el destino de navegación necesita una revisión de política.
|
||||
|
||||
Ejemplo: inicio bloqueado antes de que importe la navegación
|
||||
Ejemplo: inicio bloqueado antes de que la navegación importe
|
||||
|
||||
- `start` falla con `not reachable after start`
|
||||
- `tabs` también falla o no puede ejecutarse
|
||||
|
||||
Eso apunta al inicio del navegador o al alcance de CDP, no a un problema de lista de permitidos de URL de página.
|
||||
Eso apunta al inicio del navegador o a la accesibilidad de CDP, no a un problema de lista de permitidos de URL de página.
|
||||
|
||||
## Tools del agente + cómo funciona el control
|
||||
## Herramientas del agente + cómo funciona el control
|
||||
|
||||
El agente obtiene **una herramienta** para la automatización del navegador:
|
||||
|
||||
@ -956,19 +971,19 @@ El agente obtiene **una herramienta** para la automatización del navegador:
|
||||
Cómo se asigna:
|
||||
|
||||
- `browser snapshot` devuelve un árbol de IU estable (AI o ARIA).
|
||||
- `browser act` usa los ID `ref` de la instantánea para hacer clic/escribir/arrastrar/seleccionar.
|
||||
- `browser act` usa los ID `ref` del snapshot para hacer clic, escribir, arrastrar o seleccionar.
|
||||
- `browser screenshot` captura píxeles (página completa o elemento).
|
||||
- `browser` acepta:
|
||||
- `profile` para elegir un perfil de navegador con nombre (openclaw, chrome o CDP remoto).
|
||||
- `target` (`sandbox` | `host` | `node`) para seleccionar dónde vive el navegador.
|
||||
- En sesiones con sandbox, `target: "host"` requiere `agents.defaults.sandbox.browser.allowHostControl=true`.
|
||||
- Si se omite `target`: las sesiones con sandbox usan `sandbox` de forma predeterminada, las sesiones sin sandbox usan `host`.
|
||||
- Si hay un node con capacidad de navegador conectado, la herramienta puede redirigirse automáticamente a él a menos que fijes `target="host"` o `target="node"`.
|
||||
- En sesiones aisladas, `target: "host"` requiere `agents.defaults.sandbox.browser.allowHostControl=true`.
|
||||
- Si se omite `target`: las sesiones aisladas usan `sandbox` de forma predeterminada y las no aisladas usan `host`.
|
||||
- Si hay un nodo con capacidad de navegador conectado, la herramienta puede enrutar automáticamente hacia él a menos que fijes `target="host"` o `target="node"`.
|
||||
|
||||
Esto mantiene al agente determinista y evita selectores frágiles.
|
||||
|
||||
## Relacionado
|
||||
|
||||
- [Resumen de Tools](/es/tools) — todas las herramientas disponibles del agente
|
||||
- [Sandboxing](/es/gateway/sandboxing) — control del navegador en entornos con sandbox
|
||||
- [Descripción general de las herramientas](/es/tools) — todas las herramientas de agente disponibles
|
||||
- [Aislamiento](/es/gateway/sandboxing) — control del navegador en entornos aislados
|
||||
- [Seguridad](/es/gateway/security) — riesgos y refuerzo del control del navegador
|
||||
|
||||
Loading…
Reference in New Issue
Block a user