Agent skill

Gui

by svd-ai-lab in svd-ai-lab/sim-cli

Cross-driver GUI actuation for CAE solvers running under sim-cli.

Apache-2.0Auto-check passedResearch & Science

Install Gui

skills CLI
$ npx skills add svd-ai-lab/sim-cli --skill gui -a claude-code

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

GitHub CLI
$ gh skill install svd-ai-lab/sim-cli gui --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/svd-ai-lab/sim-cli.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src/sim/_skills/sim-cli/gui .claude/skills/gui && 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
gui
GitHub stars
231
Token cost
~2.2k tokens
SKILL.md length
864 words
Files
2
Skills in repo
2
Repo updated
First seen
Licence
Apache-2.0

At a glance

Cross-driver GUI actuation for CAE solvers running under sim-cli.

  • Works in 3 steps: A blocking dialog is wedging the… → You need to drive the GUI where the SDK… → You need a per-window screenshot. sim…
  • Dismiss dialogs
  • SKILL.md covers When to reach for gui, Remote equivalence, API and Typical patterns, plus 3 more sections
  • Runs Python scripts from its folder

What it does

Gui is an agent skill from svd-ai-lab/sim-cli. Cross-driver GUI actuation for CAE solvers running under sim-cli. Use to click buttons, fill fields, dismiss dialogs, and capture window screenshots against GUI-capable driver windows through sim exec.

Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `snippets/dismiss_named_dialog.py`).

It sits in Research & Science, covering Physical and earth sciences. The repository describes itself as: Turn existing CAE files into structured text an agent can use — COMSOL, Abaqus, Fluent, HFSS, Icepak, FloTHERM — plus solver detection, script linting, and live solver sessions… The licence is Apache-2.0.

When your agent uses it

  • Dismiss dialogs
  • Capture window screenshots against GUI-capable driver windows through sim exec

Example prompts

  • “/gui”

Requirements

  • Python 3

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. A blocking dialog is wedging the workflow. A login prompt,
  2. You need to drive the GUI where the SDK can't. Some workflows
  3. You need a per-window screenshot. sim screenshot captures the

What it can do on your machine

Read from SKILL.md and the folder at commit b7318cc. 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 script files (Python), which the agent can run.

    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

Gui loads about 2.2k tokens when it runs. Until then it costs about 52 tokens; SKILL.md has 864 words of instructions outside code blocks.

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

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 svd-ai-lab/sim-cli at commit b7318cc, republished under its Apache-2.0 licence (© svd-ai-lab). 864 words, ~2,228 tokens.

Download SKILL.mdSave it as .claude/skills/gui/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
gui
description
Cross-driver GUI actuation for CAE solvers running under sim-cli. Use to click buttons, fill fields, dismiss dialogs, and capture window screenshots against GUI-capable driver windows through `sim exec`.
type
tool

gui — cross-driver GUI actuation

Whenever the active driver runs with ui_mode=gui (or desktop), sim serve injects a gui object into your sim exec namespace alongside session / solver / meshing / model. The object is the same shape across solvers — only the process filter differs — so one skill serves every GUI-capable driver.

/connect advertises it:

json
{
  "ok": true,
  "data": {
    "...": "...",
    "tools": ["gui"],
    "tool_refs": {"gui": "sim-cli/_skills/sim-cli/gui/SKILL.md"}
  }
}

If tools doesn't contain "gui", the driver launched headless and the object is absent — don't call it.

When to reach for gui

Three scenarios dominate:

  1. A blocking dialog is wedging the workflow. A login prompt, overwrite confirmation, or script-error dialog can pause agent work until someone clicks a button — that someone is you, via gui.
  2. You need to drive the GUI where the SDK can't. Some workflows expose a UI-only surface that the driver API does not cover.
  3. You need a per-window screenshot. sim screenshot captures the whole desktop. SimWindow.screenshot() captures just the window you care about — cheaper to read, less visual clutter for the LLM.

If the SDK has a programmatic path (session.tui.*, model.solve(), ModelUtil.loadCopy()), prefer that. gui is for the UI-only surface that the SDK doesn't cover.

Remote equivalence

gui is in the session namespace on the sim serve side. You talk to it via the existing /exec HTTP channel:

bash
# local Windows box
sim exec "dlg = gui.find('Login'); dlg.click('OK')"

# Windows box on the LAN / Tailscale
sim --host 10.0.x.y exec "dlg = gui.find('Login'); dlg.click('OK')"

No new endpoint, no new protocol — the same API shape from anywhere the agent runs.

Requirement on the server host: sim serve must run in a real interactive desktop session (normal login or RDP). Windows service / SSH session 0 has no desktop, so pywinauto can't enumerate any windows even though the solver processes are running. This is the same constraint GUI-capable drivers document.

API

Discover what the controller is looking at
python
gui.available          # True iff pywinauto can run — check before driving anything
gui.process_filter     # tuple of process-name substrings this gui will target
gui.list_windows()     # {ok, windows: [{hwnd, pid, proc, title, rect}, ...]}
Find a window (polled until timeout)
python
dlg = gui.find(title_contains="Login", timeout_s=5)
# returns a SimWindow, or None on timeout

title_contains is a plain substring match (case-sensitive, any language). Returns None if nothing matched — always check before calling methods on it:

python
dlg = gui.find("连接到")
if dlg is None:
    _result = {"ok": False, "error": "login dialog not visible"}
else:
    dlg.click("确定")
Act on a window

Every action returns {ok: bool, ...}. No exceptions unless you pass invalid Python types — surface ok=False + error to the agent.

python
dlg.click("OK", timeout_s=5)             # click a button by accessible name
dlg.send_text("alice", into="Username")  # type into a named Edit field
dlg.send_text("/tmp/out.cas.h5")         # without `into` → first editable
dlg.close()                              # WM_CLOSE (Alt+F4 equivalent)
dlg.activate()                           # bring to foreground
dlg.screenshot(label="after_login")      # window-only PNG under workdir

Each action method tries the most natural pywinauto strategy first (button_by_title) and falls back to a broader match (any_control_by_title) before giving up — the response tells you which path worked via the strategy field.

Full UIA dump

Expensive but sometimes necessary for reasoning about an unfamiliar GUI:

python
state = gui.snapshot(max_depth=3)
# {ok, windows: [{hwnd, pid, proc, title,
#                  controls: [{name, control_type, handle, children?}, ...]}]}

Use this when find(title) misses and you need to see what the GUI actually exposes.

Handle metadata

SimWindow fields you can read without another round-trip:

python
dlg.hwnd     # int
dlg.pid      # int
dlg.proc     # str, process name
dlg.title    # current window title
dlg.as_dict() # {hwnd, pid, proc, title, rect}

Typical patterns

Pattern 1 — dismiss a blocking login dialog
python
dlg = gui.find(title_contains="Login", timeout_s=5)
if dlg:
    dlg.send_text("alice", into="Username")
    dlg.send_text("secret", into="Password")
    dlg.click("OK")
_result = {"dismissed": dlg is not None}
Pattern 2 — confirm a "file exists, overwrite?" dialog
python
dlg = gui.find(title_contains="Question", timeout_s=3)
if dlg is None:
    dlg = gui.find(title_contains="overwrite", timeout_s=3)  # other
if dlg:
    dlg.click("OK")
_result = {"confirmed": dlg is not None, "title": dlg.title if dlg else None}
Pattern 3 — walk the solver UI tree to find an unexpected control
python
state = gui.snapshot(max_depth=4)
names = []
def walk(items):
    for c in items:
        if c.get("name"):
            names.append((c["control_type"], c["name"]))
        walk(c.get("children") or [])
for w in state["windows"]:
    walk(w.get("controls") or [])
_result = {"control_names": names[:50]}
Pattern 4 — capture only the solver window for the agent to read
python
dlg = gui.find(title_contains="Main", timeout_s=3)
if dlg:
    shot = dlg.screenshot(label="after_solve")
    _result = shot  # contains {ok, path, width, height}
else:
    _result = {"ok": False, "error": "main window not found"}
Show full SKILL.md (424 more words)Show less

Error handling

Every call returns a dict; failures look like {"ok": False, "error": "connect(handle=...) failed: ..."}. The UIA machinery runs in an isolated subprocess so a COM glitch in one call never poisons the next.

Things that commonly make ok false:

SymptomLikely causeWhat to do
find returns Nonetitle didn't match / process filter too strictprint gui.list_windows() to see what is live
click says no control titled ... in hwnd=...the button label in the UI is not what you thinksnapshot the window, read controls[*].name
screenshot returns minimal PNGwindow is minimized (pywinauto captures the window rect; min'd windows live at (-32000, -32000, …))dlg.activate() first, then screenshot
gui.available is Falseoff-Windows host, or pywinauto not installeddon't use gui — fall back to SDK-only path
list_windows() returns [] even though the solver clearly launchedsim serve was started from an SSH / non-interactive Windows session — the GUI exists in a session with no display surface and pywinauto can't see itask the operator to restart sim serve from a desktop session (RDP, Windows Terminal, or Task Scheduler with "run only when user is logged on" + interactive). See ../SKILL.md → "Where sim serve runs". Do not retry.
screenshot returns a uniformly black PNGsame as above — non-interactive session has no compositorsame fix

Pitfalls

  • Don't guess button labels. Windows localisation is real. Use gui.snapshot() to confirm the actual accessible name before calling click(name).
  • Don't assume single window. Some solvers open extra floating panels. find(title) returns the first match; if the workflow is ambiguous, use list_windows() and pick by pid.
  • Don't rely on gui for SDK-shaped work. Solver objects (session, model) are always faster and more reliable than UI clicks. gui is the fallback for the UI-only surface.
  • Remote servers need a real desktop. If sim serve runs from an SSH session, a Windows service, or any non-interactive context, the spawned solver process inherits a session with no display surface. pywinauto then finds zero windows, screenshots come back uniformly black, and find(...) silently times out — the server itself is up and reachable, only the GUI half is dead. Restart sim serve from a desktop session (Windows Terminal on the console, RDP, or Task Scheduler with "run only when user is logged on" + interactive). See ../SKILL.md → "Where sim serve runs" for the full driver-by-driver matrix.
  • Plugin-specific skills list the dialogs that a given driver is known to pop. Check those for recipes before inventing your own.
  • sim.inspect probes (issue #8a window_observed, #8b screenshots) tell you what is on screen — read them first, then reach for gui to act.

© svd-ai-lab, Apache-2.0. 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 in src/sim/_skills/sim-cli/gui of svd-ai-lab/sim-cli.

  • SKILL.md
  • snippets/dismiss_named_dialog.py

Open the folder on GitHubat commit b7318cc

Compare with similar skills

Gui 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.

Gui compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Gui this skillsvd-ai-lab/sim-cli231—~2.2kAutomated safety check: PassApache-2.0
Cantera Ignition DelayK-Dense-AI/scientific-agent-skills48k2 repos~2.2kAutomated safety check: PassMIT
AstropyzLanqing/codex-claude-academic-skills4.6k14 repos~2.9kAutomated safety check: PassBSD-3-Clause
PymatgenzLanqing/codex-claude-academic-skills4.6k12 repos~5kAutomated safety check: PassMIT
Weathertrpc-group/trpc-agent-go1.8k9 repos~591Automated safety check: PassApache-2.0
Pymol VisualizationChatMol/ChatMol372—~1.2kAutomated safety check: PassMIT

Similar skills

  • Cantera Ignition Delay

    K-Dense-AI/scientific-agent-skills

    Runs Cantera constant-volume or constant-pressure ignition simulations and reports temperature-based ignition delay with mechanism provenance and checks.

    48k GitHub starsUsed in 2 repos~2.2k tokens
    Research & ScienceAuto-check passed
  • Astropy

    zLanqing/codex-claude-academic-skills

    Comprehensive Python library for astronomy and astrophysics.

    4.6k GitHub starsUsed in 14 repos~2.9k tokens
    Research & ScienceAuto-check passed
  • Pymatgen

    zLanqing/codex-claude-academic-skills

    Materials science toolkit. An agent skill from zLanqing/codex-claude-academic-skills.

    4.6k GitHub starsUsed in 12 repos~5k tokens
    Research & ScienceAuto-check passed
  • Weather

    trpc-group/trpc-agent-go

    Get current weather and forecasts via wttr.in or Open-Meteo.

    1.8k GitHub starsUsed in 9 repos~591 tokens
    Research & ScienceAuto-check passed
  • Pymol Visualization

    ChatMol/ChatMol

    Generate publication-quality molecular visualization images using PyMOL.

    372 GitHub stars~1.2k tokensUpdated 6 mo ago
    Research & ScienceAuto-check passed
  • Review

    Muuuun/luxas

    Write domain-authentic review articles that synthesize rather than stack.

    1.2k GitHub stars~2.1k tokensUpdated 1 mo ago
    Research & ScienceAuto-check passed

More from svd-ai-lab/sim-cli

  • Sim CLI

    svd-ai-lab/sim-cli

    Cross-solver operating discipline for sim-cli workflows — tool choice, input classification, acceptance semantics, and escalation rules that apply across solvers.

    231 GitHub stars~2.1k tokensUpdated 1 mo ago
    Auto-check passed

Questions about Gui

What does Gui do?

Cross-driver GUI actuation for CAE solvers running under sim-cli. Gui is an agent skill from svd-ai-lab/sim-cli. Cross-driver GUI actuation for CAE solvers running under sim-cli.

When should I use Gui?

Gui fits situations like: dismiss dialogs; capture window screenshots against GUI-capable driver windows through sim exec.

How do I install Gui in Claude Code?

Run `npx skills add svd-ai-lab/sim-cli --skill gui -a claude-code`. Or copy the skill folder (src/sim/_skills/sim-cli/gui in svd-ai-lab/sim-cli) into .claude/skills/gui in your project. Claude Code loads it when a task matches its description.

How do I install Gui in Codex?

Run `npx skills add svd-ai-lab/sim-cli --skill gui -a codex`. Or copy the skill folder (src/sim/_skills/sim-cli/gui in svd-ai-lab/sim-cli) into .agents/skills/gui in your project. Codex loads it when a task matches its description.

Can I use Gui 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 svd-ai-lab/sim-cli --skill gui -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/gui, .gemini/skills/gui, .github/skills/gui and .opencode/skills/gui in your project.

What does Gui need to run?

Going by SKILL.md and its folder, Gui needs Python for the scripts in its folder. Our summary lists: Python 3.

Does Gui 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 Gui 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 Gui use?

Gui is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Gui use?

About 2.2k tokens (SKILL.md is roughly 8.9k 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 Gui?

Skills that share tags, products or a category with Gui: Cantera Ignition Delay (K-Dense-AI/scientific-agent-skills, 48k stars), Astropy (zLanqing/codex-claude-academic-skills, 4.6k stars), Pymatgen (zLanqing/codex-claude-academic-skills, 4.6k stars) and Weather (trpc-group/trpc-agent-go, 1.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Gui?

svd-ai-lab (a GitHub organization) maintains it in svd-ai-lab/sim-cli, which has 231 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on September 8, 2026.

Source: svd-ai-lab/sim-cli on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.