flutter_skill
Give your AI Agent eyes and hands inside your Flutter app.
0.9.36
9.7K downloads/mo
#2989 most downloaded on pub.dev
ai-dashboad/flutter-skill
What this package is like to depend on
Last release 4 months ago
15 Apr 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 75 of 83 stable releases
Nothing withdrawn
no release was ever pulled
6 months old
83 releases · first in 2026
83 releases in the last 12 months
see the full history below
Release timeline
83 releases · Jan 2026 to Apr 2026Releases
latest 60 of 83-
0.9.3615 Apr 2026Release notes
Open source →Fix EACCES: ensure native binary has execute permission before spawn
Changes
- TODO: Add your changes here
-
0.9.3514 Apr 2026Release notes
Open source →Fix inspect empty text, Flutter 3.38+ URI detection, MCP stdout pollution, Homebrew arm64 on Intel, Windows flutter command
Release notes
Open source →Fix inspect empty text, Flutter 3.38+ URI detection, MCP stdout pollution, Homebrew arm64 on Intel, Windows flutter command
Changes
- TODO: Add your changes here
-
0.9.3423 Mar 2026Release notes
Open source →notifications/tools/list_changed support + idb integration for native iOS automation
Changes
- TODO: Add your changes here
-
0.9.3323 Mar 2026Release notes
Open source →fix dart format CI check across all files
Changes
- TODO: Add your changes here
-
0.9.3223 Mar 2026 -
0.9.3123 Mar 2026Release notes
Open source →fix scroll_to crash on unmounted context (#28), improve setup error messages (#15)
Changes
- TODO: Add your changes here
-
0.9.3022 Mar 2026Release notes
Open source →Fix Gemini/Vertex AI "Duplicate function declaration" error (issue #32)
Changes
- Fix: remove duplicate
get_network_requestsdefinition — direct root cause of Gemini 400 error - Fix: limit tools/list to ~11 connection tools before any connection, preventing Gemini 128-tool limit breach
- Add:
connectionOnlyToolsset andgeminiToolLimitconstant in ToolRegistry - Add:
test/tool_registry_test.dart— 17 unit tests covering tool filtering behavior
- Fix: remove duplicate
-
0.9.2919 Mar 2026Release notes
Open source →Fix: add connect_openclaw_browser and connect_webmcp to tool_registry
Changes
- Fix: register
connect_openclaw_browserandconnect_webmcpin tool_registry.dart so they appear in tools/list
- Fix: register
-
0.9.2819 Mar 2026Release notes
Open source →Add connect_openclaw_browser and connect_webmcp tools; fix OpenClaw plugin binary path
Changes
- Add
connect_openclaw_browsertool: instant connection to OpenClaw's built-in Chrome (port 18800, no launch needed) - Add
connect_webmcptool: Chrome 146+ native WebMCP support with auto-detection and CDP fallback - Fix OpenClaw plugin binary path: use
~/.pub-cache/bin/flutter_skillinstead of volatile/tmp/fs-*
- Add
-
0.9.2718 Mar 2026Release notes
Open source →fix coordinate filtering, tap(ref) elem_ fix, Windows lock fallback, CLI error improvements
Changes
- TODO: Add your changes here
-
0.9.2617 Mar 2026Release notes
Open source →- Added
--chrome-port=Nas an alias for--cdp-port=Nfor better compatibility - Fixed: Parsing of
--chrome-portparameter (previously threw FormatException) - This allows connecting to Chrome instances running on non-default ports (e.g., 18800)
- Added
-
0.9.2517 Mar 2026Release notes
Open source →fix coordinate system: filter non-active routes, fix tap(ref: elem_NNN), fix off-screen tap detection
Changes
- TODO: Add your changes here
-
0.9.2417 Mar 2026Release notes
Open source →fix 6 UX issues: DTD error detection, wider port scan, connect_by_pid, stale session cleanup, screenshot save_to_file default
Changes
- TODO: Add your changes here
-
0.9.2316 Mar 2026Release notes
Open source →fix null check crash and stop auto-opening browser on RPC errors from target app
Changes
- TODO: Add your changes here
-
0.9.2216 Mar 2026Release notes
Open source →Support Chrome 146 WebMCP: discover and call navigator.modelContextTesting tools
Changes
- Added Chrome 146+ native WebMCP support to discover_page_tools and call_page_tool
- discover_page_tools now checks navigator.modelContextTesting.getTools() first (source: webmcp-native)
- call_page_tool now routes to navigator.modelContextTesting.executeTool() for WebMCP tools
- Enable via chrome://flags/#enable-webmcp-testing in Chrome 146
- Compatible with all existing tool discovery sources (js-registered, data-mcp-tool, forms, etc.)
-
0.9.2116 Mar 2026Release notes
Open source →Auto-accept Chrome 146 remote debugging consent dialog
Changes
- Chrome 146 consent port shows "Allow remote debugging?" dialog on every connection — user had to manually click Allow each time
- Now auto-clicks the Allow button via macOS Accessibility API (AXSheet + AXButton description="Allow") in parallel with the WebSocket connection
- Users no longer need to manually confirm remote debugging — connect_cdp works seamlessly
-
0.9.1915 Mar 2026Release notes
Open source →Fix Chrome 146 consent port: skip Origin header in WebSocket upgrade
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.9.1815 Mar 2026Release notes
Open source →Support Chrome 146 consent-based remote debugging port
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.9.1715 Mar 2026Release notes
Open source →Session-copy profile: preserve user logins when Chrome 145+ blocks default profile debug port
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.9.1615 Mar 2026Release notes
Open source →Fix Chrome 145+ silently ignoring --remote-debugging-port on default profile
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.9.1515 Mar 2026Release notes
Open source →Remove Chrome for Testing dependency from CDP driver
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.9.1414 Mar 2026Release notes
Open source →Fix Page.enable hang on chrome://newtab; auto-enable remote debugging
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.9.1314 Mar 2026Release notes
Open source →Auto-tick chrome remote debugging checkbox; no Chrome restart
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.9.1214 Mar 2026Release notes
Open source →Restart existing Chrome with debug port; preserve user session
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.9.1114 Mar 2026Release notes
Open source →Auto-enable Chrome remote debugging when connecting via CDP
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.9.1014 Mar 2026Release notes
Open source →UX fixes: fill tool, press_key iOS fallback, go_back count, coordinate hint
Bug Fixes
filltool registered:fillwas documented but threwUnknown tool: fill. Now maps toenter_text(clear + set value). Closes user-reported issue.press_keyon iOS/Android: Added NativeDriver fallback sopress_keyworks in Flutter VM Service mode on simulators/emulators (previously returned unsupported error). Enter key now triggers iOS search without needing CDP mode.enter_textwithout key: When called withoutkey/ref, returns an actionablehintfield pointing toinspect_interactive()instead of the confusingNo TextField matching key 'null' founderror.go_backwithcount: Accepts acountparameter to pop multiple routes in one call with 300 ms pauses between steps — replaces repeatedgo_back()chains.native_screenshotcoordinate hint: Response now includesscale_factorand acoordinate_hintfield that explains the physical→logical pixel conversion, eliminating manual coordinate guessing.
-
0.9.914 Mar 2026Release notes
Open source →C++ desktop automation SDK
New SDK
- C++ Bridge SDK (
sdks/cpp/): Cross-platform native C++ automation bridge. Embeds a zero-dependency WebSocket server (RFC 6455) + JSON-RPC 2.0 dispatcher in your C++ app so AI agents can control it via the flutter-skill protocol. Closes #22.- macOS: CGEvent for input synthesis,
screencapturefor screenshots, AXUIElement for accessibility inspection - Windows:
SendInput+ GDI+ (screenshots) +GetForegroundWindow - Linux: XTest extension + XGetImage/libpng + EWMH
- No external dependencies — SHA-1, base64, and WebSocket framing are bundled
- Full CMake build system (
CMakeLists.txt) for all three platforms
- macOS: CGEvent for input synthesis,
- Tests: 30 unit tests (JSON-RPC, SHA-1/base64/WebSocket RFC vectors, bridge protocol with mock backend) + 27 real integration tests verified live on macOS (1630 KB PNG screenshot, tap, scroll, all key names, enter_text, inspect, window title)
- C++ Bridge SDK (
-
0.9.814 Mar 2026Release notes
Open source →Multi-flavor app detection, fresh-install UX, Docker/Snap build fixes, CI smoke tests
Bug Fixes
- Multi-flavor app detection (#24):
scan_and_connectnow acceptsflavoranddevice_idparameters. When multiple flavors run simultaneously, flutter-skill picks the correct instance instead of connecting randomly. - Fresh-install plugins warning (#23): Removed the
Plugins directory not foundwarning on clean installs — silently skipped instead. - Docker build: Dockerfile now uses
ghcr.io/cirruslabs/flutter:stablesoflutter pub getresolves Flutter SDK dependencies correctly. - Snap build: Added
git config --global --add safe.directory /opt/flutterto resolvedetected dubious ownershiperror in snapcraft builds.
CI / Testing
- Smoke test job added to CI: verifies fresh
flutter pub global activateinstall works end-to-end. - Post-release smoke test in release workflow: installs from pub.dev and npm after publish and confirms server responds.
- Multi-flavor app detection (#24):
-
0.9.711 Mar 2026Release notes
Open source →press_key for Flutter VM Service, pytest plugin, HarmonyOS SDK, CI smoke tests
Bug Fixes
- press_key in Flutter mode:
press_keynow works when connected via VM Service (not just CDP/bridge). Calls the existingext.flutter.flutter_skill.pressKeyextension that was already registered in the target app but never wired from the CLI side. Fixes #21.
New SDKs
- pytest-flutter-skill (
sdks/python/): pytest plugin for AI-driven Flutter/web app automation. Provides aflutter_skillfixture that starts the MCP server and wraps all tools as Python methods with native pytest assertions (assert_visible,assert_text,assert_not_visible,find_element). Closes #14. - HarmonyOS SDK (
sdks/harmonyos/): ArkTS bridge SDK (FlutterSkillAbility.ets) for HarmonyOS apps. Implements screenshot, tap, enter_text, press_key, scroll, go_back, get_current_route, inspect, get_logs over WebSocket on port 18118. Closes #13.
CI / Testing
- Smoke test job added to CI: simulates a new user installing from local source via
dart pub global activate, then verifies--version, MCPinitialize, andtools/listwork correctly. - Post-release smoke test added to release workflow: installs from pub.dev and npm after each release (with retry for CDN propagation) and verifies the published package serves JSON-RPC correctly.
- press_key in Flutter mode:
-
0.9.627 Feb 2026Release notes
Open source →Shadow DOM deep pierce for tap/snapshot, serve port reuse fix
Changes
taptext search now uses_dqAll('*')instead of a hardcoded tag list, so custom elements like Reddit'sfaceplate-buttonare found by text match- Snapshot second pass collects
button/[role=button]/[type=submit]elements nested inside shadow roots servebinds withshared: true(SO_REUSEADDR) to avoid TIME_WAIT "Address already in use" crashes on restart
-
0.9.525 Feb 2026Nothing published for this version
-
0.9.425 Feb 2026Nothing published for this version
-
0.9.325 Feb 2026Nothing published for this version
-
0.9.224 Feb 2026Nothing published for this version
-
0.9.124 Feb 2026Release notes
Open source →CLI client commands, GitHub Pages docs, comprehensive platform guide
New Features
- CLI client commands for serve API:
nav,snap,screenshot,tap,type,key,eval,title,text,hover,upload,tools,call,wait - GitHub Pages documentation site: Static docs site at
docs/site/with auto-deploy workflow
Documentation
- Comprehensive IDE/platform integration guide with all supported AI platforms
- CLI client reference (
docs/CLI_CLIENT.md) with scripting examples and CI/CD patterns - Updated IDE setup guide with OpenClaw serve mode and Continue.dev sections
Bug Fixes
- Chrome WebSocket 403 Forbidden: Fixed Origin header handling
- Domain-based tab matching: Never hijack unrelated tabs
- PUT for /json/new: Chrome 145+ requires PUT instead of GET
- CLI client commands for serve API:
-
0.9.022 Feb 2026Release notes
Open source →iOS native automation + React Native support + bridge reliability
New Features
- 6 native P0 tools:
native_long_press,native_gesture,native_press_key,native_key_combo,native_button,native_list_simulators - Video recording:
native_video_start/native_video_stop— H.264 MP4 via simctl recordVideo - Frame capture:
native_capture_frames— burst JPEG at configurable FPS - Hardware buttons:
apple_payandsidebutton support via HID injection - fs-ios-bridge: Native ObjC HID injector (74KB) using SimulatorKit private APIs — ~1ms latency vs ~1s for osascript
- React Native iOS: Full bridge + native tool support verified (41/42 pass)
Bug Fixes
- Bridge mode null safety: drag coordinate support, edge_swipe defaults, assert_text nullable key
- execute_batch: accepts both
actionsandcommandsparam names - native_gesture/key_combo: flexible param types (List and String)
- get_widget_properties: improved error message for missing key
- get_text_value: nullable key support
Test Results
Platform Pass Total Rate Web CDP 128 128 100% iOS Native 28 29 97% iOS Multi-App 62 62 100% iOS Cross-Stack 28 28 100% iOS Bridge (Flutter) 62 62 100% React Native iOS 41 42 98% Stats
- 253 MCP tool definitions / 176 in tool registry
- 10 platforms supported
- fs-ios-bridge: tap, long-press, swipe, key, button, gesture, screenshot, key-combo, text, list
- 6 native P0 tools:
-
0.8.014 Feb 2026Release notes
Open source →inspect_interactive, semantic refs, press_key, 75-test E2E suite
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.7.814 Feb 2026Release notes
Open source →Release 0.7.8
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.7.714 Feb 2026Release notes
Open source →Release 0.7.7
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.7.614 Feb 2026Release notes
Open source →CI improvements + MCP Registry auto-publish
Changes
- Fixed 403 Forbidden error when connecting to Chrome 146 consent port (port opened via chrome://inspect/#remote-debugging)
- Chrome 146 rejects WebSocket connections that include an Origin header; Dart built-in WebSocket.connect() always adds one
- Added _connectWebSocketNoOrigin(): raw TCP socket WebSocket upgrade that omits the Origin header
- All CDP WebSocket connections now use no-Origin mode when consent port is detected
- Users can now connect to their real Chrome browser without any session-copy workaround
-
0.7.413 Feb 2026Release notes
Open source →Multi-framework SDK support — 8 platforms, 181/183 E2E tests passing
New Features
- 8 platform SDKs: Flutter (iOS/Web), Electron, Android Native, KMP Desktop, Tauri, .NET, React Native
- Zero-config onboarding:
flutter-skill initauto-detects platform and patches entry points flutter-skill demo: launches a built-in demo Flutter app for instant testing- CLI actions: scroll, screenshot, get_text, find_element, wait_for_element, go_back, swipe
- Tauri eval-with-result: solved Tauri v2 fire-and-forget eval via secondary WebSocket result channel
- iOS SDK: SwiftUI view modifiers, FlutterSkillRegistry, WebSocket bridge with full protocol support
E2E Test Results
- Flutter iOS: 21/21 ✅ | Flutter Web: 20/20 ✅ | Electron: 24/24 ✅
- Android Native: 24/24 ✅ | KMP Desktop: 22/22 ✅
- .NET: 23/24 ✅ | Tauri: 23/24 ✅ | React Native: 24/24 ✅
Infrastructure
- Comprehensive E2E test suite (
bridge_e2e_test.mjs) covering all 13 bridge protocol actions - Test apps for each platform in
test/e2e/ - Release script now syncs versions across all SDK packages
-
0.7.309 Feb 2026Release notes
Open source →Release script fix and cleanup
Fixes
- Fixed release script adding duplicate CHANGELOG entries when version entry already exists
- Cleaned up CHANGELOG formatting
-
0.7.209 Feb 2026Release notes
Open source →Fix type cast errors in get_errors and get_network_requests
Bug Fixes
- Fixed
get_errorscrashing withtype 'String' is not a subtype of type 'int?'when passing limit/offset parameters - Fixed
get_network_requestswith same type cast issue for limit parameter - Used safe
int.tryParsepattern instead of directas int?cast for JSON-RPC params
- Fixed
-
0.7.109 Feb 2026Release notes
Open source →Bug fixes, screenshot reliability, and new features
Bug Fixes
- Screenshot after navigation: Fixed stale screenshot showing old page after
Navigator.push(). Now captures from the RenderView layer instead of first RepaintBoundary, correctly rendering the current visible page - enter_text without key: Can now enter text into the currently focused TextField without providing a widget key. Tap a field first, then call
enter_text(text: "...") - assert_text on buttons:
assert_textnow reads child Text widgets from buttons, labels, and other non-TextField elements - Session auto-switch:
connect_app,launch_app, andscan_and_connectnow always switch the active session to the newly connected app - screenshot_region: Added
save_to_filesupport (saves to temp file like regular screenshot) - get_errors pagination: Added
limitandoffsetparameters to prevent massive responses - inspect page filter: Added
current_page_onlyparameter to filter out elements from old Navigator routes
New Features
- Network monitoring: 3 new MCP tools (
enable_network_monitoring,get_network_requests,clear_network_requests) for tracking HTTP traffic via VM Service profiling - README rewrite: Clearer positioning as an AI-powered E2E testing tool with better examples and discoverability
Region Screenshot
screenshot_regionnow reuses the same RenderView layer capture, fixing the same stale-page issue as regular screenshots
- Screenshot after navigation: Fixed stale screenshot showing old page after
-
0.7.008 Feb 2026Release notes
Open source →Enhanced developer experience: install scripts, CLI tips, and doctor command
Features
flutter-skill doctor: New command to check installation and environment health (Flutter/Dart SDK, devices, native tools, IDE config, tool priority rules)--version/-vflag: Quick version check from CLI (flutter-skill --version)- Interactive CLI tips: Running
flutter-skill-mcpin terminal shows helpful usage guide with examples instead of hanging - Auto-config IDE settings: Install script automatically writes MCP config to Claude Code (
~/.claude/settings.json) and Cursor (~/.cursor/mcp.json)
Install Script Improvements
- One-click install auto-configures everything (IDE settings, tool priority rules, PATH)
- Safe JSON merging via python3 (preserves existing settings)
- POSIX-compatible output (
printfinstead ofecho -e) - Removed
--forcenpm warning during updates - Smart version verification with regex validation
- Added fish shell PATH support
- Windows PowerShell auto-config with
ConvertFrom-Json/ConvertTo-Json
New Files
lib/src/cli/doctor.dart- Environment health checkeruninstall.sh- Clean uninstall for macOS/Linuxuninstall.ps1- Clean uninstall for Windows
Release Script
scripts/release.shnow auto-syncs Homebrew formula version
-
0.6.208 Feb 2026Release notes
Open source →Improve pub.dev score
Changes
- Add
example/example.dartfor pub.dev package scoring - Widen
vm_servicedependency to>=14.0.0 <16.0.0(supports v15) - Remove unused persistent character fields (fixes 6 analyzer warnings)
- Fix "multiple pubspec.yaml" issue by adding
demo_app/to.pubignore - Replace
Color.withValues()withwithOpacity()for Flutter 3.24 compatibility
- Add
-
0.6.108 Feb 2026Release notes
Open source →Native platform interaction tools and VM Service reconnection fix
Features
- Native Platform Interaction: 4 new MCP tools (
native_screenshot,native_tap,native_input_text,native_swipe) for interacting with native OS views that are invisible to Flutter's VM Service (photo pickers, permission dialogs, share sheets)- iOS Simulator: Uses macOS Accessibility API — no external dependencies
- Android Emulator: Uses adb shell commands
- Smart element targeting with scoring system for accurate tap detection
- Auto-dismissal of iOS paste confirmation dialog
Bug Fixes
- VM Service Reconnection: Fix
LateInitializationErrorcrash when VM Service connection breaks. Client now auto-reconnects and retries failed operations transparently
- Native Platform Interaction: 4 new MCP tools (
-
0.6.006 Feb 2026Release notes
Open source →Enhanced smart discovery with parallel port checking and priority-based selection
🚀 Features
- Parallel Port Checking: 6x faster port scanning by checking all ports simultaneously
- Sequential (old): 6 ports × 500ms = 3000ms
- Parallel (new): 500ms (returns as soon as first succeeds)
- Uses
Future.any()to race all port checks
- Priority-Based Smart Selection: Intelligent app ranking for zero manual selection
- Ranks by: exact directory match → device match → recency (lowest PID)
- Auto-selects correct app based on current working directory
- Handles multiple apps in same location with device filtering
- Process-Based Discovery: Extract VM Service URI directly from running processes
- No port scanning needed for most cases
- Uses
ps auxandlsoffor instant discovery
⚡ Performance Improvements
- Port scanning: 3000ms → 500ms (6x faster)
- Process discovery: 200ms → 100ms (2x faster)
- Multi-app selection: Manual → Auto (instant)
🌍 Internationalization
- Translated all Chinese comments to English
- Updated documentation to follow project standards
- All user-facing strings now in English
📚 Documentation
- Added
docs/SMART_DISCOVERY.md- Complete smart discovery documentation - Added
docs/SMART_SELECTION.md- Smart app selection guide - Added
docs/MULTI_APP_SELECTION.md- Multi-app handling documentation
🧹 Cleanup
- No cache files created (clean filesystem)
- Removed experimental caching system
- Deprecated sequential port checking method
- Parallel Port Checking: 6x faster port scanning by checking all ports simultaneously
-
0.5.505 Feb 2026Release notes
Open source →Fix Twitter OAuth authentication
🐛 Bug Fixes
- 🔧 Fixed Twitter OAuth Authentication: Switch from Bearer Token to OAuth 1.0a
- Twitter API v2 create tweets endpoint requires User Context authentication
- Bearer Token (App-Only) is not supported for posting tweets
- Now uses OAuth 1.0a with API Key, API Secret, Access Token, and Access Token Secret
- Uses
nearform-actions/github-action-notify-twitteraction for OAuth signing
💡 What Changed
- ✅ Twitter posting now works correctly with User Context authentication
- ✅ Automatic release announcements will be posted to Twitter/X
- ✅ No more "Unsupported Authentication" errors
- 🔧 Fixed Twitter OAuth Authentication: Switch from Bearer Token to OAuth 1.0a
-
0.5.405 Feb 2026Release notes
Open source →Add automated Twitter/X posting for release announcements
🤖 CI/CD Improvements
- 🐦 Automated Twitter/X Posting: Release workflow now auto-posts release announcements to Twitter/X
- Posts tweet with version, installation commands, and release link
- Uses Twitter API v2 with Bearer Token authentication
- Includes relevant hashtags (#Flutter #AI #MCP #DartLang)
- Auto-triggered on every release
- Non-blocking (won't fail release if Twitter posting fails)
📚 Documentation
- 📖 Added
docs/TWITTER_SETUP.mdwith complete Twitter API configuration guide- Step-by-step Bearer Token setup instructions
- Troubleshooting guide for common errors
- Security best practices
- Tweet content customization instructions
💡 Benefits
- ✅ Automatic social media presence for releases
- ✅ Instant community notification
- ✅ Consistent release announcements
- ✅ Zero manual effort required
- 🐦 Automated Twitter/X Posting: Release workflow now auto-posts release announcements to Twitter/X
-
0.5.305 Feb 2026Release notes
Open source →Add automated Winget PR submission to release workflow
🤖 CI/CD Improvements
- 🚀 Automated Winget Submission: Release workflow now auto-submits PRs to microsoft/winget-pkgs
- Uses
winget-releaserGitHub Action for automatic PR creation - Every release will be submitted to Microsoft's official Winget repository
- Eliminates manual PR submission for Windows package manager
- Uses
💡 Benefits
- ✅ Windows users can install via
winget install AIDashboard.FlutterSkill - ✅ Automatic version updates in Microsoft's official package repository
- ✅ No more manual PR submissions to winget-pkgs
- 🚀 Automated Winget Submission: Release workflow now auto-submits PRs to microsoft/winget-pkgs
-
0.5.204 Feb 2026Release notes
Open source →Critical bug fixes for coordinate detection and JSON serialization
🐛 Bug Fixes (Critical)
-
🔧 Fixed JSON Serialization Error in find_by_type: Added
safeRound()helper to handle NaN/Infinity values- Previously crashed with "Unsupported object: NaN" or "Unsupported object: Infinity"
- Now safely converts all coordinate values to finite integers
- Consistent with
inspect()implementation
-
📍 Improved TextField Coordinate Detection: Added reliability detection for widget coordinates
- New
coordinatesReliableflag on all elements - Detects when TextFields report false (0,0) coordinates
- Provides warning message: "Coordinates may be unreliable - use key or text for targeting"
- Helps AI agents know when to fall back to key/text-based targeting
- New
🔧 Improvements
- 📋 Enhanced MCP Tool Descriptions: Updated
inspectandfind_by_typedocumentation- Documents
coordinatesReliableflag in output format - Warns about TextField coordinate issues
- Guides AI agents to use keys when coordinates are unreliable
- Documents
💡 Benefits
- ✅ find_by_type no longer crashes on off-screen or animated widgets
- ✅ AI agents can detect unreliable coordinates and adjust targeting strategy
- ✅ Better error messages guide users to use keys instead of coordinates
- ✅ More robust JSON serialization prevents crashes
📝 Migration Guide
No breaking changes. New
coordinatesReliablefield is optional to check:// Check coordinate reliability before using coordinates final elements = await inspect(); for (final element in elements) { if (element['coordinatesReliable'] == true) { // Safe to use bounds/center coordinates tap(x: element['center']['x'], y: element['center']['y']); } else { // Fall back to key/text targeting if (element['key'] != null) { tap(key: element['key']); } } }
-
-
0.5.102 Feb 2026Release notes
Open source →Major usability improvements for screenshots, errors, and logging
🎯 P0 Fixes (Critical)
-
📸 Screenshot Optimization: Now saves to file by default instead of returning base64
- Returns file path, filename, size, format
- Dramatically reduces response size
save_to_fileparameter (default: true)- Backward compatible: set
save_to_file=falsefor base64 - Files saved to temp directory with timestamp
-
🔌 Improved Connection Error Messages: Detailed, actionable error messages
- Clear status indicators with emojis (📍, 🔧, 💡, ⚠️)
- 3 connection options with code examples
- Troubleshooting checklist included
- Shows VM Service URI in errors for context
- Better guidance for first-time users
🔧 P1 Improvements
- 📊 Structured Log/Error Responses:
get_logs(): Returns logs with summary (total_count, message)get_errors(): Returns errors with summary (has_errors, total_count, message)clear_logs(): Returns structured success response- Easier to parse and display in UI
💡 Benefits
- ✅ Smaller response sizes (file paths vs base64 data)
- ✅ Better developer experience with clear error messages
- ✅ Faster problem resolution
- ✅ More structured, parseable responses
- ✅ Files can be opened directly in viewers/editors
📝 Migration Guide
Screenshot:
// New behavior (default) screenshot() // Returns: {"file_path": "/tmp/...", "size_bytes": 45678} // Legacy behavior screenshot(save_to_file: false) // Returns: {"image": "base64..."}Logs/Errors:
// New response format get_errors() // Returns: { // "errors": [...], // "summary": { // "total_count": 3, // "has_errors": true, // "message": "3 error(s) found ⚠️" // } // }
-
-
0.5.002 Feb 2026Release notes
Open source →Add visual test indicators for UI automation
✨ New Features
- 🎨 Visual Test Indicators: Real-time visual feedback for all test actions
- Tap indicator: Expanding circle with fade-out animation
- Swipe indicator: Arrow with dashed trail showing direction
- Long press indicator: Filling progress circle
- Text input indicator: Glowing border with blink effect
- 📢 Action Hints: Top banner displaying current operation ("Tapping 'Submit'", etc.)
- 🎛️ Configurable Styles: Three modes to choose from
minimal: Small, fast (200ms), no hintsstandard: Medium, normal speed (500ms), 1s hints (default)detailed: Large, slow (800ms), 2s hints + debug info
- 🔧 Easy Control: Enable/disable indicators on the fly
- MCP tool:
enable_test_indicators(enabled: true, style: "standard") - MCP tool:
get_indicator_status() - VM Service extensions:
enableIndicators,disableIndicators,getIndicatorStatus
- MCP tool:
🏗️ Architecture
TestIndicatorOverlay: Manages overlay entry and indicator lifecycleTestIndicatorWidget: Renders all visual effects with smooth animations- Indicator components:
TapIndicator,SwipeIndicator,LongPressIndicator,TextInputIndicator,ActionHint - Uses Flutter Overlay for cross-platform compatibility
- IgnorePointer prevents interaction interference
- Automatic cleanup after animations complete
📖 Benefits
- 🎥 Better Test Videos: All indicators visible in screen recordings
- 🐛 Easier Debugging: See exactly what's being clicked/swiped
- 📱 Works Everywhere: iOS, Android, Web, Desktop
- ⚡ Zero Impact: No performance cost when disabled
- 🔄 Auto-Integration: Automatically shows for all test actions
📝 Usage Example
// Enable indicators await enable_test_indicators(enabled: true, style: "standard"); // All actions now show visual feedback automatically await tap(text: "Submit"); // Shows tap ripple + "Tapping 'Submit'" await swipe(direction: "left"); // Shows swipe arrow + "Swiping left" await long_press(text: "Menu"); // Shows progress circle + "Long pressing 'Menu'" await enter_text(key: "email", text: "[email protected]"); // Shows glow + "Entering text" // Disable when done await enable_test_indicators(enabled: false);📚 Documentation
- Design document:
docs/TEST_INDICATORS_DESIGN.md - Includes architecture, configuration options, and future enhancements
- 🎨 Visual Test Indicators: Real-time visual feedback for all test actions
-
0.4.902 Feb 2026Release notes
Open source →Fix screenshot_element null handling and add text parameter
Bug Fixes
- 🐛 Fixed "type 'Null' is not a subtype of type 'String'" error in
screenshot_element - ✅ Added
textparameter support (in addition tokey) for finding elements by text content - 🔍 Automatically looks up element key when
textparameter is provided - 🛡️ Added null check for
takeElementScreenshotreturn value - 📝 Returns descriptive error messages when element not found or screenshot fails
Improvements
- 🎯
screenshot_elementnow matches behavior of other action tools (tap,long_press, etc.) - 🔄 Supports both
screenshot_element(key: "button_1")andscreenshot_element(text: "Submit")
Technical Details
- Queries
getInteractiveElements()to find matching text when key not provided - Returns
{"error": "...", "message": "..."}instead of crashing on null
- 🐛 Fixed "type 'Null' is not a subtype of type 'String'" error in
-
0.4.802 Feb 2026Release notes
Open source →Fix Infinity/NaN crash when inspecting widgets
Bug Fixes
- 🐛 Fixed "Unsupported operation: Infinity or NaN toInt" crash in
_findInteractiveElements - ✅ Added
safeRound()helper function to handle invalid numeric values - 🛡️ Widget bounds calculation now safely handles
InfinityandNaNvalues (returns 0) - 🔧 Prevents MCP error -32603 when inspecting widgets with problematic layouts
- 📦 Supports edge cases:
Positioned.fill,FractionalTranslation, and malformed widget trees
Technical Details
- Checks
value.isFinitebefore calling.round()on position/size values - Gracefully degrades to
{x: 0, y: 0, width: 0, height: 0}for invalid bounds
- 🐛 Fixed "Unsupported operation: Infinity or NaN toInt" crash in
-
0.4.702 Feb 2026Release notes
Open source →Auto-update flutter_skill dependency in target projects
Improvements
- 🔄
setupnow automatically updates existingflutter_skilldependency to latest version from pub.dev - ✅ Enhanced
flutter pub upgrade flutter_skillchecks when dependency already exists - 📊 Clear status feedback: "✅ updated", "✅ up to date", or "⚠️ failed"
- 🔧 Ensures target projects always use the latest compatible version
- ♻️ Maintains backward compatibility with first-time installations
Behavior Changes
- Previously: Skipped setup if dependency already existed (even if outdated)
- Now: Actively upgrades to latest version when dependency is found
- 🔄
-
0.4.602 Feb 2026Release notes
Open source →Fix release script to auto-update server.dart version
Bug Fixes
- 🔧 Fixed release script to automatically update
_currentVersioninlib/src/cli/server.dart - 🔄 Ensures version consistency across all release artifacts (pubspec, npm, VSCode, JetBrains, server.dart)
- ✅ Prevents version mismatch errors in MCP server startup
- 🔧 Fixed release script to automatically update
-
0.4.502 Feb 2026Release notes
Open source →Add MCP auto-fix and diagnostics
Features
- ✨ New
diagnose_projectMCP tool for comprehensive project diagnostics - 🔧 Auto-fix capability in
connect_appandscan_and_connecttools - 📁 Optional
project_pathparameter for automatic configuration - 🛠️ Diagnostic shell script (
scripts/diagnose.sh) for manual troubleshooting
Improvements
- 📊 Enhanced error logging with complete diagnostic output
- 🔍 Automatic detection and repair of missing
flutter_skilldependency - ⚙️ Automatic detection and repair of missing
FlutterSkillBindinginitialization - ✅ Backward compatible (all tools work without
project_pathparameter)
Documentation
- 📖 New AUTO_FIX_IMPROVEMENTS.md guide
- ✅ New test_auto_fix.md testing checklist
- 🔧 Updated TROUBLESHOOTING.md with auto-fix workflows
- 🌍 README.md translated to English
- ✨ New
-
0.4.402 Feb 2026Release notes
Open source →Fix dart analyze errors
Bug Fixes
- Fix
WebSocket.connecttimeout parameter issue (use.timeout()method instead of named parameter) - Add missing
dart:convertimport forutf8usage in protocol detector - Fix test file:
getWidgetTreereturnsMapnotString, use correcttakeScreenshotmethod name - Add
.mcp.jsonto gitignore
- Fix