flutter-skill
Testes E2E com IA para 10 plataformas. 253 ferramentas MCP. Zero configuração. Teste Flutter, React Native, iOS, Android, Web, Electron, Tauri, KMP, .NET MAUI a partir de linguagem natural.
Documentação
flutter-skill
Dê olhos e mãos a qualquer agente de IA dentro de qualquer aplicativo em execução.
10 plataformas. Zero código de teste. Um servidor MCP.
Demonstração • Início Rápido • Plataformas de IA • Plataformas • vs Outros • Documentação
🚀 Zero configuração. Zero código de teste. Apenas converse com sua IA.
Se isso economizar seu tempo, considere dar uma estrela no repositório ⭐ — isso ajuda outras pessoas a encontrá-lo!
Demonstração em 30 Segundos
https://github.com/user-attachments/assets/d4617c73-043f-424c-9a9a-1a61d4c2d3c6
Um único comando. 28 ações orientadas por IA. Zero código de teste. A IA explora um clone do TikTok, navega pelas abas, rola feeds, testa a busca, preenche formulários — tudo de forma autônoma.
Por Que Isso Existe
Escrever testes E2E é doloroso. Mantê-los é pior. flutter-skill adota uma abordagem diferente:
- 🔌 Conecta qualquer agente de IA (Claude, Cursor, Windsurf, Copilot, OpenClaw) diretamente ao seu aplicativo em execução via MCP
- 👀 O agente vê sua tela — toca em botões, digita texto, rola, navega — como um testador humano que nunca dorme
- ✅ Zero código de teste — sem Page Objects, sem XPath, sem seletores frágeis. Apenas inglês simples
- ⚡ Zero configuração — 2 linhas de código, funciona em todas as 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.
Início Rápido
1. Instale (30 segundos)
npm install -g flutter-skill
2. Adicione à sua IA (copie e cole na configuração do MCP)
{
"mcpServers": {
"flutter-skill": {
"command": "flutter-skill",
"args": ["server"]
}
}
}
Funciona com Claude Desktop, Cursor, Windsurf, Copilot, Cline, OpenClaw — qualquer agente compatível com MCP.
3. Adicione ao seu aplicativo (2 linhas para Flutter)
import 'package:flutter_skill/flutter_skill.dart';
void main() {
if (kDebugMode) FlutterSkillBinding.ensureInitialized();
runApp(MyApp());
}
4. Teste — basta conversar com sua IA:
"Inicie meu aplicativo, explore cada tela e relate quaisquer bugs"
É isso. Zero configuração. Zero código de teste. Funciona em menos de 60 segundos.
📦 Mais métodos de instalação (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 | Extensões → "Flutter Skill" |
| JetBrains | Plugins → "Flutter Skill" |
| Agent Skill | npx skills add ai-dashboad/flutter-skill |
| Zero-config | flutter-skill init (detecta e corrige seu aplicativo automaticamente) |
Uso com Plataformas de IA
Modo Servidor MCP (Integração com IDE)
Funciona com qualquer ferramenta de IA compatível com MCP. Uma linha de configuração:
{
"mcpServers": {
"flutter-skill": {
"command": "flutter-skill",
"args": ["server"]
}
}
}
| Plataforma | Arquivo de Configuração | Status |
|---|---|---|
| Cursor | .cursor/mcp.json | ✅ |
| Claude Desktop | claude_desktop_config.json | ✅ |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | ✅ |
| VSCode Copilot | .vscode/mcp.json | ✅ |
| Cline | Configurações do VSCode → Cline → MCP | ✅ |
| OpenClaw | Skill ou configuração MCP | ✅ |
| Continue.dev | .continue/config.json | ✅ |
Modo Servidor HTTP (CLI e Automação)
Para automação de navegador independente, pipelines de CI/CD ou acesso 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 | Descrição |
|---|---|
nav <url> | Navegar para URL |
snap | Snapshot da árvore de acessibilidade |
screenshot [path] | Tirar screenshot |
tap <text|ref|x y> | Tocar em elemento |
type <text> | Digitar via teclado |
key <key> [mod] | Pressionar tecla |
eval <js> | Executar JavaScript |
title | Obter título da página |
text | Obter texto visível |
hover <text> | Passar o mouse sobre elemento |
upload <sel> <file> | Enviar arquivo |
tools | Listar ferramentas |
call <tool> [json] | Chamar qualquer ferramenta |
Suporta flags --port=N, --host=H e variáveis de ambiente FS_PORT/FS_HOST.
Comparação dos Dois Modos
server (MCP stdio) | serve (HTTP) | |
|---|---|---|
| Caso de uso | Integração com IDE / agente de IA | CLI / automação / CI/CD |
| Protocolo | MCP (JSON-RPC sobre stdio) | HTTP REST |
| Ferramentas | 253 (dinâmicas por página) | 246 (genéricas) |
| Navegador | Inicia o Chrome automaticamente | Conecta-se ao Chrome existente |
| Melhor para | Cursor, Claude, VSCode | OpenClaw, scripts, pipelines |
Referência completa do cliente CLI: docs/CLI_CLIENT.md
10 Plataformas, Uma Ferramenta
A maioria das ferramentas de teste funciona em 1-2 plataformas. O flutter-skill funciona em 10.
| Plataforma | SDK | Pontuação de Teste |
|---|---|---|
| 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 (qualquer site) | sdks/web | ✅ |
| Web CDP (zero-config) | Nenhum SDK necessário | ✅ 141/156 |
Total: 656/664 testes passando (98,8%) — cada plataforma testada com um aplicativo complexo de mídia social com mais de 50 elementos.
⚡ Desempenho
Benchmarks reais de execuções de testes automatizados contra um aplicativo complexo de mídia social:
| Operação | 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 | — | — |
Eficiência de tokens: snapshot() retorna uma árvore de elementos estruturada em vez de uma imagem — 87–99% menos tokens do que enviar screenshots para seu agente de IA.
Quão rápido é isso? Um tap leva 1–2 ms de ponta a ponta. Ferramentas de automação de navegador como Playwright e Selenium normalmente levam 50–100 ms para a mesma operação. Isso é 50–100× mais rápido, porque o flutter-skill fala diretamente com o runtime do aplicativo em vez de passar pela indireção do WebDriver ou CDP.
Sites com DOM Pesado (Mundo Real)
Testamos 15 ferramentas MCP em sites de produção — 75/75 passaram, zero timeouts:
| Site | Ferramentas | Tempo 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 |
O tempo total inclui o carregamento da página. A execução das ferramentas é consistentemente abaixo de 100ms mesmo em sites com DOM pesado.
Por Que Não Playwright / Appium / Detox?
| flutter-skill | Playwright MCP | Appium | Detox | |
|---|---|---|---|---|
| Ferramentas MCP | 253 | ~33 | ❌ | ❌ |
| Plataformas | 10 | 1 (web) | Mobile | React Native |
| Tempo de configuração | 30 seg | Minutos | Horas | Horas |
| Código de teste necessário | ❌ Nenhum | ✅ Sim | ✅ Sim | ✅ Sim |
| Nativo para IA (MCP) | ✅ | ✅ | ❌ | ❌ |
| Testes auto-reparáveis | ✅ | ❌ | ❌ | ❌ |
| Testes monkey/fuzz | ✅ | ❌ | ❌ | ❌ |
| Regressão visual | ✅ | ❌ | ❌ | ❌ |
| Mock/replay de rede | ✅ | ❌ | ❌ | ❌ |
| Testes de API + UI | ✅ | ❌ | ❌ | ❌ |
| Sincronização multi-dispositivo | ✅ | ❌ | Parcial | ❌ |
| Auditoria de acessibilidade | ✅ | ❌ | ❌ | ❌ |
| Testes de i18n | ✅ | ❌ | ❌ | ❌ |
| Monitoramento de desempenho | ✅ | ❌ | ❌ | ❌ |
| Linguagem natural | ✅ | ❌ | ❌ | ❌ |
| Suporte a Flutter | ✅ Nativo | Parcial | Parcial | ❌ |
| Aplicativos desktop | ✅ | ✅ | ❌ | ❌ |
| Compreensão de página por IA | ✅ Árvore AX | ❌ Screenshots | ❌ | ❌ | | Teste de limite/segurança | ✅ 13 payloads | ❌ | ❌ | ❌ | | Ações em lote | ✅ 5+/chamada | 1/chamada | 1/chamada | 1/chamada |
O flutter-skill é a única ferramenta de teste E2E nativa para IA que funciona em mobile, web e desktop — com 7× mais ferramentas que o concorrente mais próximo.
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
A maioria das ferramentas de teste com IA envia screenshots para o LLM — cada uma custa ~4.000 tokens.
O flutter-skill usa a Árvore de Acessibilidade do Chrome para dar à sua IA um resumo semântico compacto de qualquer 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
}
Depois, execute várias ações em lote em uma única chamada:
// 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: Seu agente de IA testa mais rápido, custa menos e entende as páginas melhor do que ferramentas baseadas em screenshots.
| flutter-skill | Ferramentas baseadas em screenshots | |
|---|---|---|
| Tokens por página | ~200 | ~4.000 |
| Ações por chamada | 5+ | 1 |
| Entende semântica | ✅ papéis, nomes, estado | ❌ apenas pixels |
| Funciona com Shadow DOM | ✅ | ❌ |
O Que Ele Pode Fazer
👀 Ver
|
👆 Interagir
|
🔍 Inspecionar (v0.8.0)
|
🚀 Controlar
|
253 ferramentas — referência completa
Exploração por IA: page_summary, explore_actions, boundary_test, explore_report
Iniciar e Conectar: launch_app, scan_and_connect, connect_cdp, hot_reload, hot_restart, list_sessions, switch_session, close_session, disconnect, stop_app
Tela: screenshot, screenshot_region, screenshot_element, native_screenshot, inspect, inspect_interactive, snapshot, get_widget_tree, find_by_type, get_text_content, get_visible_text
Interação: 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
Testes Inteligentes: smart_tap, smart_enter_text, smart_assert (auto-reparáveis com correspondência difusa)
Asserções: 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
Regressão Visual: visual_baseline_save, visual_baseline_compare, visual_baseline_update, visual_regression_report, visual_verify, visual_diff, compare_screenshot
Mock de Rede: mock_api, mock_clear, record_network, replay_network, intercept_requests, clear_interceptions, block_urls, http_request
Testes de API: api_request, api_assert
Cobertura e Confiabilidade: coverage_start, coverage_stop, coverage_report, coverage_gaps, retry_on_fail, stability_check
Orientado a Dados: test_with_data, generate_test_data
Multi-Dispositivo: multi_connect, multi_action, multi_compare, multi_disconnect, parallel_snapshot, parallel_tap
Acessibilidade: accessibility_audit, a11y_full_audit, a11y_tab_order, a11y_color_contrast, a11y_screen_reader
i18n: set_locale, verify_translations, i18n_snapshot
Desempenho: perf_start, perf_stop, perf_report, get_performance, get_frame_stats, get_memory_stats
Sessão: save_session, restore_session, session_diff
Gravação e Exportação: record_start, record_stop, record_export (Playwright, Cypress, XCUITest, Espresso, Detox, Maestro, +5 mais), video_start, video_stop
Autenticação: 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
Depuração: get_logs, get_errors, get_console_messages, get_network_requests, diagnose, diagnose_project, reset_app
Configuração da 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
Adicione a dependência Gradle — veja sdks/kmp para detalhes.
.NET MAUI
Adicione o pacote NuGet — veja sdks/dotnet-maui para detalhes.
Exemplos de Prompts
Basta dizer à sua IA o que testar:
| Prompt | O que acontece |
|---|---|
| "Testar login com senha errada" | Capturas de tela → insere credenciais → toca em login → verifica erro |
| "Explorar todas as telas e relatar bugs" | Navega sistematicamente por todas as telas, testa todos os elementos |
| "Preencher cadastro com casos extremos" | Testa emojis 🌍, strings longas, campos vazios, caracteres especiais |
| "Comparar fluxo de checkout no iOS e Android" | Executa o mesmo teste em ambas as plataformas, compara capturas de tela |
| "Tirar capturas de tela das 5 abas" | Toca em cada aba, captura o estado |
Contribuindo
Veja CONTRIBUTING.md para diretrizes.
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
Links
| 📦 pub.dev | 🧩 VSCode |
| 📦 npm | 🧩 JetBrains |
| 🍺 Homebrew | 📖 Docs |
| 🤖 Agent Skill | 📋 Changelog |
⭐ Se o flutter-skill economizar seu tempo, dê uma estrela para que outros também possam encontrá-lo!
Licença MIT © 2025