flutter-skill: cho AI agent điều khiển ứng dụng đang chạy

flutter-skill là một MCP server cho Claude, Cursor hay Copilot đôi mắt và đôi tay bên trong ứng dụng Flutter đang chạy — chạm, gõ, cuộn và kiểm chứng bằng tiếng Anh thường, không cần viết code test.

Danh mụcAI/ML
Sao★ 360
Cập nhật2026-08-21
Ưu tiênHigh

flutter-skill là một MCP server trao cho bất kỳ AI agent nào đôi mắt và đôi tay bên trong ứng dụng đang chạy của bạn — 10 nền tảng, không cần viết code test. 360★, giấy phép MIT, cập nhật lần cuối 2026-08-21.

flutter-skill là gì?

Viết bài kiểm thử đầu-cuối đã khổ; duy trì chúng còn khổ hơn. Page Object mục nát, selector gãy, và bộ test rốt cuộc mô tả giao diện của quý trước.

flutter-skill chọn con đường khác. Nó phơi bày ứng dụng đang chạy của bạn cho một AI agent qua Model Context Protocol, để agent nhìn thấy cây widget, bấm nút, gõ chữ, cuộn, điều hướng và chụp màn hình. Bạn mô tả ý định bằng tiếng Anh:

“Test the checkout flow with an empty cart, then add 3 items and complete the purchase.”

Không Page Object, không XPath, không selector.

Gói Flutter tên là flutter_skill (0.9.36 trên pub.dev), nhưng cùng MCP server đó cũng điều khiển được React Native, Electron, Tauri, Android/Kotlin, KMP Desktop, .NET MAUI, iOS/UIKit, mọi website, và Chrome qua CDP mà không cần SDK nào cả.

Vì sao nên biết trong năm 2026

Hai quyết định thiết kế khiến nó không chỉ là một bản trình diễn.

Ảnh chụp là một cái cây, không phải một tấm hình. snapshot() trả về cây phần tử/trợ năng có cấu trúc thay vì một tấm ảnh, mà dự án đo được là ít hơn 87–99% token so với việc gửi ảnh chụp màn hình cho mô hình. Nếu bạn từng nhìn một agent đốt sạch cửa sổ ngữ cảnh vào mấy file PNG, bạn hiểu vì sao điều đó quan trọng — đó là khác biệt giữa một agent khám phá được mười hai màn hình và một agent hết chỗ ngay ở màn hình thứ ba.

Nó nói chuyện với runtime, không qua một driver. Số đo được công bố đặt tapenter_text ở mức 1–2 ms và snapshot ở 2–29 ms tùy nền tảng, so với 50–100 ms thường thấy ở tự động hóa qua WebDriver. Con số lấy từ README của chính dự án thì lúc nào cũng đáng nhìn bằng con mắt hoài nghi, nhưng kiến trúc có ủng hộ tuyên bố đó: đường đi phía Flutter không có lớp trung gian WebDriver hay CDP nào.

Có hai chế độ. server nói MCP qua stdio để tích hợp với IDE và phơi bày 253 công cụ thay đổi theo từng trang. serve chạy một HTTP server dùng cho CI và viết script, kèm một client dòng lệnh:

flutter-skill serve https://your-app.com
flutter-skill tap "Login"
flutter-skill snap

Bắt đầu

Cài server:

npm install -g flutter-skill

Trỏ agent của bạn tới nó:

{
  "mcpServers": {
    "flutter-skill": {
      "command": "flutter-skill",
      "args": ["server"]
    }
  }
}

Khối đó đặt vào .cursor/mcp.json, claude_desktop_config.json, .vscode/mcp.json hay ~/.codeium/windsurf/mcp_config.json tùy công cụ bạn dùng.

Rồi thêm hai dòng vào ứng dụng:

import 'package:flutter_skill/flutter_skill.dart';

void main() {
  if (kDebugMode) FlutterSkillBinding.ensureInitialized();
  runApp(const MyApp());
}

Giữ nguyên lớp bảo vệ kDebugMode. Một bản build phát hành không bao giờ nên mang theo một binding cho phép tiến trình bên ngoài điều khiển giao diện.

Ngoài ra còn có Homebrew, Scoop, Docker, dart pub global activate flutter_skill, plugin cho VS Code và JetBrains, và flutter-skill init tự nhận diện rồi vá vào một ứng dụng có sẵn.

Khi nào nên dùng flutter-skill?

  • bạn muốn kiểm thử khám phá — “đi hết mọi màn hình và cho tôi biết chỗ nào hỏng” — mà không phải tự viết
  • bạn đang dùng Claude Code, Cursor hay Copilot và muốn chúng tự kiểm chứng thay đổi giao diện của chính mình
  • bạn duy trì ứng dụng trên nhiều nền tảng và muốn một bề mặt tự động hóa chung
  • agent của bạn cứ hết ngữ cảnh vì ảnh chụp màn hình

Điểm còn hạn chế

Phiên bản 0.9.36 và con số 98,8% của một bộ test do chính tác giả viết không đồng nghĩa với độ chín cho production. Điểm số trong README là dự án tự chấm bài mình trên ứng dụng mẫu của mình; hãy xem đó là dấu hiệu của sự nỗ lực, không phải của độ phủ trên ứng dụng của bạn.

Căn bản hơn, kiểm thử do agent dẫn dắt không tất định. Cùng một prompt sẽ không cho ra cùng 28 thao tác hai lần, khiến nó rất giỏi tìm lỗi và rất kém trong việc chứng minh một lỗi vẫn còn được sửa. Nó bổ trợ cho integration_test và golden test chứ không thay thế. Ai đang định xóa bộ test hồi quy thì đừng.

Bề mặt bảo mật cũng đáng nghĩ tới. Bạn đang mở một kênh cho phép một tiến trình bên ngoài đọc và điều khiển giao diện của mình. Ở bản build debug trên máy của bạn thì không sao. Hãy chắc chắn nó không bao giờ ở chỗ nào khác.

Và 10 nền tảng nghĩa là 10 SDK ở 10 mức độ hoàn thiện khác nhau — Flutter là con át chủ bài với 188/195 điểm; iOS thì được ghi là 19 bài test. Hãy kiểm tra đúng nền tảng mà bạn thật sự quan tâm.

Các lựa chọn đáng so sánh

Câu hỏi thường gặp

Phải thêm bao nhiêu code vào ứng dụng Flutter?

Hai dòng. import 'package:flutter_skill/flutter_skill.dart';if (kDebugMode) FlutterSkillBinding.ensureInitialized(); ở đầu main(). Nhớ bọc trong kDebugMode để binding không bao giờ lọt vào bản build phát hành.

Những công cụ AI nào điều khiển được nó?

Bất kỳ agent nào tương thích MCP. README liệt kê Cursor, Claude Desktop, Windsurf, VS Code Copilot, Cline, Continue.dev và OpenClaw, kèm file cấu hình mà mỗi công cụ mong đợi. Khối khai báo server thì giống nhau: flutter-skill server.

Vì sao nó nhanh hơn Playwright hay Appium?

Nó nói chuyện trực tiếp với runtime của ứng dụng thay vì đi vòng qua WebDriver hay CDP. Kết quả đo của chính dự án đặt một thao tác chạm ở mức 1–2 ms so với 50–100 ms thường thấy ở tự động hóa trình duyệt — nên tự kiểm chứng trên ứng dụng của bạn chứ đừng tin ngay.

Nó có thay thế được integration_test không?

Không. Khám phá do agent dẫn dắt rất giỏi tìm lỗi và rất tệ trong việc chứng minh một lỗi đã sửa vẫn còn được sửa, vì cùng một prompt không cho ra cùng một lần chạy. Hãy giữ các bài test tất định cho hồi quy và dùng flutter-skill để khám phá.

Tài nguyên & liên kết


Thuộc FlutterCook — hướng dẫn thực hành về các thư viện, UI kit và ứng dụng Flutter mã nguồn mở tốt nhất. Xem xu hướng GitHub hoặc hướng dẫn YouTube.