Agent skill

Flutter UI Probe

by libnativeapi in libnativeapi/nativeapi

Find where widgets are on screen in a running debug Flutter desktop app (macOS, Windows, Linux) by reading its render tree through the VM service — no hard-coded coordinates, no screenshots, works…

MITAuto-check passedMobile

Install Flutter UI Probe

skills CLI
$ npx skills add libnativeapi/nativeapi --skill flutter-ui-probe -a claude-code

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

GitHub CLI
$ gh skill install libnativeapi/nativeapi flutter-ui-probe --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/libnativeapi/nativeapi.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/flutter-ui-probe .claude/skills/flutter-ui-probe && 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
flutter-ui-probe
GitHub stars
157
Token cost
~988 tokens
SKILL.md length
423 words
Files
2 (incl. scripts)
Skills in repo
5
Repo updated
First seen
Licence
MIT

At a glance

Find where widgets are on screen in a running debug Flutter desktop app (macOS, Windows, Linux) by reading its render tree through the VM service — no hard-coded coordinates, no screenshots, works…

  • Tasks that involve Cross-platform mobile apps
  • SKILL.md covers Requirements, Use, From view coordinates to the… and Things that will trip you up
  • Runs Python scripts from its folder; calls flutter

What it does

Flutter UI Probe is an agent skill from libnativeapi/nativeapi. Find where widgets are on screen in a running debug Flutter desktop app (macOS, Windows, Linux) by reading its render tree through the VM service — no hard-coded coordinates, no screenshots, works with multi-window (multi-view) apps. Use this whenever you need to know what a Flutter example is currently showing, check that a label/counter/state text is present after an action, or get the coordinates of a header, tab, or button before clicking or dragging it with synthetic input. Reach for it before guessing pixel…

Its SKILL.md is about 990 tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including scripts (for example `scripts/uiprobe.py`).

It sits in Mobile, covering Cross-platform mobile apps. It works with Flutter, macOS, Linux and Python. The repository describes itself as: Unified access to native system APIs (windows, tray icons, menus, displays, dialogs, …) for Dart/Flutter, Rust, C, JS/TS and Python, built on one C++ core. The licence is MIT.

When your agent uses it

  • Tasks that involve Cross-platform mobile apps

Example prompts

  • “/flutter-ui-probe”

Requirements

  • Python 3

What it can do on your machine

Read from SKILL.md and the folder at commit e0ca21a. 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

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • flutter

    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

Flutter UI Probe loads about 988 tokens when it runs. Until then it costs about 143 tokens; SKILL.md has 423 words of instructions outside code blocks.

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

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); the scripts in this folder are not scanned.

SKILL.md

The full file from libnativeapi/nativeapi at commit e0ca21a, republished under its MIT licence (© libnativeapi). 423 words, ~988 tokens.

Download SKILL.mdSave it as .claude/skills/flutter-ui-probe/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
flutter-ui-probe
description
Find where widgets are on screen in a running debug Flutter desktop app (macOS, Windows, Linux) by reading its render tree through the VM service — no hard-coded coordinates, no screenshots, works with multi-window (multi-view) apps. Use this whenever you need to know what a Flutter example is currently showing, check that a label/counter/state text is present after an action, or get the coordinates of a header, tab, or button before clicking or dragging it with synthetic input. Reach for it before guessing pixel positions or OCR-ing a screenshot.

flutter-ui-probe

scripts/uiprobe.py asks a debug Flutter app for ext.flutter.debugDumpRenderTree and turns it into, per view (= per window), a list of (text, (x, y, w, h)) rects in logical pixels relative to the view's top-left corner.

It is both the eyes of a GUI test ("is Clicks: 3 still there after the panel moved to another window?") and the way to aim synthetic input (see the gui-test skill).

Requirements

  • The app is a debug build (flutter build <os> --debug, or flutter run). Profile and release builds have no debugDumpRenderTree.
  • Its stdout goes to a file. The VM service URL (http://127.0.0.1:<port>/<token>=/) is read from that log, so launch it like ./app > app.log 2>&1 & (or Start-Process -RedirectStandardOutput).
  • Python 3, standard library only.

Use

bash
scripts/uiprobe.py app.log            # JSON, for scripts
scripts/uiprobe.py app.log --texts    # readable, for you
scripts/uiprobe.py app.log --dump     # raw render tree, when a text is missing
python
import sys; sys.path.insert(0, '<this skill>/scripts')
from uiprobe import App
views = App('app.log').views()
view = next(v for v in views if v.has('Settings'))   # identify a window by a text it shows
x, y = view.center('Save')                            # view-local logical pixels
view.find('Like', prefix=True)                        # rect of the first text starting with…

Until the app has printed its VM service URL, the CLI prints {"error": …} and App.vm_url() returns None — poll until it appears (a cold debug start takes a few seconds; allow 30–40 s on a slow Windows machine).

From view coordinates to the screen

A view rect is relative to the window's content area, in logical pixels:

  • macOS: screen = window frame origin + (frame height − view height) + point — the content sits at the bottom of the frame, below the title bar; points are logical already.
  • Windows: screen = client origin + point × (dpi / 96) — physical pixels.

gui-test's helpers (to_screen / ToScreen) do this for you.

Show full SKILL.md (203 more words)Show less

Things that will trip you up

  • View identity is stable, window order is not. View.name (RenderView#6c9d9) keeps its value while the window lives, so remember names, not list indexes, across probes. New windows show up as new names.
  • Re-probe after every action that changes layout. Rects are a snapshot; after a tear-off, a dock, or a tab move the old coordinates are wrong, and sometimes the text now lives in a different view.
  • The same text can occur more than once (a tab title in the strip and as the page heading). find/center return the first; filter view.texts yourself when it matters (e.g. y < 40 for "the one in the tab strip").
  • Only text is reported. To hit an icon or an empty drop zone, aim relative to a nearby text or use a fraction of the view size (view.size).
  • Offsets come from parentData (offset= / layoutOffset=). Scroll offsets and transforms are not applied: text inside a scrolled list or a Transform is reported at its unscrolled position. Prefer targets outside scrollables, and check with --dump when a number looks off.
  • The parser was written against the Flutter main-channel multi-window API (several render views in one isolate). It also works for a single-view app.

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

Files

SKILL.md and 1 other file (scripts) in .agents/skills/flutter-ui-probe of libnativeapi/nativeapi.

  • SKILL.md
  • scripts/uiprobe.py

Open the folder on GitHubat commit e0ca21a

Compare with similar skills

Flutter UI Probe 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.

Flutter UI Probe compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Flutter UI Probe this skilllibnativeapi/nativeapi157—~988Automated safety check: PassMIT
OdevioOdevio/Odevio-CLI423—~7.6kAutomated safety check: PassMIT
flutter_soloud Setupalnitak/flutter_soloud424—~3.6kAutomated safety check: NotesMIT
Verifygrowerp/growerp115—~491Automated safety check: PassApache-2.0
Fkit SetupJoker-x-dev/FlutterKit127—~720Automated safety check: PassMIT
Create Verticalgrowerp/growerp115—~392Automated safety check: PassApache-2.0

Similar skills

  • Odevio

    Odevio/Odevio-CLI

    Take a Flutter project to an iPhone or the App Store with Odevio - build, sign and publish iOS apps from Windows, Linux or macOS with no Mac and no Xcode.

    423 GitHub stars~7.6k tokensUpdated 13 days ago
    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
  • Verify

    growerp/growerp

    Build, run and screenshot the GrowERP admin Flutter app headless to verify UI changes at runtime.

    115 GitHub stars~491 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
  • Create Vertical

    growerp/growerp

    Create a new GrowERP vertical app or extend an existing one from building blocks.

    115 GitHub stars~392 tokensUpdated today
    MobileAuto-check passed
  • Run and verify Flutter desktop behavior on Windows/macOS/Linux native clients.

    495 GitHub stars~2.4k tokensUpdated yesterday
    MobileAuto-check passed

More from libnativeapi/nativeapi

  • Remote Hosts

    libnativeapi/nativeapi

    Build, run, and GUI-test on another machine over SSH — the user's Windows laptop today, Linux or other macOS machines tomorrow — with one symmetric CLI for every OS: push scripts, run them either in…

    157 GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • Record Demo

    libnativeapi/nativeapi

    Record a demo video of a desktop app — launch it, play a scripted scenario with smooth synthetic mouse input, and capture the screen (cursor and click highlights included) straight to an…

    157 GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • 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…

    157 GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • Core API Change

    libnativeapi/nativeapi

    Carry a change to the C++ public API in core/ all the way downstream — design check, header edit, six platform implementations, C ABI + Rust/Dart/C/JS/Python regeneration, per-binding verification…

    157 GitHub stars~2.5k tokensUpdated today
    Auto-check passed

Categories

Questions about Flutter UI Probe

What does Flutter UI Probe do?

Find where widgets are on screen in a running debug Flutter desktop app (macOS, Windows, Linux) by reading its render tree through the VM service — no hard-coded coordinates, no screenshots, works…. Flutter UI Probe is an agent skill from libnativeapi/nativeapi. Find where widgets are on screen in a running debug Flutter desktop app (macOS, Windows, Linux) by reading its render tree through the VM service — no hard-coded coordinates, no screenshots, works with multi-window (multi-view) apps.

When should I use Flutter UI Probe?

Flutter UI Probe fits situations like: tasks that involve Cross-platform mobile apps.

How do I install Flutter UI Probe in Claude Code?

Run `npx skills add libnativeapi/nativeapi --skill flutter-ui-probe -a claude-code`. Or copy the skill folder (.agents/skills/flutter-ui-probe in libnativeapi/nativeapi) into .claude/skills/flutter-ui-probe in your project. Claude Code loads it when a task matches its description.

How do I install Flutter UI Probe in Codex?

Run `npx skills add libnativeapi/nativeapi --skill flutter-ui-probe -a codex`. Or copy the skill folder (.agents/skills/flutter-ui-probe in libnativeapi/nativeapi) into .agents/skills/flutter-ui-probe in your project. Codex loads it when a task matches its description.

Can I use Flutter UI Probe 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 libnativeapi/nativeapi --skill flutter-ui-probe -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/flutter-ui-probe, .gemini/skills/flutter-ui-probe, .github/skills/flutter-ui-probe and .opencode/skills/flutter-ui-probe in your project.

What does Flutter UI Probe need to run?

Going by SKILL.md and its folder, Flutter UI Probe needs Python for the scripts in its folder and the command-line tools its instructions call (flutter). Our summary lists: Python 3.

Does Flutter UI Probe 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 Flutter UI Probe 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Flutter UI Probe use?

Flutter UI Probe is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Flutter UI Probe use?

About 988 tokens (SKILL.md is roughly 4k 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 Flutter UI Probe?

Skills that share tags, products or a category with Flutter UI Probe: Odevio (Odevio/Odevio-CLI, 423 stars), flutter_soloud Setup (alnitak/flutter_soloud, 424 stars), Verify (growerp/growerp, 115 stars) and Fkit Setup (Joker-x-dev/FlutterKit, 127 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Flutter UI Probe?

libnativeapi (a GitHub organization) maintains it in libnativeapi/nativeapi, which has 157 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 7, 2026.

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