Control and automate Flutter applications - inspect UI, perform gestures, validate state, take screenshots, and debug. Connects AI agents to running Flutter apps via Dart VM Service Protocol.
Install
npx skillscat add ai-dashboad/flutter-skill/flutter-skill Install via the SkillsCat registry.
SKILL.md
Flutter Skill
Give your AI Agent eyes and hands inside your Flutter app. This skill enables comprehensive control of Flutter applications for testing, debugging, and automation.
Installation
Option 1: npx (Recommended)
{
"flutter-skill": {
"command": "npx",
"args": ["flutter-skill"]
}
}Option 2: Global Install
dart pub global activate flutter_skillThen configure:
{
"flutter-skill": {
"command": "flutter_skill",
"args": ["server"]
}
}Available Tools
Connection
connect_app- Connect to a running Flutter app via WebSocket URIlaunch_app- Launch a Flutter app with auto-setup (adds dependencies, patches main.dart)
UI Inspection
inspect- Get interactive elements (buttons, text fields, etc.)get_widget_tree- Full widget tree structure with configurable depthget_widget_properties- Widget details (size, position, visibility)get_text_content- Extract all visible text from screenfind_by_type- Find all widgets of a specific type
Interactions
tap- Tap element by key or textdouble_tap- Double tap gesturelong_press- Long press gestureswipe- Swipe up/down/left/rightdrag- Drag from one element to anotherscroll_to- Scroll element into viewenter_text- Input text into text field
State Validation
get_text_value- Get text field valueget_checkbox_state- Get checkbox checked stateget_slider_value- Get slider current valuewait_for_element- Wait for element to appear (with timeout)wait_for_gone- Wait for element to disappear
Screenshots
screenshot- Capture full app screenshot (base64 PNG)screenshot_element- Capture specific element screenshot
Navigation
get_current_route- Get current route namego_back- Navigate backget_navigation_stack- Get navigation history
Debug & Logs
get_logs- Application logsget_errors- Error messagesget_performance- Performance metricsclear_logs- Clear log bufferhot_reload- Trigger hot reload
Usage Examples
Test a Counter App
1. Launch the app: launch_app with project_path="/path/to/app"
2. Inspect UI: inspect
3. Tap increment: tap with key="increment_button"
4. Verify: get_text_content to see updated counterTest a Login Flow
1. Enter email: enter_text with key="email_field", text="user@example.com"
2. Enter password: enter_text with key="password_field", text="password123"
3. Tap login: tap with key="login_button"
4. Wait for home: wait_for_element with key="home_screen", timeout=5000Debug an Issue
1. Connect: connect_app with uri="ws://127.0.0.1:xxxxx/ws"
2. Check errors: get_errors
3. View logs: get_logs
4. Take screenshot: screenshotBest Practices
Use Widget Keys
For reliable element identification, target apps should use ValueKey:
ElevatedButton(
key: const ValueKey('submit_button'),
onPressed: _submit,
child: const Text('Submit'),
)Element Finding Priority
- Key (most reliable):
tap with key="submit_button" - Text content:
tap with text="Submit" - Widget type:
find_by_type with type="ElevatedButton"