Ir al contenido

Seleccionar idioma

Idioma actual: Español (España)

🚀 OmniRoute — La puerta de enlace de IA gratuita


CapaTecnología
Tiempo de ejecuciónNode.js 22.x / 24.x LTS — >=22.22.2 <23 || >=24.0.0 <27
LenguajeTypeScript 6.0 — 100% TypeScript en src/ y open-sse/ (cero any en el núcleo desde la v2.0)
FrameworkNext.js 16 + React 19 + Tailwind CSS 4
Base de datosbetter-sqlite3 (SQLite, WAL journaling) + LowDB (JSON legacy) — 122 módulos de dominio, 183 migraciones
MemoriaSQLite FTS5 de texto completo + incrustaciones vectoriales cuantificadas int8, decaimiento tipado
EsquemasZod 4 — Validación de E/S de herramientas MCP + contratos de API
ProtocolosMCP (stdio / HTTP / SSE) + A2A v0.3 (JSON-RPC 2.0 + SSE)
StreamingServer-Sent Events (SSE) + puente WebSocket (/v1/ws)
CompresiónPipeline de 12 motores — RTK, Caveman, LLMLingua-2 (MobileBERT ONNX), GCF, OmniGlyph
Autenticación y seguridadOAuth 2.0 (PKCE) + JWT + Claves API + autenticación con ámbito MCP · AES-256-GCM en reposo · DOMPurify
Sigilowreq-js — Suplantación de huella digital TLS JA3 / JA4, proxy de 3 niveles
ResilienciaDisyuntor, retroceso exponencial, anti-avalancha, auto-curación combinada
Registropino — registros JSON estructurados con contexto de solicitud
PruebasNode.js test runner + Vitest — más de 39,000 declaraciones de pruebas estáticas en más de 5,100 archivos de prueba rastreados (unitarias, integración, E2E, seguridad, ecosistema)
PlataformasEscritorio (Electron) · Android (Termux) · PWA (cualquier navegador)
CI/CDGitHub Actions — publicación automática en npm + Docker Hub en cada lanzamiento
EnlacesSitio web · npm · Docker Hub
DocumentoDescripción
Guía del usuarioProveedores, combinaciones, integración con CLI, despliegue
Guía de configuraciónMétodos completos de instalación, configuraciones de herramientas CLI, configuración de protocolos, ajuste de tiempos de espera
Guía de herramientas CLIConfiguración específica para Claude Code, Codex, Cursor, Cline, OpenClaw, Kilo y Copilot
Modo remotoControla una instancia remota de OmniRoute (VPS) desde la CLI de tu portátil mediante tokens de acceso con alcance limitado
Configuración de Claude CodeConecta Claude Code con OmniRoute (local/remoto) mediante launch y perfiles por modelo
Inicio rápido3 pasos: instalar → conectar → configurar
DocumentoDescripción
Guía de DockerDocker run, perfiles de Compose, HTTPS con Caddy, túneles, etiquetas de imágenes
Guía de PodmanIntegración de Quadlet con systemd, podman-compose, SELinux
Despliegue en VMGuía completa: configuración de VM + nginx + Cloudflare
Despliegue en Fly.ioDespliegue en Fly.io con almacenamiento persistente
Guía de TermuxEjecuta OmniRoute en Android mediante Termux
Guía de PWAInstalación, almacenamiento en caché y arquitectura de la aplicación web progresiva
Guía de desinstalaciónEliminación limpia para todos los métodos de instalación
Configuración del entornoVariables y referencias completas de .env
DocumentoDescripción
ArquitecturaArquitectura del sistema, flujo de datos y funcionamiento interno
Guía de compresiónCanalización con 7 opciones: desactivada / ligera / estándar / agresiva / ultra / RTK / apilada
Compresión RTKCompresión de la salida de comandos, filtros, confianza, verificación y recuperación de la salida sin procesar
Motores de compresiónCaveman, RTK, canalizaciones apiladas, interfaces de panel/API/MCP
Formato de reglas de compresiónEsquemas de paquetes de reglas JSON para filtros de Caveman y RTK
Paquetes de idiomas para compresiónDetección de idiomas y creación de paquetes de reglas para Caveman
Guía de resilienciaDisyuntores, periodos de enfriamiento, cola, prevención de avalanchas y suplantación de TLS
Motor Auto-ComboPuntuación de 16 factores, paquetes de modos y autorreparación
Guía de proxiesSistema de proxies de 3 niveles, mercado de 1proxy y operaciones CRUD del registro
Niveles gratuitosDirectorio consolidado: 35 grupos recurrentes documentados / 489 entradas de nivel gratuito catalogadas
Galería de funcionesRecorrido visual por el panel con capturas de pantalla
Documentación del código baseRecorrido por el código base accesible para principiantes
DocumentoDescripción
Referencia de la APITodos los endpoints con ejemplos
Especificación OpenAPIEspecificación OpenAPI 3.0
Servidor MCP110 herramientas MCP, configuraciones de IDE, clientes de Python/TS/Go
Guía del servidor MCPInstalación de MCP, transportes y referencia de herramientas
Servidor A2AProtocolo JSON-RPC 2.0, capacidades, transmisión y gestión de tareas
Guía del servidor A2ATarjeta de agente A2A, tareas, capacidades y transmisión
DocumentoDescripción
ContribuciónConfiguración y directrices de desarrollo
Modelo de ramificación y publicaciónA qué ramas se dirigen las PR (release/*) y qué significan main y las etiquetas
Registro de cambiosHistorial completo de publicaciones por versión
Política de seguridadNotificación de vulnerabilidades y prácticas de seguridad
Guía de i18nCompatibilidad con 42 idiomas, flujo de trabajo de traducción y RTL
Lista de comprobación de publicaciónPasos de validación previos a la publicación
Plan de coberturaEstrategia de cobertura de pruebas para más de 39,000 declaraciones de pruebas estáticas en más de 5,100 archivos de pruebas rastreados

OmniRoute está formado por una apasionada comunidad de código abierto. Estas personas han realizado contribuciones excepcionales que afectan directamente a la calidad, la estabilidad y el alcance del proyecto. Gracias.

Colaboradores externos por solicitudes de incorporación de cambios fusionadas

Sección titulada «Colaboradores externos por solicitudes de incorporación de cambios fusionadas»
PuestoColaboradorPR fusionadas~Líneas modificadas
1backryun190227,977
2oyi77180407,678
3rdself14580,663
4JxnLexn128387,049
5KooshaPari101125,747
6herjarsa88230,872
7RaviTharuma7955,106
8maxmad64bis69394,715
9artickc5933,260
10HouMinXi5147,334
10chirag127515,153
12xz-dev50245,976
13hartmark4752,185
14rqzbeh39143,181
15dhaern3419,559
16Dingding-leo331,986
17NomenAK3213,854
18MumuTW3016,953
19benzntech2911,641
20pacocartones249,331
20Prudhvivuda246,312

Datos fijados en la punta activa de release/v3.8.50, dafb4ae808, con fusiones hasta 2026-08-24 05:26:03 UTC. El censo paginado de GitHub GraphQL contiene 5,911 PR fusionadas: 2,707 del propietario del repositorio, 179 de Dependabot y 3,025 PR externas de 535 colaboradores distintos. «Líneas modificadas» corresponde a las adiciones + eliminaciones de GitHub e incluye archivos generados, archivos de bloqueo, catálogos, traducciones y documentación; mide la rotación de código, no las líneas de código de autoría propia. Se conservan los empates en el límite de la clasificación.

backryun
backryun

🥇 220 commits atribuidos por GitHub
Paijo
Paijo

🥈 219 commits atribuidos por GitHub
Randi
Randi

🥉 108 commits atribuidos por GitHub
Ravi Tharuma
Ravi Tharuma

🏅 81 commits atribuidos por GitHub
Chris
Chris

🏅 70 commits atribuidos por GitHub
Markus Hartung
Markus Hartung

🏅 69 commits atribuidos por GitHub · empatado en el puesto n.º 6
Dizzle
Dizzle

🏅 69 commits atribuidos por GitHub · empatado en el puesto n.º 6
Jan Leon
Jan Leon

🏅 64 commits atribuidos por GitHub
zenobit
zenobit

🏅 62 commits atribuidos por GitHub
Bob.Hou
Bob.Hou

🏅 51 commits atribuidos por GitHub · empatado en el puesto n.º 10
Xiangzhe
Xiangzhe

🏅 51 commits atribuidos por GitHub · empatado en el puesto n.º 10

Revisado de nuevo el 2026-08-24 06:14:31 UTC: commits atribuidos por GitHub según la API de colaboradores del repositorio para la rama predeterminada release/v3.8.50. La API devolvió 525 identidades (415 usuarios, 2 bots y 108 anónimas); esta tabla excluye al responsable del mantenimiento, los bots y las identidades anónimas, y conserva los empates de la clasificación. Es distinta tanto de la clasificación anterior de PR fusionadas como del censo de metadatos de Git de 639 personas que aparece a continuación.

🙏 Las funcionalidades, las correcciones de errores y las mejoras de infraestructura de estos colaboradores son una parte fundamental de lo que hace que OmniRoute sea fiable y tenga tantas funcionalidades. Cada solicitud de incorporación de cambios, cada caso de prueba y cada archivo de traducción i18n son importantes. El código abierto lo construyen personas como ellos.



Un sincero agradecimiento a las personas que financian OmniRoute de su propio bolsillo: cada contribución mantiene el proyecto gratuito, independiente y en marcha.

Andrew
Andrew

💛 Patrocinador mensual activo
Vlad I
Vlad I

💛 Patrocinador mensual activo
Paco Cartones
Paco Cartones

💛 Patrocinador activo con una aportación única
Professor Igor Morais Vasconcelos
Prof. Igor Morais

💛 Antiguo colaborador con una aportación única
longtao
longtao

💛 Antiguo colaborador con una aportación única

… y otras personas que prefieren mantener su privacidad 💛

Los patrocinadores públicos de GitHub Sponsors se volvieron a validar el 2026-08-24. El estado activeOnly de GitHub determina las etiquetas de actividad anteriores; se mantiene el agradecimiento a los colaboradores públicos que realizaron una aportación única y se identificaron previamente, mientras que los patrocinadores privados permanecen anónimos.

💖 Conviértete en patrocinador → — cada dólar mantiene OmniRoute gratuito e independiente.


Colaboradores

Auditado el 2026-08-24 sobre la base congelada ac02c5b42f y comprobado de nuevo en la punta activa de release/v3.8.50, dafb4ae808: 639 identidades humanas de Git normalizadas; 407 aparecen como autores de commits (incluido el responsable del mantenimiento) y 232 únicamente en pies de página explícitos Co-authored-by. El censo normaliza los identificadores noreply de GitHub, excluye 26 identidades de bots, agentes, servicios o marcadores de posición, y no combina direcciones de correo electrónico ordinarias solo porque coincidan sus nombres para mostrar.

  1. Crea un fork del repositorio
  2. Crea una rama desde la punta activa de release/vX.Y.Z (no desde main); consulta el modelo de ramificación y versiones
  3. Crea tu rama de funcionalidad (git checkout -b feat/amazing-feature)
  4. Confirma tus cambios (git commit -m 'feat: add amazing feature')
  5. Envía los cambios a la rama (git push origin feat/amazing-feature)
  6. Abre una Pull Request con base = esa rama release/vX.Y.Z

Consulta CONTRIBUTING.md para obtener directrices detalladas.

Ventana de terminal
# Crear una versión; npm publish se ejecuta automáticamente
VERSION=x.y.z
gh release create "v${VERSION}" --title "v${VERSION}" --generate-notes

Gráfico del historial de estrellas

OmniRoute se apoya en el trabajo de gigantes. Comenzó como una bifurcación de 9router y una adaptación a TypeScript del proyecto en Go CLIProxyAPI; a partir de ahí, cada subsistema que aparece a continuación se inspiró en un proyecto de código abierto que llegó antes. Cada uno dio forma a una parte concreta de OmniRoute. Esta es nuestra forma de darles las gracias a todos. 🙏

⭐ recuentos de estrellas verificados mediante la API REST de GitHub el 24 de agosto de 2026; anímate a dar una estrella a estos proyectos. Los recuentos son una instantánea exacta de esa fecha y cambiarán de forma natural.

Proyecto⭐Cómo inspiró a OmniRoute
9router26,161El proyecto original en el que se basa este fork, ampliado aquí con APIs multimodales y una reescritura completa en TypeScript.
CLIProxyAPI48,497La implementación en Go que inspiró esta adaptación a JavaScript / TypeScript.
LiteLLM57,100La pasarela de IA cuyo conjunto de datos público de precios alimenta nuestra sincronización de seguimiento de costes y cuyo modelo de normalización de proveedores sirvió de base para nuestro enrutamiento.
codex-chatgpt-web1,410Código fuente MIT adaptado para el puente integrado de ChatGPT Web → Codex Responses, incluidos los adaptadores de sesión del navegador, estructuración de respuestas, uso y búsqueda web.
free-claude-code48,112Patrones adaptados para la recuperación de flujos, alias sin razonamiento, búsqueda web alternativa, límites de ventana deslizante, ocultación de datos en registros y flujos de inicio reforzados.
composer-api322Patrones de selección de herramientas, restricciones de salida y confirmación de herramientas de Cursor Composer adaptados al ejecutor nativo de Cursor.
codex-multi-auth457Patrones de inicio de sesión nuevo y rotación de tokens de actualización adaptados para la reautenticación OAuth de Codex.
opencode-anthropic-auth510Valores predeterminados de transformación compatibles con Claude Code y comportamiento de las cabeceras de facturación, generalizados en el puente de OmniRoute basado en configuración.
grok2api-merged2Sus asignaciones de modelos Grok, su generador Statsig de TypeError simulado, sus valores predeterminados de solicitudes y dispositivos y su procesador de respuestas NDJSON se adaptaron de forma sustancial al ejecutor Grok Web de OmniRoute.
TQZHR/grok2api705La principal fuente de código transitiva en la que se basa grok2api-merged; sus implementaciones de modelos, cabeceras, cargas útiles, Statsig y procesadores se conservan en el linaje de Grok Web.
chenyme/grok2api7,520El código fuente MIT subyacente para las cargas útiles y los valores predeterminados de dispositivos de Grok, el generador Statsig y el procesador result.response, transmitido a través de TQZHR y grok2api-merged.
grok2api-pro27Una fuente transitiva reconocida por grok2api-merged por su capa de grupo de proxies; OmniRoute conserva ese aviso de linaje, pero no afirma haber adaptado un grupo de proxies en su ejecutor Grok Web acotado.
GrokProxy50Su proxy de Grok autenticado mediante cookies y su patrón de transmisión de result.response.token sirvieron de base para el transporte Grok Web de OmniRoute.
GrokBridge5La implementación original de Grok Web tomó como referencia su diseño ascendente HTTP/navegador; su ruta HTTP directa deriva de GrokProxy, por lo que no se afirma haber realizado una adaptación de código independiente.
grok-web-api14Sus esquemas de Rust ChatOptions y de envolturas de respuesta sirvieron de base para los tipos TypeScript de solicitudes y respuestas en streaming de Grok de OmniRoute.

🗜️ Compresión de contexto y tokens — motores

Sección titulada «🗜️ Compresión de contexto y tokens — motores»
Proyecto⭐Cómo inspiró a OmniRoute
Caveman100,538El proyecto viral «¿por qué usar muchos tokens si pocos tokens bastan?»; su filosofía de habla cavernícola impulsa nuestro modo de compresión estándar y más de 30 reglas de eliminación de relleno y condensación.
RTK – Rust Token Killer77,185Compresión de alto rendimiento de la salida de comandos; inspiró nuestro motor RTK, el DSL de filtrado JSON, la recuperación de salida sin procesar y el proceso apilado RTK → Caveman.
headroom67,310Compresión reversible del contexto (SmartCrusher); inspiró nuestro motor headroom y el patrón de marcadores de recuperación ccr.
LLMLingua6,598Investigación sobre compresión de prompts (LLMLingua / LLMLingua-2); inspiró nuestro motor llmlingua asíncrono, seguro para código y tolerante a fallos.
llmlingua-2-js31El port a JS/ONNX (MobileBERT / XLM-RoBERTa) utilizado como backend de hilos de trabajo para nuestro motor LLMLingua.
Troglodita40Compresión de tokens en portugués de Brasil; impulsa nuestro paquete de idioma pt-BR: reducción de pleonasmos y eliminación de relleno ajustadas a la gramática del portugués brasileño.
ponytail108,957La habilidad viral de programación YAGNI del «desarrollador sénior perezoso»; inspiró nuestro estilo de salida less-code: una orientación hacia el cambio funcional más pequeño que reduce el código _generado_ (el equivalente en el eje de salida de la prosa concisa de Caveman).
i-have-adhd23,526Su estilo de respuesta orientado primero a la acción y adaptado al TDAH se incorporó al estilo de salida conciso de OmniRoute en cinco idiomas.

🧩 Formatos compactos, investigación sobre tokens y herramientas sensibles al código

Sección titulada «🧩 Formatos compactos, investigación sobre tokens y herramientas sensibles al código»
Proyecto⭐Cómo inspiró a OmniRoute
TOON25,233Notación de objetos orientada a tokens; su modelo columnar de encabezado y filas dio forma a nuestra etapa de compactación tabular.
GCF – Graph Compact Format41Su formato compacto de grafos y su diseño de perfiles genéricos sirvieron de base para la compactación tabular de OmniRoute y el formato del códec Headroom.
gcf-typescript4La implementación MIT en TypeScript, incorporada directamente y ampliada como códec de perfil genérico de Headroom.
token-optimizer-mcp494Caché Brotli/SQLite y delta de contexto por sesión; inspiró nuestro motor session-dedup.
token-savior1,122Compactación de la salida de Bash y perfiles MCP; inspiró nuestra disciplina de interrupción de la compresión y la reducción de manifiestos de herramientas MCP.
token-saver138Compresión de salida sensible al contenido y específica para cada tipo de archivo, con interrupción en caso de fallo; validó nuestro despacho por tipo y la omisión cuando la ganancia es mínima.
token-optimizer1,951«Encontrar los tokens fantasma»; su patrón de externalización y referencias recuperables sirvió de base para nuestro enfoque de externalización CCR.
TokenMizer28Un modelo de referencia de grafo de sesión y deduplicación de líneas entre turnos que sirvió de base para nuestro diseño de session-dedup.
OmniCompress3JSON columnar en Rust, recuperación direccionada por contenido y deduplicación entre mensajes; validó el diseño de nuestros motores headroom/ccr/session-dedup y la invariante estable para la caché «la forma comprimida es independiente de la posición».
mcp-compressor113Compresión de esquemas y descripciones de herramientas MCP; sirvió de base para nuestra reducción de la cardinalidad de manifiestos de herramientas MCP.
RepoMapper197Clasificación de mapas de repositorios al estilo de Aider; sirvió de base para nuestra exploración de mapas de repositorios y clasificación de recuperación.
quiet-shell-mcp4Reducción declarativa de la salida del shell mediante MCP; validó nuestra compactación declarativa de la salida de Bash.
ts-morph6,162Kit de herramientas para la API del compilador de TypeScript; inspiró nuestra eliminación de comentarios basada en un analizador, que conserva los literales de cadena, de plantilla y de expresiones regulares.
Proyecto⭐Cómo inspiró a OmniRoute
Mem063,902Capa de memoria universal: su modelo de proxy como límite de escritura/lectura dio forma a nuestra arquitectura de memoria.
Letta (MemGPT)24,382Agentes con estado y memoria por niveles: inspiraron nuestro modelo por niveles de Control y Recuperación del Contexto (CCR).
WFGY1,781La taxonomía ProblemMap de 16 modos de fallo recurrentes de RAG/LLM: el vocabulario compartido de nuestra guía de resolución de problemas.

🛰️ Inspección de tráfico, MITM y proxy transparente

Sección titulada «🛰️ Inspección de tráfico, MITM y proxy transparente»
Proyecto⭐Cómo inspiró a OmniRoute
llm-interceptor66La interceptación y el análisis MITM del tráfico entre asistentes de programación y LLM sirvieron de base para los primeros requisitos del Inspector de Tráfico. Cuatro módulos derivados anteriormente —fusión de SSE, normalización de conversaciones, enmascaramiento de secretos y saneamiento de encabezados— se han sustituido por implementaciones independientes de sala limpia basadas en estándares públicos de protocolos. Las dos superficies de transferencia directa al host (passthrough.ts y _internal/bypass.cjs) siguen siendo implementaciones internas de OmniRoute clasificadas de forma independiente; no se reescribieron como parte de esa sustitución.
ProxyBridge5,995Enrutamiento de proxy transparente por proceso: inspiró nuestro cierre seguro ante fallos de MITM, los tiempos de espera de inactividad de sockets, la atribución de procesos mediante /proc y la captura TPROXY.

📚 Datos de modelos, observabilidad e interfaz de usuario

Sección titulada «📚 Datos de modelos, observabilidad e interfaz de usuario»
Proyecto⭐Cómo inspiró a OmniRoute
models.dev6,555Base de datos abierta de especificaciones, precios y capacidades de modelos de IA, sincronizada de forma nativa con nuestro catálogo de modelos.
React Flow / xyflow38,108La biblioteca de gráficos basada en nodos que impulsa nuestro Estudio de Compresión y nuestro Estudio de Combinación/Enrutamiento en tiempo real.
LangGraph40,314La visualización en vivo de gráficos de flujo de trabajo de LangGraph Studio inspiró la vista de cascada en tiempo real de nuestros Estudios.
Langfuse33,592Su modelo de observabilidad de traza → tramo → generación dio forma a la vista en cascada de nuestro Estudio de Compresión.
Kiali3,631Observabilidad de la malla de servicios de Istio: inspiró nuestras insignias de disyuntores y los elementos visuales de aristas con errores del Estudio de Enrutamiento/Combinación.
lobe-icons2,428Logotipos de marcas de IA/LLM que muestran los iconos de proveedores en todo nuestro panel de control.
flag-icons12,354Proporciona las banderas SVG con licencia MIT utilizadas por el selector de idioma del README.
Proyecto⭐Cómo inspiró a OmniRoute
awesome-secure-defaults721Una lista seleccionada de bibliotecas seguras de forma predeterminada que orienta nuestras decisiones de seguridad (Helmet.js, DOMPurify, ssrf-req-filter, safe-regex, Google Tink).
Proyecto⭐Cómo inspiró a OmniRoute
ClawRouter6,564Inspiró la deduplicación de solicitudes, el mecanismo alternativo de emergencia sin coste, las estrategias Auto-Combo conectables y la clasificación multilingüe de intenciones.
Antigravity-Manager30,652Su reasignación de modelos según la cuenta, la validación de rutas de ejecutables y el comportamiento de las etiquetas de planes sirvieron de base para el entorno de ejecución Antigravity de OmniRoute.
vscode-antigravity-cockpit4,817Su formato compacto de cuenta atrás para el restablecimiento de cuotas inspiró la visualización correspondiente de límites de proveedores en OmniRoute.
AionUi32,230Sus integraciones con ACP inspiraron la detección automática de agentes CLI instalados de OmniRoute.
CodexBar20,507Identificó la interfaz de cuotas de Grok Build; posteriormente, OmniRoute verificó y corrigió de forma independiente el formato real de transmisión.

Licencia MIT: consulta LICENSE para más detalles.


⬆ Volver arriba · Creado con ❤️ para la comunidad de IA de código abierto.

OmniRoute v3.8.51 · Node ≥22.22.2 · Licencia MIT · omniroute.online


undefined (a58000c7685f)

HagiCode

HagiCode es un espacio de programación con agentes. Las interacciones de interfaz, ricas y cómodas, hacen que planificar, ejecutar agentes y trabajar en proyectos sea accesible y fácil de seguir, para una experiencia de desarrollo atractiva.

Una experiencia de desarrollo atractiva gracias a interacciones de interfaz ricas y cómodas.

Visitar HagiCodeLeer la documentación
  • InteligenteLos flujos de trabajo de OpenSpec convierten la intención en un itinerario ejecutable, de la propuesta al diseño, las tareas y la entrega.
  • EficienteLa ejecución multiagente avanza en paralelo con la investigación, la implementación y la revisión, en varios repositorios y con los Agent CLI que ya usas.
  • InteresanteLas interacciones de interfaz, ricas y cómodas, hacen que planificar, ejecutar agentes y trabajar en proyectos sea accesible y fácil de seguir.

Descargar para Windows

Obtenerlo en Microsoft StoreTodas las descargas

Convierte ideas en software entregado.

HagiCode es un espacio de trabajo de programación con agentes: los flujos de trabajo de OpenSpec planifican el cambio, la ejecución multiagente lo lleva a cabo y Hero Scenario hace visible el largo recorrido, para convertir ideas en software entregado.

Inteligente
Los flujos de OpenSpec convierten la intención en un camino de la propuesta a la entrega.
Eficiente
La ejecución multiagente avanza en paralelo con investigación, implementación y revisión.
Divertido
Las interacciones de interfaz facilitan la planificación, los agentes y el trabajo en proyectos.