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.
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…
$ npx skills add libnativeapi/nativeapi --skill flutter-ui-probe -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install libnativeapi/nativeapi flutter-ui-probe --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "flutter-ui-probe" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/flutter-ui-probe into .claude/skills/flutter-ui-probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flutter-ui-probe", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/flutter-ui-probeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add libnativeapi/nativeapi --skill flutter-ui-probe -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install libnativeapi/nativeapi flutter-ui-probe --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/libnativeapi/nativeapi.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/flutter-ui-probe .agents/skills/flutter-ui-probe && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "flutter-ui-probe" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/flutter-ui-probe into .agents/skills/flutter-ui-probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flutter-ui-probe", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add libnativeapi/nativeapi --skill flutter-ui-probe -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install libnativeapi/nativeapi flutter-ui-probe --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/libnativeapi/nativeapi.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/flutter-ui-probe .cursor/skills/flutter-ui-probe && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "flutter-ui-probe" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/flutter-ui-probe into .cursor/skills/flutter-ui-probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flutter-ui-probe", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/libnativeapi/nativeapi.git --path .agents/skills/flutter-ui-probe--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add libnativeapi/nativeapi --skill flutter-ui-probe -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install libnativeapi/nativeapi flutter-ui-probe --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/libnativeapi/nativeapi.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/flutter-ui-probe .gemini/skills/flutter-ui-probe && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "flutter-ui-probe" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/flutter-ui-probe into .gemini/skills/flutter-ui-probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flutter-ui-probe", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install libnativeapi/nativeapi flutter-ui-probeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add libnativeapi/nativeapi --skill flutter-ui-probe -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/libnativeapi/nativeapi.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/flutter-ui-probe .github/skills/flutter-ui-probe && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "flutter-ui-probe" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/flutter-ui-probe into .github/skills/flutter-ui-probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flutter-ui-probe", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add libnativeapi/nativeapi --skill flutter-ui-probe -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install libnativeapi/nativeapi flutter-ui-probe --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/libnativeapi/nativeapi.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/flutter-ui-probe .opencode/skills/flutter-ui-probe && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "flutter-ui-probe" agent skill from https://github.com/libnativeapi/nativeapi/tree/main/.agents/skills/flutter-ui-probe into .opencode/skills/flutter-ui-probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "flutter-ui-probe", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
flutter-ui-probeFind 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. 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.
Read from SKILL.md and the folder at commit e0ca21a. It shows what the files ask for, not the result of running them.
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.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
flutterFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from libnativeapi/nativeapi at commit e0ca21a, republished under its MIT licence (© libnativeapi). 423 words, ~988 tokens.
.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.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).
flutter build <os> --debug, or flutter run). Profile
and release builds have no debugDumpRenderTree.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).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 missingimport 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).
A view rect is relative to the window's content area, in logical pixels:
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.screen = client origin + point × (dpi / 96) — physical pixels.gui-test's helpers (to_screen / ToScreen) do this for you.
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.find/center return the first; filter view.texts yourself when it
matters (e.g. y < 40 for "the one in the tab strip").view.size).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.© libnativeapi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (scripts) in .agents/skills/flutter-ui-probe of libnativeapi/nativeapi.
Open the folder on GitHubat commit e0ca21a
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Flutter UI Probe this skilllibnativeapi/nativeapi | 157 | — | ~988 | Automated safety check: Pass | MIT | |
| OdevioOdevio/Odevio-CLI | 423 | — | ~7.6k | Automated safety check: Pass | MIT | |
| flutter_soloud Setupalnitak/flutter_soloud | 424 | — | ~3.6k | Automated safety check: Notes | MIT | |
| Verifygrowerp/growerp | 115 | — | ~491 | Automated safety check: Pass | Apache-2.0 | |
| Fkit SetupJoker-x-dev/FlutterKit | 127 | — | ~720 | Automated safety check: Pass | MIT | |
| Create Verticalgrowerp/growerp | 115 | — | ~392 | Automated safety check: Pass | Apache-2.0 |
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.
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.
growerp/growerp
Build, run and screenshot the GrowERP admin Flutter app headless to verify UI changes at runtime.
Joker-x-dev/FlutterKit
将 FlutterKit 脚手架初始化为新的应用项目,统一修改应用显示名称、Dart 包名、Android Application ID、Apple Bundle ID、Linux/Windows 标识、Web 名称、运行时品牌文案、Logo、桌面图标和启动页。用户拉取模板后要求改名、改包名、替换品牌资源或完成首次项目配置时使用。
growerp/growerp
Create a new GrowERP vertical app or extend an existing one from building blocks.
FNOSP/FlyNarwhal
Run and verify Flutter desktop behavior on Windows/macOS/Linux native clients.
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…
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…
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…
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…
Categories
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.
Flutter UI Probe fits situations like: tasks that involve Cross-platform mobile apps.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.