Agent skill

Native Desktop UI Testing

by FNOSP in FNOSP/FlyNarwhal

Run and verify Flutter desktop behavior on Windows/macOS/Linux native clients.

AGPL-3.0Auto-check passedMobile

Install Native Desktop UI Testing

skills CLI
$ npx skills add FNOSP/FlyNarwhal --skill native-desktop-ui-testing -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install FNOSP/FlyNarwhal native-desktop-ui-testing --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/FNOSP/FlyNarwhal.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/native-desktop-ui-testing .claude/skills/native-desktop-ui-testing && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
native-desktop-ui-testing
GitHub stars
495
Token cost
~2.4k tokens
SKILL.md length
1,293 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Run and verify Flutter desktop behavior on Windows/macOS/Linux native clients.

  • Works in 3 steps: Always test the native desktop client → Confirm native target → Confirm entrypoint
  • Tasks that involve Cross-platform mobile apps
  • SKILL.md covers Overview, When To Use, Hard Rules and 2. Build testability in during…, plus 11 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Native Desktop UI Testing is an agent skill from FNOSP/FlyNarwhal. Run and verify Flutter desktop behavior on Windows/macOS/Linux native clients. Invoke when developing, fixing, or testing PC features, user flows, interaction results, Dart MCP scenarios, or testability anchors like ValueKey.

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Mobile, covering Cross-platform mobile apps and UX design. It works with Flutter, Model Context Protocol, Linux and macOS. The repository describes itself as: 基于 Flutter 框架开发的适用于飞牛影视的跨平台客户端. The licence is AGPL-3.0.

When your agent uses it

  • Tasks that involve Cross-platform mobile apps
  • Tasks that involve UX design

Example prompts

  • “/native-desktop-ui-testing”

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Always test the native desktop client
  2. Confirm native target
  3. Confirm entrypoint

What it can do on your machine

Read from SKILL.md and the folder at commit c94d847. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Native Desktop UI Testing loads about 2.4k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 1,293 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~63
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from FNOSP/FlyNarwhal at commit c94d847, republished under its AGPL-3.0 licence (© FNOSP). 1,293 words, ~2,422 tokens.

Download SKILL.mdSave it as .claude/skills/native-desktop-ui-testing/SKILL.md (or your agent's skills folder).
name
native-desktop-ui-testing
description
Run and verify Flutter desktop behavior on Windows/macOS/Linux native clients. Invoke when developing, fixing, or testing PC features, user flows, interaction results, Dart MCP scenarios, or testability anchors like ValueKey.
metadata.author
SOLO
metadata.version
1.0.0
metadata.domain
desktop-ui-testing
metadata.role
specialist
metadata.scope
execution

Native Desktop UI Testing

Overview

This skill is for this Flutter PC client project when running or preparing UI tests for the native desktop app.

Supported target forms:

  • Windows desktop app
  • macOS desktop app
  • Linux desktop app

This skill is not for web UI verification in this project.

When To Use

Default to this skill for this project's desktop client work: whenever you are developing, fixing, or verifying features that affect native user flows, visible state, interaction results, session behavior, navigation outcomes, or other behavior that should be validated through the real desktop client, invoke this skill unless the task is clearly isolated from client-side behavior.

  • the user asks to run or verify desktop UI flows
  • the task involves mcp_dart UI control
  • the task involves player controls, navigation, login/logout, settings, or other desktop client interactions
  • the task changes logic that may not alter UI code directly but does affect desktop client behavior or user-visible outcomes
  • the task requires adding or reviewing ValueKey for stable UI automation
  • the task requires deciding whether a UI interaction should be automated or left for manual verification
  • the task is developing or modifying a feature that is suitable for desktop UI testing in this project

Do not use this skill when:

  • the task is isolated logic that cannot affect desktop client behavior, native user flows, or visible outcomes
  • the task is only a web app verification request
  • the task is a simple static code review unrelated to desktop UI execution

Hard Rules

1. Always test the native desktop client

For this repository, UI testing must target the native desktop app, not the web build.

Required behavior:

  • prefer native device targets such as windows, macos, or linux
  • use mcp_dart.list_devices first, then choose a native desktop device
  • launch the app with mcp_dart.launch_app
  • if UI control is needed, use a driver-enabled native entrypoint such as lib/driver_main.dart

Forbidden behavior:

  • do not use chrome
  • do not use edge
  • do not switch to web just because web is easier to automate
  • do not claim desktop UI is verified if only the web version was tested

Additional expectation:

  • when implementing features that are suitable for desktop UI testing, proactively use this skill to run native-client UI verification instead of waiting for the user to explicitly remind you

2. Build testability in during implementation

Do not wait until the testing phase to discover that the UI is hard to control.

When writing or modifying UI code, proactively add stable automation anchors to key interactive widgets.

Priority targets for ValueKey:

  • primary navigation items
  • login / logout buttons
  • primary submit buttons
  • critical toggles and switches
  • player controls
  • detail-page primary actions such as play / continue play
  • list items or cards that are expected to be clicked in tests
  • dialog confirm / cancel actions when they are important to flows

Good rule of thumb:

  • if a widget is critical to a main user path and may be used in automation, give it a stable ValueKey

Avoid weak selectors:

  • text-only selectors for frequently changing copy
  • structure-based assumptions about widget nesting
  • selectors that depend on hover-only state if a stable key can be added without changing product behavior

3. Never change product behavior just to satisfy automation

Do not modify the real interaction design merely because MCP or automation has difficulty operating it.

Examples of unacceptable changes:

  • changing a hover-only control to tap-open only for easier testing
  • simplifying real interaction flows just to make automation pass
  • adding non-product behavior that users do not actually have

Correct fallback:

  • if the real interaction is hard to automate with MCP and should remain as designed, keep the product behavior unchanged
  • explain the automation limitation clearly
  • ask the user to perform that part manually
  • report which steps were automated and which steps require manual verification

Manual-test escalation is preferred over changing requirements.

Step 1. Confirm native target
  • run mcp_dart.list_devices
  • choose windows, macos, or linux
  • do not choose browser targets
Step 2. Confirm entrypoint
  • use the normal entrypoint when only launching is required
  • use a driver-enabled entrypoint when flutter_driver commands are required
  • keep the app logic the same; only add a dedicated driver entrypoint when needed

Recommended pattern:

  • extract shared bootstrap logic into a reusable entrypoint like lib/app.dart
  • keep lib/main.dart for normal startup
  • keep lib/driver_main.dart for driver-enabled startup

Step 3. Connect runtime tooling

  • launch with mcp_dart.launch_app
  • connect using mcp_dart.connect_dart_tooling_daemon
  • confirm the app instance with mcp_dart.list_running_apps

Step 4. Inspect before acting

Before trying to tap anything:

  • inspect with mcp_dart.get_widget_tree
  • use actual runtime tree data to decide finders
  • prefer ByValueKey for stable interactions
  • use ByText, ByTooltipMessage, or ByType only when appropriate

Recommended finder priority:

  1. ByValueKey
  2. ByTooltipMessage
  3. ByText
  4. ByType
Show full SKILL.md (526 more words)Show less

Step 5. Verify user-visible evidence

Do not treat a successful command response as enough.

Always verify with one or more of:

  • another waitFor
  • screenshot evidence
  • visible text change
  • page title change
  • widget tree state change
  • runtime logs when relevant

If screenshots are captured for testing:

  • use them only as temporary verification artifacts
  • delete them immediately after the verification result is confirmed
  • do not leave test screenshots in the repository or workspace after the task is done

Step 6. Check runtime issues

After important actions:

  • inspect mcp_dart.get_runtime_errors
  • inspect app logs if behavior is suspicious

Project-Specific Lessons

Successful patterns from this repository
  • navigation items already work well when they have stable keys
  • desktop native startup can be verified with mcp_dart.launch_app
  • flutter_driver works better when critical controls have ValueKey
  • screenshots are useful to confirm whether the app is on the home page, detail page, or player page
  • player flow often benefits from using ByType for custom composed widgets when text finders are not stable enough
Known caution points
  • this project is a desktop client, so web verification is not an acceptable substitute
  • some mcp_dart.flutter_driver commands may behave inconsistently with certain parameter combinations; avoid assuming the tool is wrong until you verify with widget tree and screenshots
  • a successful desktop launch may still fail if the Windows build artifacts are locked by a stale process; clear stale native processes before retrying

Implementation Guidance For New Code

When adding or updating desktop UI features:

  • add ValueKey as part of the initial implementation, not as a late testing patch
  • add keys only to meaningful interaction points, not every widget
  • keep key names stable and intention-revealing

Suggested naming style:

  • nav-home
  • settings-logout
  • login-submit
  • player-play-pause
  • player-speed-control
  • player-volume-control

Avoid:

  • random key names
  • unstable index-based names when a semantic name is possible
  • renaming keys casually without updating tests

Decision Rules For Automation vs Manual Testing

Automate when:

  • the interaction can be controlled without changing product behavior
  • a stable ValueKey or reliable runtime finder exists
  • the result can be verified with visible evidence

Escalate to manual testing when:

  • the interaction depends on real hover behavior or complex OS-level input that MCP cannot reproduce reliably
  • automating it would require changing the intended UX
  • the interaction is blocked by tool limitations rather than code quality

When escalating, report clearly:

  • what was automated successfully
  • what could not be automated
  • why it should remain manual
  • what manual verification steps the user should perform

Output Expectations

When using this skill, provide:

  • the native target used
  • the entrypoint used
  • what flows were automated
  • what evidence confirmed success
  • what required manual verification, if any
  • whether new ValueKey were added and why
  • whether any proposed change was rejected because it would alter real product behavior
  • whether temporary test screenshots were cleaned up

Short Checklist

  • Native desktop target selected
  • Web target avoided
  • Driver-enabled entrypoint used when needed
  • Widget tree inspected before interaction
  • ByValueKey preferred for key actions
  • Critical UI already has ValueKey, or a minimal product-safe key was added
  • No UX behavior was changed just for test convenience
  • Manual verification requested when MCP could not reproduce the real interaction
  • Runtime errors checked
  • Evidence captured with screenshots or visible state changes
  • Temporary test screenshots deleted immediately after verification

© FNOSP, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/native-desktop-ui-testing of FNOSP/FlyNarwhal.

Open the folder on GitHubat commit c94d847

Compare with similar skills

Native Desktop UI Testing next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Native Desktop UI Testing compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Native Desktop UI Testing this skillFNOSP/FlyNarwhal495—~2.4kAutomated safety check: PassAGPL-3.0
Engine Whats Newflutter/flutter179k—~978Automated safety check: PassBSD-3-Clause
Updating Android SDKflutter/flutter179k—~1.7kAutomated safety check: PassBSD-3-Clause
flutter_soloud Setupalnitak/flutter_soloud424—~3.6kAutomated safety check: NotesMIT
Gui Testlibnativeapi/nativeapi161—~3.5kAutomated safety check: PassMIT
Fkit SetupJoker-x-dev/FlutterKit127—~720Automated safety check: PassMIT

Similar skills

  • Engine Whats New

    flutter/flutter

    Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).

    179k GitHub stars~978 tokensUpdated today
    MobileAuto-check passed
  • Updating Android SDK

    flutter/flutter

    Upgrades Flutter's Android SDK dependency to a new Android API version (or preview/canary release) in packages.txt, verifies CIPD tag uniqueness, and packages/uploads the binaries using…

    179k GitHub stars~1.7k tokensUpdated today
    MobileAuto-check passed
  • flutter_soloud Setup

    alnitak/flutter_soloud

    Walks through adding the flutter_soloud audio engine to a Flutter app, with per-platform setup, initialization, binary-size and logging options, and output device switching.

    424 GitHub stars~3.6k tokensUpdated yesterday
    MobileAuto-check: notes
  • Gui Test

    libnativeapi/nativeapi

    End-to-end test a desktop app (Flutter desktop apps and plain native executables such as C++ examples) by launching the real app, driving it with guarded synthetic mouse input — eased moves, clicks…

    161 GitHub stars~3.5k tokensUpdated today
    MobileAuto-check passed
  • Fkit Setup

    Joker-x-dev/FlutterKit

    将 FlutterKit 脚手架初始化为新的应用项目,统一修改应用显示名称、Dart 包名、Android Application ID、Apple Bundle ID、Linux/Windows 标识、Web 名称、运行时品牌文案、Logo、桌面图标和启动页。用户拉取模板后要求改名、改包名、替换品牌资源或完成首次项目配置时使用。

    127 GitHub stars~720 tokensUpdated 2 mo ago
    MobileAuto-check passed
  • Upgrade Browser

    flutter/flutter

    Upgrade browser versions (Chrome or Firefox) in the Flutter Web Engine and/or Framework tests.

    179k GitHub stars~1.1k tokensUpdated today
    MobileAuto-check passed

More from FNOSP/FlyNarwhal

All 8 skills in this repo
  • GitHub Actions Creator

    FNOSP/FlyNarwhal

    A skill your agent uses when the user wants to create, generate, or set up a GitHub Actions workflow.

    495 GitHub starsUsed in 1 repo~2.4k tokens
    Auto-check passed
  • Automate GitHub workflows with AI assistance. An agent skill from FNOSP/FlyNarwhal.

    495 GitHub starsUsed in 8 repos~5.4k tokens
    Auto-check passed
  • Flutter Tester

    FNOSP/FlyNarwhal

    A skill your agent uses when creating, writing, fixing, or reviewing tests in a Flutter project.

    495 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Flutter Expert

    FNOSP/FlyNarwhal

    A skill your agent uses when building cross-platform applications with Flutter 3+ and Dart.

    495 GitHub starsUsed in 2 repos~758 tokens
    Auto-check passed
  • Release Publishing

    FNOSP/FlyNarwhal

    A skill your agent uses when publishing a new release of FlyNarwhal desktop.

    495 GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • Remote API Development

    FNOSP/FlyNarwhal

    A skill your agent uses when adding, modifying, or refactoring any remote/HTTP API call in this Flutter project.

    495 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Native Desktop UI Testing

What does Native Desktop UI Testing do?

Run and verify Flutter desktop behavior on Windows/macOS/Linux native clients. Native Desktop UI Testing is an agent skill from FNOSP/FlyNarwhal. Run and verify Flutter desktop behavior on Windows/macOS/Linux native clients.

When should I use Native Desktop UI Testing?

Native Desktop UI Testing fits situations like: tasks that involve Cross-platform mobile apps; tasks that involve UX design.

How do I install Native Desktop UI Testing in Claude Code?

Run `npx skills add FNOSP/FlyNarwhal --skill native-desktop-ui-testing -a claude-code`. Or copy the skill folder (.agents/skills/native-desktop-ui-testing in FNOSP/FlyNarwhal) into .claude/skills/native-desktop-ui-testing in your project. Claude Code loads it when a task matches its description.

How do I install Native Desktop UI Testing in Codex?

Run `npx skills add FNOSP/FlyNarwhal --skill native-desktop-ui-testing -a codex`. Or copy the skill folder (.agents/skills/native-desktop-ui-testing in FNOSP/FlyNarwhal) into .agents/skills/native-desktop-ui-testing in your project. Codex loads it when a task matches its description.

Can I use Native Desktop UI Testing in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add FNOSP/FlyNarwhal --skill native-desktop-ui-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/native-desktop-ui-testing, .gemini/skills/native-desktop-ui-testing, .github/skills/native-desktop-ui-testing and .opencode/skills/native-desktop-ui-testing in your project.

What does Native Desktop UI Testing need to run?

SKILL.md names no scripts, command-line tools or credentials: Native Desktop UI Testing is instructions for the agent only.

Does Native Desktop UI Testing access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Native Desktop UI Testing safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Native Desktop UI Testing use?

Native Desktop UI Testing is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Native Desktop UI Testing use?

About 2.4k tokens (SKILL.md is roughly 9.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Native Desktop UI Testing?

Skills that share tags, products or a category with Native Desktop UI Testing: Engine Whats New (flutter/flutter, 179k stars), Updating Android SDK (flutter/flutter, 179k stars), flutter_soloud Setup (alnitak/flutter_soloud, 424 stars) and Gui Test (libnativeapi/nativeapi, 161 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Native Desktop UI Testing?

FNOSP (a GitHub organization) maintains it in FNOSP/FlyNarwhal, which has 495 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 6, 2026.

Source: FNOSP/FlyNarwhal on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.