flutter-skill
Pruebas E2E impulsadas por IA para 10 plataformas. 253 herramientas MCP. Sin configuración. Prueba Flutter, React Native, iOS, Android, Web, Electron, Tauri, KMP, .NET MAUI desde lenguaje natural.
Documentación
flutter-skill
Dale ojos y manos a cualquier agente de IA dentro de cualquier aplicación en ejecución.
10 plataformas. Cero código de prueba. Un servidor MCP.
Demo • Inicio rápido • Plataformas de IA • Plataformas • vs Otros • Documentación
🚀 Cero configuración. Cero código de prueba. Solo habla con tu IA.
Si esto te ahorra tiempo, considera dar una estrella al repositorio ⭐ — ¡ayuda a que otros lo encuentren!
Demo de 30 segundos
https://github.com/user-attachments/assets/d4617c73-043f-424c-9a9a-1a61d4c2d3c6
Un solo prompt. 28 acciones impulsadas por IA. Cero código de prueba. La IA explora un clon de TikTok, navega pestañas, desplaza feeds, prueba la búsqueda, rellena formularios — todo de forma autónoma.
Por qué existe esto
Escribir pruebas E2E es doloroso. Mantenerlas es peor. flutter-skill adopta un enfoque diferente:
- 🔌 Conecta cualquier agente de IA (Claude, Cursor, Windsurf, Copilot, OpenClaw) directamente a tu aplicación en ejecución mediante MCP
- 👀 El agente ve tu pantalla — toca botones, escribe texto, desplaza, navega — como un probador humano que nunca duerme
- ✅ Cero código de prueba — sin Page Objects, sin XPath, sin selectores frágiles. Solo inglés sencillo
- ⚡ Cero configuración — 2 líneas de código, funciona en las 10 plataformas
You: "Test the checkout flow with an empty cart, then add 3 items and complete purchase"
Your AI agent handles the rest — screenshots, taps, text entry, assertions, navigation.
No Page Objects. No XPath. No brittle selectors. Just plain English.
Inicio rápido
1. Instala (30 segundos)
npm install -g flutter-skill
2. Añádelo a tu IA (copia y pega en la configuración de MCP)
{
"mcpServers": {
"flutter-skill": {
"command": "flutter-skill",
"args": ["server"]
}
}
}
Funciona con Claude Desktop, Cursor, Windsurf, Copilot, Cline, OpenClaw — cualquier agente compatible con MCP.
3. Añádelo a tu aplicación (2 líneas para Flutter)
import 'package:flutter_skill/flutter_skill.dart';
void main() {
if (kDebugMode) FlutterSkillBinding.ensureInitialized();
runApp(MyApp());
}
4. Prueba — solo habla con tu IA:
"Lanza mi aplicación, explora cada pantalla y reporta cualquier error"
Eso es todo. Cero configuración. Cero código de prueba. Funciona en menos de 60 segundos.
📦 Más métodos de instalación (Homebrew, Scoop, Docker, IDE, Agent Skill)
| Método | Comando |
|---|---|
| npm | npm install -g flutter-skill |
| Homebrew | brew install ai-dashboad/flutter-skill/flutter-skill |
| Scoop | scoop install flutter-skill |
| Docker | docker pull ghcr.io/ai-dashboad/flutter-skill |
| pub.dev | dart pub global activate flutter_skill |
| VSCode | Extensiones → "Flutter Skill" |
| JetBrains | Plugins → "Flutter Skill" |
| Agent Skill | npx skills add ai-dashboad/flutter-skill |
| Cero configuración | flutter-skill init (detecta y parchea tu aplicación automáticamente) |
Uso con plataformas de IA
Modo servidor MCP (integración con IDE)
Funciona con cualquier herramienta de IA compatible con MCP. Una línea de configuración:
{
"mcpServers": {
"flutter-skill": {
"command": "flutter-skill",
"args": ["server"]
}
}
}
| Plataforma | Archivo de configuración | Estado |
|---|---|---|
| Cursor | .cursor/mcp.json | ✅ |
| Claude Desktop | claude_desktop_config.json | ✅ |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | ✅ |
| VSCode Copilot | .vscode/mcp.json | ✅ |
| Cline | Configuración de VSCode → Cline → MCP | ✅ |
| OpenClaw | Skill o configuración de MCP | ✅ |
| Continue.dev | .continue/config.json | ✅ |
Modo servidor HTTP (CLI y automatización)
Para automatización de navegador independiente, pipelines de CI/CD o acceso remoto:
# Start server
flutter-skill serve https://your-app.com
# Use CLI client commands
flutter-skill nav https://google.com
flutter-skill snap # Accessibility tree (99% fewer tokens)
flutter-skill screenshot /tmp/ss.jpg
flutter-skill tap "Login"
flutter-skill type "hello@example.com"
flutter-skill eval "document.title"
flutter-skill tools # List all available tools
| Comando | Descripción |
|---|---|
nav <url> | Navegar a una URL |
snap | Instantánea del árbol de accesibilidad |
screenshot [path] | Tomar captura de pantalla |
tap <text|ref|x y> | Tocar un elemento |
type <text> | Escribir mediante teclado |
key <key> [mod] | Pulsar una tecla |
eval <js> | Ejecutar JavaScript |
title | Obtener el título de la página |
text | Obtener texto visible |
hover <text> | Pasar el cursor sobre un elemento |
upload <sel> <file> | Subir archivo |
tools | Listar herramientas |
call <tool> [json] | Llamar a cualquier herramienta |
Admite las banderas --port=N, --host=H y las variables de entorno FS_PORT/FS_HOST.
Comparación de los dos modos
server (MCP stdio) | serve (HTTP) | |
|---|---|---|
| Caso de uso | Integración con IDE / agente de IA | CLI / automatización / CI/CD |
| Protocolo | MCP (JSON-RPC sobre stdio) | HTTP REST |
| Herramientas | 253 (dinámicas por página) | 246 (genéricas) |
| Navegador | Lanza Chrome automáticamente | Se conecta a Chrome existente |
| Ideal para | Cursor, Claude, VSCode | OpenClaw, scripts, pipelines |
Referencia completa del cliente CLI: docs/CLI_CLIENT.md
10 plataformas, una herramienta
La mayoría de las herramientas de prueba funcionan en 1-2 plataformas. flutter-skill funciona en 10.
| Plataforma | SDK | Puntuación de prueba |
|---|---|---|
| Flutter (iOS/Android/Web) | flutter_skill | ✅ 188/195 |
| React Native | sdks/react-native | ✅ 75/75 |
| Electron | sdks/electron | ✅ 75/75 |
| Tauri (Rust) | sdks/tauri | ✅ 75/75 |
| Android (Kotlin) | sdks/android | ✅ 74/75 |
| KMP Desktop | sdks/kmp | ✅ 75/75 |
| .NET MAUI | sdks/dotnet-maui | ✅ 75/75 |
| iOS (Swift/UIKit) | sdks/ios | ✅ 19/19 |
| Web (cualquier sitio web) | sdks/web | ✅ |
| Web CDP (cero configuración) | No se necesita SDK | ✅ 141/156 |
Total: 656/664 pruebas aprobadas (98.8%) — cada plataforma probada contra una aplicación compleja de redes sociales con más de 50 elementos.
⚡ Rendimiento
Puntos de referencia reales de ejecuciones de pruebas automatizadas contra una aplicación compleja de redes sociales:
| Operación | Web (CDP) | Electron | Android |
|---|---|---|---|
connect | 93 ms | 55 ms | 103 ms |
tap | 1 ms | 1 ms | 2 ms |
enter_text | 1 ms | 1 ms | 2 ms |
inspect | 3 ms | 12 ms | 10 ms |
snapshot | 2 ms | 8 ms | 29 ms |
screenshot | 31 ms | 80 ms | 88 ms |
eval | 1 ms | — | — |
Eficiencia de tokens: snapshot() devuelve un árbol de elementos estructurado en lugar de una imagen — 87–99% menos tokens que enviar capturas de pantalla a tu agente de IA.
¿Qué tan rápido es? Un tap toma 1–2 ms de principio a fin. Las herramientas de automatización de navegador como Playwright y Selenium suelen tardar 50–100 ms para la misma operación. Eso es 50–100× más rápido, porque flutter-skill habla directamente con el runtime de la aplicación en lugar de pasar por la indirección de WebDriver o CDP.
Sitios con DOM pesado (mundo real)
Se probaron 15 herramientas MCP contra sitios web de producción — 75/75 aprobadas, cero tiempos de espera:
| Sitio | Herramientas | Tiempo total | snapshot | screenshot | count_elements |
|---|---|---|---|---|---|
| YouTube | 15/15 ✅ | 6.9s | 43 ms | 30 ms | 4 ms |
| Amazon | 15/15 ✅ | 14.2s | 1 ms | 5 ms | 2 ms |
| 15/15 ✅ | 17.9s | 6 ms | 32 ms | 51 ms | |
| Hacker News | 15/15 ✅ | 4.8s | 53 ms | 188 ms | 1 ms |
| Wikipedia | 15/15 ✅ | 7.8s | 15 ms | 336 ms | 1 ms |
El tiempo total incluye la carga de la página. La ejecución de herramientas es consistentemente inferior a 100 ms incluso en sitios con DOM pesado.
¿Por qué no Playwright / Appium / Detox?
| flutter-skill | Playwright MCP | Appium | Detox | |
|---|---|---|---|---|
| Herramientas MCP | 253 | ~33 | ❌ | ❌ |
| Plataformas | 10 | 1 (web) | Móvil | React Native |
| Tiempo de configuración | 30 seg | Minutos | Horas | Horas |
| Código de prueba necesario | ❌ Ninguno | ✅ Sí | ✅ Sí | ✅ Sí |
| Nativo para IA (MCP) | ✅ | ✅ | ❌ | ❌ |
| Pruebas auto-reparables | ✅ | ❌ | ❌ | ❌ |
| Pruebas monkey/fuzz | ✅ | ❌ | ❌ | ❌ |
| Regresión visual | ✅ | ❌ | ❌ | ❌ |
| Simulación/reproducción de red | ✅ | ❌ | ❌ | ❌ |
| Pruebas de API + UI | ✅ | ❌ | ❌ | ❌ |
| Sincronización multi-dispositivo | ✅ | ❌ | Parcial | ❌ |
| Auditoría de accesibilidad | ✅ | ❌ | ❌ | ❌ |
| Pruebas de i18n | ✅ | ❌ | ❌ | ❌ |
| Monitoreo de rendimiento | ✅ | ❌ | ❌ | ❌ |
| Lenguaje natural | ✅ | ❌ | ❌ | ❌ |
| Soporte de Flutter | ✅ Nativo | Parcial | Parcial | ❌ |
| Aplicaciones de escritorio | ✅ | ✅ | ❌ | ❌ |
| Comprensión de página por IA | ✅ Árbol AX | ❌ Capturas de pantalla | ❌ | ❌ | | Pruebas de límites/seguridad | ✅ 13 payloads | ❌ | ❌ | ❌ | | Acciones por lotes | ✅ 5+/llamada | 1/llamada | 1/llamada | 1/llamada |
flutter-skill es la única herramienta de pruebas E2E nativa para IA que funciona en móvil, web y escritorio — con 7× más herramientas que el competidor más cercano.
Comandos CLI
# 🤖 AI autonomous exploration — finds bugs automatically
flutter-skill explore https://my-app.com --depth=3
# 🐒 Monkey/fuzz testing — random actions, crash detection
flutter-skill monkey https://my-app.com --actions=100 --seed=42
# 🚀 Parallel multi-platform testing
flutter-skill test --url https://my-app.com --platforms web,electron,android
# 🌐 Zero-config WebMCP server — any website becomes testable
flutter-skill serve https://my-app.com
🧠 Nativo para IA: 95% menos tokens
La mayoría de las herramientas de prueba con IA envían capturas de pantalla al LLM — cada una cuesta ~4,000 tokens.
flutter-skill usa el Árbol de Accesibilidad de Chrome para dar a tu IA un resumen semántico compacto de cualquier página:
// page_summary → ~200 tokens (vs ~4,000 for a screenshot)
{
"title": "Shopping Cart",
"nav": ["Home", "Products", "Cart", "Account"],
"forms": [{"input:Coupon Code": "text"}],
"buttons": ["Apply", "Checkout", "Continue Shopping"],
"features": {"search": true, "pagination": true},
"links": 47, "inputs": 3
}
Luego agrupa múltiples acciones en una sola llamada:
// explore_actions → 5 actions per call (vs 5 separate tool calls)
{"actions": [
{"type": "fill", "target": "input:Coupon Code", "value": "SAVE20"},
{"type": "tap", "target": "button:Apply"},
{"type": "tap", "target": "button:Checkout"},
{"type": "fill", "target": "input:Email", "value": "test@example.com"},
{"type": "tap", "target": "button:Continue"}
]}
Resultado: Tu agente de IA prueba más rápido, cuesta menos y comprende las páginas mejor que las herramientas basadas en capturas de pantalla.
| flutter-skill | Herramientas basadas en capturas | |
|---|---|---|
| Tokens por página | ~200 | ~4,000 |
| Acciones por llamada | 5+ | 1 |
| Comprende semántica | ✅ roles, nombres, estado | ❌ solo píxeles |
| Funciona con Shadow DOM | ✅ | ❌ |
Qué puede hacer
👀 Ver
|
👆 Interactuar
|
🔍 Inspeccionar (v0.8.0)
|
🚀 Controlar
|
253 herramientas — referencia completa
Exploración con IA: page_summary, explore_actions, boundary_test, explore_report
Lanzar y conectar: launch_app, scan_and_connect, connect_cdp, hot_reload, hot_restart, list_sessions, switch_session, close_session, disconnect, stop_app
Pantalla: screenshot, screenshot_region, screenshot_element, native_screenshot, inspect, inspect_interactive, snapshot, get_widget_tree, find_by_type, get_text_content, get_visible_text
Interacción: tap, double_tap, long_press, enter_text, set_text, clear_text, swipe, scroll_to, drag, go_back, press_key, type_text, hover, fill, select_option, set_checkbox, focus, blur, native_tap, native_input_text, native_swipe
Pruebas inteligentes: smart_tap, smart_enter_text, smart_assert (auto-reparables con coincidencia difusa)
Afirmaciones: assert_text, assert_visible, assert_not_visible, assert_element_count, assert_batch, wait_for_element, wait_for_gone, wait_for_idle, wait_for_stable, wait_for_url, wait_for_text, wait_for_element_count
Regresión Visual: visual_baseline_save, visual_baseline_compare, visual_baseline_update, visual_regression_report, visual_verify, visual_diff, compare_screenshot
Simulación de Red: mock_api, mock_clear, record_network, replay_network, intercept_requests, clear_interceptions, block_urls, http_request
Pruebas de API: api_request, api_assert
Cobertura y Fiabilidad: coverage_start, coverage_stop, coverage_report, coverage_gaps, retry_on_fail, stability_check
Basado en Datos: test_with_data, generate_test_data
Multi-Dispositivo: multi_connect, multi_action, multi_compare, multi_disconnect, parallel_snapshot, parallel_tap
Accesibilidad: accessibility_audit, a11y_full_audit, a11y_tab_order, a11y_color_contrast, a11y_screen_reader
i18n: set_locale, verify_translations, i18n_snapshot
Rendimiento: perf_start, perf_stop, perf_report, get_performance, get_frame_stats, get_memory_stats
Sesión: save_session, restore_session, session_diff
Grabación y Exportación: record_start, record_stop, record_export (Playwright, Cypress, XCUITest, Espresso, Detox, Maestro, +5 más), video_start, video_stop
Autenticación: auth_inject_session, auth_biometric, auth_otp, auth_deeplink
Navegador CDP: navigate, reload, go_forward, get_title, get_page_source, eval, get_tabs, new_tab, switch_tab, close_tab, get_cookies, set_cookie, clear_cookies, get_local_storage, set_local_storage, clear_local_storage, generate_pdf, set_viewport, emulate_device, throttle_network, go_offline, set_geolocation, set_timezone, set_color_scheme
Depuración: get_logs, get_errors, get_console_messages, get_network_requests, diagnose, diagnose_project, reset_app
Configuración de Plataforma
Flutter (iOS / Android / Web)
dependencies:
flutter_skill: ^0.9.37
import 'package:flutter_skill/flutter_skill.dart';
void main() {
if (kDebugMode) FlutterSkillBinding.ensureInitialized();
runApp(MyApp());
}
React Native
npm install flutter-skill-react-native
import FlutterSkill from 'flutter-skill-react-native';
FlutterSkill.start();
Electron
npm install flutter-skill-electron
const { FlutterSkillBridge } = require('flutter-skill-electron');
FlutterSkillBridge.start(mainWindow);
iOS (Swift)
// Swift Package Manager: FlutterSkillSDK
import FlutterSkill
FlutterSkillBridge.shared.start()
Text("Hello").flutterSkillId("greeting")
Android (Kotlin)
implementation("com.flutterskill:flutter-skill:0.8.0")
FlutterSkillBridge.start(this)
Tauri (Rust)
[dependencies]
flutter-skill-tauri = "0.8.0"
KMP Desktop
Añade la dependencia de Gradle — consulta sdks/kmp para más detalles.
.NET MAUI
Añade el paquete NuGet — consulta sdks/dotnet-maui para más detalles.
Ejemplos de Prompts
Solo dile a tu IA qué probar:
| Prompt | Qué sucede |
|---|---|
| "Probar inicio de sesión con contraseña incorrecta" | Capturas de pantalla → introduce credenciales → toca iniciar sesión → verifica el error |
| "Explorar cada pantalla y reportar errores" | Navega sistemáticamente por todas las pantallas, prueba todos los elementos |
| "Completar registro con casos límite" | Prueba emojis 🌍, cadenas largas, campos vacíos, caracteres especiales |
| "Comparar flujo de pago en iOS y Android" | Ejecuta la misma prueba en ambas plataformas, compara capturas de pantalla |
| "Tomar capturas de pantalla de las 5 pestañas" | Toca cada pestaña, captura el estado |
Contribuciones
Consulta CONTRIBUTING.md para las pautas.
git clone https://github.com/ai-dashboad/flutter-skill
cd flutter-skill
dart pub get
dart run bin/flutter_skill.dart server # Start MCP server
Enlaces
| 📦 pub.dev | 🧩 VSCode |
| 📦 npm | 🧩 JetBrains |
| 🍺 Homebrew | 📖 Docs |
| 🤖 Agent Skill | 📋 Changelog |
⭐ Si flutter-skill te ahorra tiempo, ¡dale una estrella para que otros también lo encuentren!
Licencia MIT © 2025