From 89e84de5ee7836adfc2a36d095324dd56d3c923d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Iniesta=20Fern=C3=A1ndez?= Date: Tue, 2 Jun 2026 16:40:42 +0200 Subject: [PATCH] Delete Analisis_NemoClaw.md --- Analisis_NemoClaw.md | 181 ------------------------------------------- 1 file changed, 181 deletions(-) delete mode 100644 Analisis_NemoClaw.md diff --git a/Analisis_NemoClaw.md b/Analisis_NemoClaw.md deleted file mode 100644 index 730d44e..0000000 --- a/Analisis_NemoClaw.md +++ /dev/null @@ -1,181 +0,0 @@ -das # Análisis del Proyecto NemoClaw para AzulClaw - -Este documento recoge un análisis exhaustivo del proyecto **NVIDIA NemoClaw** y de sus características principales, con el objetivo de extraer ideas, funcionalidades, y enfoques arquitectónicos que puedan ser reutilizados y adaptados para **AzulClaw**, tu implementación de OpenClaw orientada a **Azure**, que cuenta con un backend en Python (`azul_backend`) y una aplicación de escritorio con Tauri (`azul_desktop`). - ---- - -## 1. ¿Qué ventajas tiene NemoClaw vs OpenClaw Vanilla? - -Antes de adaptar sus características, es crucial entender por qué NVIDIA creó NemoClaw sobre OpenClaw (el proyecto base). - -En formato resumen, **OpenClaw** es el "cerebro" o el agente base (gestiona la memoria, uso de herramientas, LLM calls). Sin embargo, ejecutar OpenClaw directamente en tu ordenador (Vanilla) significa que el agente tiene acceso a tus archivos, tu red, y tus contraseñas. - -**NemoClaw** es el "Entorno de Ejecución Seguro" (Wrapper/Stack) que envuelve a OpenClaw. Sus principales ventajas son: - -1. **Aislamiento Total (Sandboxing):** Encierra a OpenClaw en un contenedor Linux endurecido (vía NVIDIA OpenShell) utilizando `Landlock`, namespaces de red (`netns`), y filtros `seccomp`. El agente no puede ejecutar código malicioso en tu máquina anfitriona. -2. **Seguridad de Credenciales (Inference Proxy):** En OpenClaw tú le das la API Key de OpenAI al agente. En NemoClaw, las claves se quedan en tu máquina host. NemoClaw intercepta las llamadas del agente al LLM, inyecta las credenciales de forma transparente, y se las envía a Azure, OpenAI o un modelo local (Ollama/vLLM). El agente *nunca* conoce las contraseñas. -3. **Aprobaciones de Red (Human-in-the-Loop):** NemoClaw bloquea todas las conexiones salientes a Internet por defecto. Si el agente intenta conectarse a `api.github.com`, la conexión se pausa y NemoClaw pregunta al humano si quiere Aprobar o Denegar la salida. -4. **Despliegue Llave en Mano (Blueprints):** En lugar de configurar contenedores, webhooks para Slack/Telegram, y bases de datos a mano, NemoClaw utiliza una configuración declarativa (YAML/JSON) y un comando interactivo (`nemoclaw onboard`) que levanta toda la infraestructura en segundos. - ---- - -## 2. Arquitectura de Seguridad y Sandboxing (El enfoque "OpenShell") - -### ¿Qué hace NemoClaw? -NemoClaw hace mucho hincapié en la segurización del entorno de ejecución del agente. Utiliza **NVIDIA OpenShell** para crear un "sandbox" (entorno aislado) en el que se ejecuta OpenClaw. Emplea mecanismos de aislamiento del kernel como Landlock, seccomp, y namespaces de red (netns) para evitar que el agente pueda comprometer la máquina host o acceder a redes no autorizadas. - -### ¿Cómo aplicarlo a AzulClaw? -En AzulClaw, la ejecución de código o la manipulación de archivos por parte del agente es uno de los puntos más críticos, especialmente si se va a orientar a un entorno empresarial (Business/Azure). - -- **`azul_hands_mcp` (Backend):** - - Puedes implementar un entorno de ejecución seguro similar. En Python, si ejecutas código generado por el agente, podrías considerar el uso de contenedores efímeros (Docker), restricciones de sistema (namespaces si estás en Linux), o utilizar herramientas específicas de Azure como **Azure Container Instances (ACI)** para ejecutar tareas arriesgadas de forma aislada. - - **Reutilización de conceptos:** NemoClaw tiene un módulo de validación SSRF (Server-Side Request Forgery) (`ssrf.ts`). En tu backend, cada vez que el agente solicite acceder a una URL externa (por ejemplo, a una API del cliente), debes validar que esa URL destino de red sea segura y esté autorizada, bloqueando accesos a IPs locales o metadatos de la nube (como el endpoint `169.254.169.254` de Azure). - ---- - -## 3. Gestión de Estado y Ciclo de Vida (El enfoque "Blueprint") - -### ¿Qué hace NemoClaw? -NemoClaw define la configuración del agente y del entorno usando "Blueprints" (plantillas declarativas, a menudo YAML). Posee módulos (`blueprint/runner.ts`, `blueprint/snapshot.ts`, `blueprint/state.ts`) que gestionan todo el ciclo de vida del agente: instanciación, ejecución, guardado de estado (snapshots) y restauración. - -### ¿Cómo aplicarlo a AzulClaw? -- **`azul_brain` (Backend):** - - **Plantillas Declarativas:** Implementar un sistema donde cada agente (o asistente) de un usuario empresarial se defina mediante un archivo JSON/YAML. En este archivo se definirían sus permisos, herramientas MCP habilitadas, prompt del sistema, y modelos (por ejemplo, qué despliegue de Azure OpenAI usar). - - **Snapshots y Memoria:** Replicar el sistema de `snapshots`. En un entorno de escritorio, permitir que el estado del agente y su memoria se puedan "congelar" y guardar en local o en un Azure Blob Storage para reanudar la sesión otro día exactamente donde se dejó. - ---- - -## 4. Experiencia de Incorporación Guiada ("Onboarding") - -### ¿Qué hace NemoClaw? -NemoClaw incluye un flujo de "onboarding" (`nemoclaw onboard`) que guía al usuario paso a paso (vía terminal) para crear un sandbox, configurar la inferencia (modelos) y aplicar políticas de seguridad de forma interactiva. - -### ¿Cómo aplicarlo a AzulClaw? -- **`azul_desktop` (React/Tauri):** - - Transforma esta experiencia de terminal en una **interfaz gráfica pulida y guiada** (un Setup Wizard o "First Run Experience"). - - En la aplicación Tauri, cuando el usuario abre AzulClaw por primera vez, podrías presentar pantallas para: - 1. **Autenticación en Azure** (Log in with Microsoft). - 2. Selección del modelo base (despliegues de GPT-4 en Azure OpenAI). - 3. Configuración de carpetas locales permitidas (donde el agente tendrá permisos de lectura/escritura). - 4. Conexión de herramientas MCP empresariales (CRM, repositorios locales, bases de datos). - ---- - -## 5. Políticas de Red y Enrutamiento de Inferencia (Inference Routing) - -### ¿Qué hace NemoClaw? -Protege hacia dónde se comunican los agentes. Tiene "Network Policies" para aprobar las salidas de datos (egress control) y un enrutamiento de inferencia que permite elegir qué proveedor/modelo se encarga de procesar la petición. - -### ¿Cómo aplicarlo a AzulClaw? -- **`azul_backend`:** - - **Routing en Azure:** Tu `azul_brain` debería actuar como un Gateway. Si el agente necesita generar código, enruta a un modelo optimizado (ej. GPT-4 Turbo). Si solo es un resumen, enruta a un modelo más barato (ej. GPT-3.5 o GPT-4o-mini desplegado en Azure). - - **Aprobaciones del Usuario (Human-in-the-Loop):** Cuando el agente quiera enviar datos sensibles de la empresa fuera de su entorno habitual (fuera de Azure o fuera de la máquina local del usuario), `azul_backend` debería pausar la ejecución y mandar un evento a `azul_desktop` para que el usuario *apruebe* o *deniegue* explícitamente esa conexión (egress approval flow). - ---- - -## 6. Comandos Rápidos ("Slash Commands") - -### ¿Qué hace NemoClaw? -El módulo de la CLI de NemoClaw soporta comandos extendidos (slash commands) para interactuar con la consola de manera eficiente, e incluye comandos para ver "estados de migración" o información del sistema (ej. `nemoclaw status`, `/logs`). - -### ¿Cómo aplicarlo a AzulClaw? -- **`azul_desktop` (UI/UX):** - - Implementa un cajón de chat moderno en React donde el usuario pueda usar **comandos con barra `/`** (slash commands). - - Ideas de comandos empresariales para AzulClaw: - - `/context [archivo/carpeta]` -> Adjunta contexto explícito al agente. - - `/memory view` -> Muestra en una tabla la memoria persistente que el agente ha recabado. - - `/sandbox status` -> Muestra el estado del entorno de ejecución aislado del agente. - - `/azure billing` -> Llama a una herramienta interna que consulta los costes acumulados de inferencia de la sesión actual. - ---- - -## 7. Ideas de Estructura de Código Extrapolables - -Aunque NemoClaw está hecho principalmente en TypeScript, los patrones de diseño son replicables en Python (`azul_backend`): - -* **Validación de Entradas:** Un middleware o decorador antes de pasar instrucciones al LLM para asegurar que no hay intención maliciosa (Prompt Injection corporativo). -* **Separación Clara de Roles:** - * *NemoClaw Runner* = Tu `azul_brain` (El orquestador de lógica). - * *NemoClaw Sandbox* = Tu `azul_hands_mcp` (Restricciones y ejecución confinada). - * *NemoClaw CLI* = Tu `azul_desktop` (La vista unificada para el usuario). - -### Ejemplo de Configuración Extrapolable (Para AzulClaw) - -Podrías tener un archivo de configuración en tu aplicación que agrupe estas ideas: - -```json -{ - "agent_profile": "business_analyst", - "inference": { - "provider": "azure_openai", - "deployment_id": "gpt-4-turbo", - "fallback_deployment": "gpt-35-turbo" - }, - "sandbox_policy": { - "allowed_local_paths": ["C:\\Users\\javie\\Documents\\Proyectos"], - "network_egress": { - "mode": "ask_user", - "allowed_domains": ["api.powerbi.com", "graph.microsoft.com"] - } - }, - "mcp_tools": [ - "azure_blob_reader", - "local_file_system_sandbox" - ] -} -``` - ---- - -## 8. Detalles Técnicos Específicos para Implementar en AzulClaw - -Tras analizar a bajo nivel el código fuente de NemoClaw (`ssrf.ts` y `runner.ts`), hay detalles técnicos específicos que deberíamos adoptar para garantizar la estabilidad y la seguridad del sistema en AzulClaw: - -### A. Prevención de SSRF Robusta (`ssrf.ts` equivalente en Python) -NemoClaw no se limita a bloquear cadenas de texto como `localhost` en las URLs solicitadas por el agente. Implementa una barrera real contra SSRF resolviendo las IPs y comprobando que no pertenezcan a rangos privados/reservados: -- **Implementación recomendada en `azul_backend`:** - Antes de que el agente u `azul_hands_mcp` ejecute una petición a una URL externa: - 1. Extraer el *hostname* de la URL. - 2. Resolver el *hostname* a su IP (utilizando `socket.gethostbyname` o librerías asíncronas en Python). - 3. Validar matemáticamente que la IP resuelta no recae en ningún bloque CIDR privado (ej. `127.0.0.0/8`, `10.0.0.0/8`, `192.168.0.0/16`, y crucialmente en Azure: `169.254.0.0/16` para evitar accesos al IMDS o Instance Metadata Service). - 4. Permitir únicamente esquemas `http` y `https`. - -### B. Mecánica de Runners y Comunicación de Estado (`runner.ts` equivalente) -El "Runner" de NemoClaw orquesta el sandbox utilizando un protocolo estándar a través de la salida estandar (`STDOUT`) y gestiona el ciclo de vida creando un estado en formato JSON (`plan.json`). -- **Implementación recomendada para AzulClaw (Tauri + Python):** - 1. **Protocolo IPC Ligero:** La comunicación entre la IU (Tauri) y el motor (Python) puede beneficiarse de un protocolo estándar en la salida de consola, por ejemplo imprimendo comandos estructurados: `PROGRESS::` o usando JSON-RPC. Esto permitirá a `azul_desktop` renderizar barras de carga fluidas mientras el motor Python inicializa Azure o el contenedor local. - 2. **Persistencia de Sesiones por Archivos:** Al igual que NemoClaw guarda ejecuciones en `~/.nemoclaw/state/runs/`, AzulClaw puede crear perfiles de ejecución JSON en `~/.azulclaw/sessions/`. Esto facilitaría enormemente el poder cerrar la aplicación de escritorio y al abrirla, la UI lee esos archivos y permite "Retomar" una sesión de trabajo con su historial intacto. - ---- - -### Resumen de Próximos Pasos para tu Proyecto: -1. **Diseñar el "Onboarding" visual en Tauri** basándote en la simplicidad de la CLI de NemoClaw. -2. **Definir el modelo de "Blueprint/Configuración" en JSON** para que `azul_backend` instancie a los agentes de manera parametrizada. -3. **Implementar "Gateways de Seguridad" y validaciones de Egress/SSRF** en `azul_backend` (particularmente para el uso de `azul_hands_mcp`). - ---- - -## 9. Integración con IDEs (VSCode) y Model Context Protocol (MCP) - -Has mencionado la posibilidad de que el agente trabaje e interactúe directamente con tu IDE (como VSCode, de forma similar a extensiones como Cline o Antigravity). - -### ¿Qué hace NemoClaw al respecto? -NemoClaw en sí mismo **no** incluye una extensión nativa para IDEs "out of the box". Su enfoque principal es ejecutar el agente (OpenClaw) de forma segura en un contenedor (OpenShell) y proveer conectores hacia canales de mensajería (Telegram, Slack, Discord). Sin embargo, OpenClaw **sí** soporta el estándar **MCP (Model Context Protocol)**. En NemoClaw, si quieres que el agente interactúe con tu entorno local o herramientas de desarrollo, debes ejecutar manualmente un servidor MCP en tu máquina anfitriona (host) y exponer ese puerto a través de las políticas de red del sandbox para que el agente pueda consumirlo. - -### ¿Cómo superarlo e implementarlo nativamente en AzulClaw? -Dado que tienes control sobre la aplicación de escritorio (`azul_desktop`) y el entorno de herramientas (`azul_hands_mcp`), puedes diseñar AzulClaw para que sea un puente directo y transparente entre el agente aislado y el entorno del desarrollador, sin configuraciones manuales: - -1. **`azul_hands_mcp` como Puente Local Segurizado:** - En lugar de aislar completamente al agente del sistema local, `azul_hands_mcp` puede iniciarse dinámicamente como un Servidor MCP orquestado por tu backend Python. Este módulo proveería herramientas (tools) específicas para: - * Listar directorios locales del proyecto abierto (p. ej. `c:\Users\javie\Github\AzulClaw`). - * Leer y editar archivos directamente. - * Ejecutar comandos seguros de bash/powershell si el desarrollador los aprueba. - -2. **Integración Directa y Aprobaciones UI (`azul_desktop`):** - * Desde la interfaz de Tauri, el usuario puede "conectar" una carpeta local al agente. La UI se comunica con el backend y le da acceso explícito a `azul_hands_mcp` a esa ruta. - * **Arquitectura de Intercepción (Human-in-the-Loop):** Cuando el agente intenta modificar código o ejecutar un comando en el IDE del usuario, la petición de `azul_hands_mcp` es pausada. `azul_desktop` muestra un pop-up: *"AzulClaw quiere modificar /src/main.rs. [Aprobar] [Denegar]"*. Esto simula la seguridad de NemoClaw pero adaptada a la comodidad del desarrollador de escritorio. - -3. **Inyección en VSCode:** - * Para integraciones más profundas a futuro, podrías hacer que AzulClaw exponga una API local u un servidor web sockets. Podrías crear una mínima extensión de VSCode que simplemente se conecte a este servidor, permitiendo al agente leer los "archivos activos/abiertos" en ese momento, igual que ocurre con los sistemas de contexto de ventana de Cline y otros asistentes modernos. - -En resumen: puedes aprovechar la robustez de un *backend* aislado pero construir una **experiencia de usuario superior** gracias a la UI de Tauri, facilitando la integración con flujos de trabajo de código sin perder control sobre la seguridad.