{"id":42960970,"url":"https://github.com/ai-dashboad/flutter-skill","last_synced_at":"2026-04-01T18:39:31.789Z","repository":{"id":335519868,"uuid":"1145473185","full_name":"ai-dashboad/flutter-skill","owner":"ai-dashboad","description":"AI-powered E2E testing for 10 platforms. 253 MCP tools. Zero config. Works with Claude, Cursor, Windsurf, Copilot. Test Flutter, React Native, iOS, Android, Web, Electron, Tauri, KMP, .NET MAUI — all from natural language.","archived":false,"fork":false,"pushed_at":"2026-03-23T14:55:31.000Z","size":69852,"stargazers_count":109,"open_issues_count":0,"forks_count":15,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-25T09:58:23.233Z","etag":null,"topics":["ai","ai-testing","android","automation","claude","cross-platform","cursor","e2e-testing","electron","flutter","ios","mcp","mcp-server","model-context-protocol","playwright-alternative","react-native","tauri","test-automation","testing-tools","web-testing"],"latest_commit_sha":null,"homepage":"https://ai-dashboad.github.io/flutter-skill/","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ai-dashboad.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"ai-dashboad","buy_me_a_coffee":"ai-dashboad","ko_fi":"flutter-skill"}},"created_at":"2026-01-29T20:55:29.000Z","updated_at":"2026-03-25T09:28:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ai-dashboad/flutter-skill","commit_stats":null,"previous_names":["ai-dashboad/flutter-skill"],"tags_count":96,"template":false,"template_full_name":null,"purl":"pkg:github/ai-dashboad/flutter-skill","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-dashboad%2Fflutter-skill","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-dashboad%2Fflutter-skill/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-dashboad%2Fflutter-skill/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-dashboad%2Fflutter-skill/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ai-dashboad","download_url":"https://codeload.github.com/ai-dashboad/flutter-skill/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-dashboad%2Fflutter-skill/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290937,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-testing","android","automation","claude","cross-platform","cursor","e2e-testing","electron","flutter","ios","mcp","mcp-server","model-context-protocol","playwright-alternative","react-native","tauri","test-automation","testing-tools","web-testing"],"created_at":"2026-01-30T23:07:13.668Z","updated_at":"2026-04-01T18:39:31.764Z","avatar_url":"https://github.com/ai-dashboad.png","language":"Dart","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/social-preview.jpg\" alt=\"flutter-skill\" width=\"640\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eflutter-skill\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eGive your AI eyes and hands inside any app.\u003c/strong\u003e\u003cbr\u003e\n  E2E testing bridge for Claude, Cursor, Windsurf — across 8 platforms.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pub.dev/packages/flutter_skill\"\u003e\u003cimg src=\"https://img.shields.io/pub/v/flutter_skill.svg\" alt=\"pub.dev\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/flutter-skill\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/flutter-skill.svg\" alt=\"npm\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ai-dashboad/flutter-skill/actions\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/ai-dashboad/flutter-skill/ci.yml?label=tests\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/ai-dashboad/flutter-skill/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/ai-dashboad/flutter-skill?style=social\" alt=\"Stars\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://skills.sh/ai-dashboad/flutter-skill/flutter-skill-testing\"\u003e\u003cimg src=\"https://img.shields.io/badge/skills.sh-agent%20skill-black\" alt=\"Agent Skill\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e •\n  \u003ca href=\"#platforms\"\u003ePlatforms\u003c/a\u003e •\n  \u003ca href=\"#what-can-it-do\"\u003eFeatures\u003c/a\u003e •\n  \u003ca href=\"#install\"\u003eInstall\u003c/a\u003e •\n  \u003ca href=\"docs/USAGE_GUIDE.md\"\u003eDocs\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003e🎬 AI tests a full TikTok clone — 28 actions, zero test code\u003c/strong\u003e\n\u003c/p\u003e\n\nhttps://github.com/user-attachments/assets/d4617c73-043f-424c-9a9a-1a61d4c2d3c6\n\n```\nYou: \"Test the login flow — enter test@example.com and password123, tap Login, verify Dashboard\"\n\nAI Agent:\n  1. screenshot()        → sees the login screen\n  2. enter_text(\"email\") → types the email  \n  3. enter_text(\"pass\")  → types the password\n  4. tap(\"Login\")         → taps the button\n  5. wait_for_element(\"Dashboard\") → confirms navigation\n  ✅ Login flow verified!\n```\n\n**No test code. No selectors. Just tell the AI what to test.**\n\n---\n\n## Quick Start\n\n**1. Install**\n\n```bash\nnpm install -g flutter-skill        # npm (recommended)\n# or: brew install ai-dashboad/flutter-skill/flutter-skill\n# or: dart pub global activate flutter_skill\n# or: npx skills add ai-dashboad/flutter-skill  # Agent Skill (Claude Code, Cursor, Copilot, Cline, etc.)\n```\n\n**2. Add to your MCP config** (Claude Code / Cursor / Windsurf)\n\n```json\n{\n  \"mcpServers\": {\n    \"flutter-skill\": {\n      \"command\": \"flutter-skill\",\n      \"args\": [\"server\"]\n    }\n  }\n}\n```\n\n**3. Add to your app** (2 lines)\n\n```dart\nimport 'package:flutter_skill/flutter_skill.dart';\n\nvoid main() {\n  if (kDebugMode) FlutterSkillBinding.ensureInitialized();\n  runApp(MyApp());\n}\n```\n\n**4. Test** — just talk to your AI:\n\n\u003e *\"Launch my app, tap Sign Up, fill the form, and verify the success screen\"*\n\nThat's it. Zero configuration.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e📦 More install methods\u003c/strong\u003e (Windows, Docker, IDE extensions)\u003c/summary\u003e\n\n| Method | Command | Platform |\n|--------|---------|----------|\n| npm | `npm install -g flutter-skill` | All |\n| Homebrew | `brew install ai-dashboad/flutter-skill/flutter-skill` | macOS/Linux |\n| Scoop | `scoop install flutter-skill` | Windows |\n| One-click | `curl -fsSL .../install.sh \\| bash` | macOS/Linux |\n| Windows | `iwr .../install.ps1 -useb \\| iex` | Windows |\n| Docker | `docker pull ghcr.io/ai-dashboad/flutter-skill` | All |\n| pub.dev | `dart pub global activate flutter_skill` | All |\n| VSCode | Extensions → \"Flutter Skill\" | All |\n| IntelliJ | Plugins → \"Flutter Skill\" | All |\n| Agent Skill | `npx skills add ai-dashboad/flutter-skill` | All (28+ agents) |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e🔧 Zero-config onboarding\u003c/strong\u003e (auto-detect \u0026 patch your app)\u003c/summary\u003e\n\n```bash\ncd your-app/\nflutter-skill init    # Detects platform, patches entry point, configures MCP\nflutter-skill demo    # Launches built-in demo app to try it out\n```\n\n`init` auto-detects Flutter, iOS, Android, React Native, or Web projects and patches them automatically.\n\n\u003c/details\u003e\n\n---\n\n## Platforms\n\nflutter-skill works across **8 platforms** with a unified bridge protocol:\n\n| Platform | SDK | Tests | Status |\n|----------|-----|-------|--------|\n| **Flutter iOS** | `flutter_skill` (pub.dev) | 21/21 ✅ | Stable |\n| **Flutter Web** | `flutter_skill` (pub.dev) | 20/20 ✅ | Stable |\n| **Electron** | [`sdks/electron`](sdks/electron/) | 24/24 ✅ | Stable |\n| **Android** (Kotlin) | [`sdks/android`](sdks/android/) | 24/24 ✅ | Stable |\n| **KMP Desktop** | [`sdks/kmp`](sdks/kmp/) | 22/22 ✅ | Stable |\n| **Tauri** (Rust) | [`sdks/tauri`](sdks/tauri/) | 23/24 ✅ | Stable |\n| **.NET MAUI** | [`sdks/dotnet-maui`](sdks/dotnet-maui/) | 23/24 ✅ | Stable |\n| **React Native** | [`sdks/react-native`](sdks/react-native/) | 24/24 ✅ | Stable |\n\n\u003e **181/183 tests passing** across all platforms (99% pass rate)\n\nEach SDK README has platform-specific setup instructions. The same CLI and MCP tools work for all platforms.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ePlatform setup examples\u003c/strong\u003e\u003c/summary\u003e\n\n**Web** — add one script tag:\n```html\n\u003cscript src=\"flutter-skill.js\"\u003e\u003c/script\u003e\n\u003cscript\u003eFlutterSkill.start({ port: 50000 });\u003c/script\u003e\n```\n\n**React Native** — npm install:\n```bash\nnpm install flutter-skill\n```\n```js\nimport FlutterSkill from 'flutter-skill';\nFlutterSkill.start();\n```\n\n**iOS (Swift/SwiftUI)** — Swift Package Manager:\n```swift\nimport FlutterSkill\nFlutterSkillBridge.shared.start()\n\nText(\"Hello\").flutterSkillId(\"greeting\")\nButton(\"Submit\") { submit() }.flutterSkillButton(\"submitBtn\")\n```\n\n**Android (Kotlin)** — Gradle:\n```kotlin\nimplementation(\"com.flutterskill:flutter-skill:0.7.5\")\nFlutterSkillBridge.start(this)\n```\n\n**Electron / Tauri / KMP / .NET** — see each SDK's README for details.\n\n\u003c/details\u003e\n\n---\n\n## What Can It Do?\n\n**40+ MCP tools** organized in 4 categories:\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n### 👀 See the Screen\n- `screenshot` — full app screenshot\n- `inspect` — list all interactive elements\n- `get_widget_tree` — full widget hierarchy\n- `find_by_type` — find by widget type\n- `get_text_content` — extract all text\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n### 👆 Interact Like a User\n- `tap` / `double_tap` / `long_press`\n- `enter_text` — type into fields\n- `swipe` / `scroll_to` / `drag`\n- `go_back` — navigate back\n- Native: `native_tap`, `native_swipe`\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e\n\n### ✅ Verify \u0026 Assert\n- `assert_text` / `assert_visible`\n- `wait_for_element` / `wait_for_gone`\n- `get_checkbox_state` / `get_slider_value`\n- `assert_element_count`\n\n\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e\n\n### 🚀 Launch \u0026 Control\n- `launch_app` — launch with flavors/defines\n- `scan_and_connect` — find running apps\n- `hot_reload` / `hot_restart`\n- `list_sessions` / `switch_session`\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eFull tool reference (40+ tools)\u003c/strong\u003e\u003c/summary\u003e\n\n**Launch \u0026 Connect:** `launch_app`, `scan_and_connect`, `hot_reload`, `hot_restart`, `list_sessions`, `switch_session`, `close_session`\n\n**Screen:** `screenshot`, `screenshot_region`, `screenshot_element`, `native_screenshot`, `inspect`, `get_widget_tree`, `find_by_type`, `get_text_content`\n\n**Interaction:** `tap`, `double_tap`, `long_press`, `enter_text`, `swipe`, `scroll_to`, `drag`, `go_back`, `native_tap`, `native_input_text`, `native_swipe`\n\n**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`\n\n**Debug:** `get_logs`, `get_errors`, `get_performance`, `get_memory_stats`\n\n\u003c/details\u003e\n\n---\n\n## Example Workflows\n\n```\n\"Test login with test@example.com / password123, verify it reaches the dashboard\"\n\n\"Submit the registration form empty and check that all validation errors appear\"\n\n\"Navigate through all tabs, screenshot each one, verify back button works\"\n\n\"Take screenshots of home, profile, and settings — compare with last time\"\n```\n\nThe AI agent figures out the steps. No test code needed.\n\n---\n\n## Native Platform Support\n\nFlutter Skill sees through native dialogs that Flutter can't — permission popups, photo pickers, share sheets:\n\n| Capability | iOS Simulator | Android Emulator |\n|-----------|--------------|-----------------|\n| Screenshot | `xcrun simctl` | `adb screencap` |\n| Tap | macOS Accessibility | `adb input tap` |\n| Text input | Pasteboard + Cmd+V | `adb input text` |\n| Swipe | Accessibility scroll | `adb input swipe` |\n\nNo external tools needed — uses built-in OS capabilities.\n\n---\n\n## Troubleshooting\n\n| Problem | Fix |\n|---------|-----|\n| \"Not connected\" | `flutter-skill scan_and_connect` to auto-find apps |\n| \"Unknown method\" | `flutter pub add flutter_skill` then restart (not hot reload) |\n| No VM Service URI | Add `--vm-service-port=50000` to launch args |\n| Claude Code priority | Run `flutter_skill setup` for priority rules |\n\n📖 **Full docs:** [Usage Guide](docs/USAGE_GUIDE.md) · [Architecture](docs/ARCHITECTURE.md) · [Troubleshooting](docs/TROUBLESHOOTING.md) · [Flutter 3.x Fix](docs/FLUTTER_3X_FIX.md)\n\n---\n\n## Links\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n📦 **Install**\n- [pub.dev](https://pub.dev/packages/flutter_skill)\n- [npm](https://www.npmjs.com/package/flutter-skill)\n- [Homebrew](https://github.com/ai-dashboad/homebrew-flutter-skill)\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n🔌 **IDE Extensions**\n- [VSCode Marketplace](https://marketplace.visualstudio.com/items?itemName=ai-dashboad.flutter-skill)\n- [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/29991-flutter-skill)\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n📖 **Docs**\n- [Roadmap](docs/ROADMAP.md)\n- [Changelog](CHANGELOG.md)\n- [Architecture](docs/ARCHITECTURE.md)\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eIf flutter-skill saves you time, \u003ca href=\"https://github.com/ai-dashboad/flutter-skill\"\u003e⭐ star it on GitHub\u003c/a\u003e!\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/sponsors/ai-dashboad\"\u003eGitHub Sponsors\u003c/a\u003e · \u003ca href=\"https://buymeacoffee.com/ai-dashboad\"\u003eBuy Me a Coffee\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eMIT License\u003c/p\u003e\n","funding_links":["https://github.com/sponsors/ai-dashboad","https://buymeacoffee.com/ai-dashboad","https://ko-fi.com/flutter-skill"],"categories":["Software","MCP 服务器精选列表","🌐 Browser Automation \u0026 Web Scraping","CI/CD \u0026 DevOps Pipelines"],"sub_categories":["UI \u0026 End-to-End Testing","🌐 浏览器自动化与网页交互","🧪 Testing \u0026 Chaos Engineering"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fai-dashboad%2Fflutter-skill","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fai-dashboad%2Fflutter-skill","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fai-dashboad%2Fflutter-skill/lists"}