flutter_skill 0.8.0
flutter_skill: ^0.8.0 copied to clipboard
Give your AI Agent eyes and hands inside your Flutter app.
flutter-skill
Give your AI eyes and hands inside any app.
E2E testing bridge for Claude, Cursor, Windsurf — across 8 platforms.
Quick Start • Platforms • Features • Install • Docs
🎬 AI tests a full TikTok clone — 28 actions, zero test code
https://github.com/user-attachments/assets/d4617c73-043f-424c-9a9a-1a61d4c2d3c6
You: "Test the login flow — enter test@example.com and password123, tap Login, verify Dashboard"
AI Agent:
1. screenshot() → sees the login screen
2. enter_text("email") → types the email
3. enter_text("pass") → types the password
4. tap("Login") → taps the button
5. wait_for_element("Dashboard") → confirms navigation
✅ Login flow verified!
No test code. No selectors. Just tell the AI what to test.
Quick Start #
1. Install
npm install -g flutter-skill # npm (recommended)
# or: brew install ai-dashboad/flutter-skill/flutter-skill
# or: dart pub global activate flutter_skill
# or: npx skills add ai-dashboad/flutter-skill # Agent Skill (Claude Code, Cursor, Copilot, Cline, etc.)
2. Add to your MCP config (Claude Code / Cursor / Windsurf)
{
"mcpServers": {
"flutter-skill": {
"command": "flutter-skill",
"args": ["server"]
}
}
}
3. Add to your app (2 lines)
import 'package:flutter_skill/flutter_skill.dart';
void main() {
if (kDebugMode) FlutterSkillBinding.ensureInitialized();
runApp(MyApp());
}
4. Test — just talk to your AI:
"Launch my app, tap Sign Up, fill the form, and verify the success screen"
That's it. Zero configuration.
📦 More install methods (Windows, Docker, IDE extensions)
| Method | Command | Platform |
|---|---|---|
| npm | npm install -g flutter-skill |
All |
| Homebrew | brew install ai-dashboad/flutter-skill/flutter-skill |
macOS/Linux |
| Scoop | scoop install flutter-skill |
Windows |
| One-click | curl -fsSL .../install.sh | bash |
macOS/Linux |
| Windows | iwr .../install.ps1 -useb | iex |
Windows |
| Docker | docker pull ghcr.io/ai-dashboad/flutter-skill |
All |
| pub.dev | dart pub global activate flutter_skill |
All |
| VSCode | Extensions → "Flutter Skill" | All |
| IntelliJ | Plugins → "Flutter Skill" | All |
| Agent Skill | npx skills add ai-dashboad/flutter-skill |
All (28+ agents) |
🔧 Zero-config onboarding (auto-detect & patch your app)
cd your-app/
flutter-skill init # Detects platform, patches entry point, configures MCP
flutter-skill demo # Launches built-in demo app to try it out
init auto-detects Flutter, iOS, Android, React Native, or Web projects and patches them automatically.
Platforms #
flutter-skill works across 8 platforms with a unified bridge protocol:
| Platform | SDK | Tests | Status |
|---|---|---|---|
| Electron | sdks/electron |
75/75 ✅ | Stable |
| KMP Desktop | sdks/kmp |
75/75 ✅ | Stable |
| Tauri (Rust) | sdks/tauri |
75/75 ✅ | Stable |
| .NET MAUI | sdks/dotnet-maui |
75/75 ✅ | Stable |
| React Native | sdks/react-native |
75/75 ✅ | Stable |
| Android (Kotlin) | sdks/android | 74/75 ✅ | Stable |
| Flutter iOS | flutter_skill (pub.dev) | 60/65 ✅ | Stable |
| Flutter Web | flutter_skill (pub.dev) | 63/65 ✅ | Stable |
582/590 tests passing across all platforms (98.6% pass rate)
Each platform is tested against a complex social media app (tabs, feeds, forms, modals, 50+ elements) with 75 E2E tests covering: inspect, tap, enter_text, get_text, find_element, wait_for_element, scroll, swipe, screenshot, go_back, press_key, inspect_interactive, eval, and error handling.
Each SDK README has platform-specific setup instructions. The same CLI and MCP tools work for all platforms.
Platform setup examples
Web — add one script tag:
<script src="flutter-skill.js"></script>
<script>FlutterSkill.start({ port: 50000 });</script>
React Native — npm install:
npm install flutter-skill
import FlutterSkill from 'flutter-skill';
FlutterSkill.start();
iOS (Swift/SwiftUI) — Swift Package Manager:
import FlutterSkill
FlutterSkillBridge.shared.start()
Text("Hello").flutterSkillId("greeting")
Button("Submit") { submit() }.flutterSkillButton("submitBtn")
Android (Kotlin) — Gradle:
implementation("com.flutterskill:flutter-skill:0.7.5")
FlutterSkillBridge.start(this)
Electron / Tauri / KMP / .NET — see each SDK's README for details.
What Can It Do? #
40+ MCP tools organized in 4 categories:
👀 See the Screen #
|
👆 Interact Like a User #
|
✅ Verify & Assert #
|
🚀 Launch & Control #
|
Full tool reference (40+ tools)
Launch & Connect: launch_app, scan_and_connect, hot_reload, hot_restart, list_sessions, switch_session, close_session
Screen: screenshot, screenshot_region, screenshot_element, native_screenshot, inspect, get_widget_tree, find_by_type, get_text_content
Interaction: tap, double_tap, long_press, enter_text, swipe, scroll_to, drag, go_back, native_tap, native_input_text, native_swipe
Assertions: assert_text, assert_visible, assert_not_visible, assert_element_count, wait_for_element, wait_for_gone, get_checkbox_state, get_slider_value, get_text_value
Debug: get_logs, get_errors, get_performance, get_memory_stats
Example Workflows #
"Test login with test@example.com / password123, verify it reaches the dashboard"
"Submit the registration form empty and check that all validation errors appear"
"Navigate through all tabs, screenshot each one, verify back button works"
"Take screenshots of home, profile, and settings — compare with last time"
The AI agent figures out the steps. No test code needed.
Native Platform Support #
Flutter Skill sees through native dialogs that Flutter can't — permission popups, photo pickers, share sheets:
| Capability | iOS Simulator | Android Emulator |
|---|---|---|
| Screenshot | xcrun simctl |
adb screencap |
| Tap | macOS Accessibility | adb input tap |
| Text input | Pasteboard + Cmd+V | adb input text |
| Swipe | Accessibility scroll | adb input swipe |
No external tools needed — uses built-in OS capabilities.
Test Results #
Every platform is tested against a complex social media app (4-tab navigation, 50+ scrollable items, forms, modals, search) with a comprehensive 75-test E2E suite.
75 tests per platform — full breakdown
| Category | Tests | What's tested |
|---|---|---|
| Initialize | 1 | Protocol handshake |
| Inspect | 5 | Element tree, bounds, types, state changes |
| Inspect Interactive | 5 | Semantic refs, actions, bounds, cross-page |
| Tap | 6 | By key, text, coordinates, ref, invalid key/ref |
| Enter Text | 6 | Basic, empty, emoji/unicode 🌍世界, overwrite, long (500+ chars), error handling |
| Get Text | 4 | Counter, input readback, missing key, button label |
| Find Element | 5 | By key, missing, by text, partial text, bounds |
| Wait For Element | 4 | By key, by text, timeout, fast resolution |
| Press Key | 10 | Enter, Tab, Escape, Backspace, arrows, Ctrl+A, Delete, Home/End, invalid key |
| Scroll | 6 | Up, down, left, right, large distance, zero |
| Swipe | 4 | Up, down, left, right |
| Screenshot | 2 | Base64 encoding, image format (PNG/JPEG) |
| Navigation | 8 | Detail page, inspect after nav, interactive elements, go_back, round-trip |
| Logs | 3 | Get, clear, verify empty |
| Eval | 2 | Expression evaluation, return values |
| Error Handling | 3 | Unknown method, missing params, malformed request |
| Total | 75 |
Test apps per platform:
| Platform | Test App | Elements |
|---|---|---|
| Electron | Social media app (HTML/JS) | 60+ items, dark theme |
| Android | Native Kotlin app with Fragments | 50+ items, Material Design |
| KMP | Compose Desktop app | 50+ items, tab navigation |
| Tauri | Web frontend (Rust backend) | 55+ feed cards |
| .NET MAUI | Simulated bridge with 6 screens | 114 elements |
| React Native | Real RN app on iOS simulator | Self-registering components |
| Flutter iOS | TikTok clone (10 feature modules) | Full social media app |
| Flutter Web | TikTok clone via bridge proxy | Full social media app |
Troubleshooting #
| Problem | Fix |
|---|---|
| "Not connected" | flutter-skill scan_and_connect to auto-find apps |
| "Unknown method" | flutter pub add flutter_skill then restart (not hot reload) |
| No VM Service URI | Add --vm-service-port=50000 to launch args |
| Claude Code priority | Run flutter_skill setup for priority rules |
📖 Full docs: Usage Guide · Architecture · Troubleshooting · Flutter 3.x Fix
Links #
|
📦 Install |
🔌 IDE Extensions |
📖 Docs |
If flutter-skill saves you time, ⭐ star it on GitHub!
GitHub Sponsors · Buy Me a Coffee
MIT License