Agent skill

Debug UI Interactions

by LunCoSim in LunCoSim/lunco-sim

Reproduce and verify LunCoSim desktop UI workflows as a user would perform them, including native key chords, pointer picking, scene selection, HUI actions, route editing, and camera controls.

Apache-2.0Auto-check passed

Install Debug UI Interactions

skills CLI
$ npx skills add LunCoSim/lunco-sim --skill debug-ui-interactions -a claude-code

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

GitHub CLI
$ gh skill install LunCoSim/lunco-sim debug-ui-interactions --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/LunCoSim/lunco-sim.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/debug-ui-interactions .claude/skills/debug-ui-interactions && 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
debug-ui-interactions
GitHub stars
105
Token cost
~3.9k tokens
SKILL.md length
2,111 words
Files
1
Skills in repo
38
Repo updated
First seen
Licence
Apache-2.0

At a glance

Reproduce and verify LunCoSim desktop UI workflows as a user would perform them, including native key chords, pointer picking, scene selection, HUI actions, route editing, and camera controls.

  • SKILL.md covers Read first, Use the real application input…, Verify each observable boundary and HUI boundary, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Debug UI Interactions is an agent skill from LunCoSim/lunco-sim. Reproduce and verify LunCoSim desktop UI workflows as a user would perform them, including native key chords, pointer picking, scene selection, HUI actions, route editing, and camera controls. Use this for headful UI bugs; use test-via-api for headless or command-only verification.

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

The repository describes itself as: Collaborative Multiphysics Cosimulator For Space Missions 🌎🚀🌚. The licence is Apache-2.0.

Example prompts

  • “/debug-ui-interactions”

What it can do on your machine

Read from SKILL.md and the folder at commit d1c6f00. 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 (its code samples are rhai).

    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

Debug UI Interactions loads about 3.9k tokens when it runs. Until then it costs about 76 tokens; SKILL.md has 2,111 words of instructions outside code blocks.

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

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 LunCoSim/lunco-sim at commit d1c6f00, republished under its Apache-2.0 licence (© LunCoSim). 2,111 words, ~3,884 tokens.

Download SKILL.mdSave it as .claude/skills/debug-ui-interactions/SKILL.md (or your agent's skills folder).
name
debug-ui-interactions
description
Reproduce and verify LunCoSim desktop UI workflows as a user would perform them, including native key chords, pointer picking, scene selection, HUI actions, route editing, and camera controls. Use this for headful UI bugs; use test-via-api for headless or command-only verification.

Debug native UI interactions

Read first

Read skills/test-via-api/SKILL.md for the production-runtime lifecycle and docs/architecture/rhai-integration.md for the typed input boundary. Use skills/coordinate-frames/SKILL.md when a screen hit, world position, camera frame, terrain point, or BigSpace grid is part of the failure.

Use the real application input path

Build or resolve the production binary as LUNCOSIM_BIN, launch exactly one windowed luncosim process with an explicit free API port, and wait for /api/ready before injecting input. The InjectWindowInput command and prelude/input.rhai helpers enqueue typed Bevy window events and exercise the application event path after event creation. They bypass the OS device, compositor, and winit event-delivery path, so they cannot verify that a physical mouse reaches the app. egui, HUI, picking, focus, input bindings, and authored Rhai tools process the injected Bevy events. Injected events do not mutate the native window cursor. Bevy Picking's PointerLocation is the shared application cursor state; cursor-driven consumers such as the transform gizmo read it through PrimaryMousePointer in lunco-interaction-core.

For a modifier gesture, use separate event phases and allow a frame between them when the result matters:

rhai
input_key_press("AltLeft");
input_pointer_move(x, y);
input_pointer_press("primary", x, y);
input_pointer_release("primary", x, y);
input_key_release("AltLeft");

Use KeyF for the default action binding only after checking the active input_bindings setting; authored tests should use the semantic binding or input_binding(...) rather than assuming a physical key. Use a secondary pointer event for context menus. Do not combine press and release events in one same-frame script step when testing focus, modifier state, or picking.

A route-point secondary click opens its authored context menu without changing scene selection. Selecting a point is separate from the Move route point action: select enables the generic gizmo, while Move selects its explicit point and arms click-to-place with a disposable ghost. That selected point remains the move target until placement or cancellation. Hover alone must not arm movement. The context gesture itself must not enable the transform gizmo. Ordinary clicks carry active_pointer_move { interaction_id, tool, hook, context } only for an interaction registered in their document. Placement consumes that context; an idle click must not discover armed tools or routes by traversing USD. The hover dispatcher scopes movement from the hit prim's document and carries the same-document selected/control paths as route context. The hit prim's registered LunCoPointerInteractionAPI must authorize that button as context; the generic viewport adapter applies its per-button blocking behavior before the ordered-hit pass, and route policy uses canonical hit paths rather than screen proximity. Picking can target a child collider or terrain LOD entity without UsdPrimPath; resolve the nearest ancestor prim before determining its document, as click routing does. The popup host registers the foreground menu rectangle with ScenePickGate as chrome, even when that rectangle lies inside the 3D viewport; menu clicks must not also start a gizmo drag. A semantic chord alone does not create a menu. Unarmed route-edit and selection clicks go through one scene_interaction Rhai policy; simulation possession accepts only an exclusive selection.replace intent. Spawn, terrain, attachment, and camera consumers are not yet under one captured gesture manager. The editor gizmo has a local captured lifecycle: a same-frame handle hit owns primary input through release or cancellation and suppresses preview pan for that gesture. A route fixture passing does not prove global viewport arbitration.

An authored pass-through hit can still emit its own Bevy pointer event. The shared scene dispatcher must stop that hit's ancestor propagation before de-duplicating the gesture, so a lower blocking or context target can receive it. Disposable scene previews that overlap interactive geometry must author pass-through behavior for the buttons they should not consume.

The retained Bevy UI backend shares the window target with scene picking. The Workbench's UI camera sorts above the scene, so unmarked Bevy UI nodes would block scene hits even when they are decorative. RuntimeUiPlugin requires UI pick markers and marks only visible authored press controls and draggable surface content as Pickable; keep that explicit target policy when adding UI nodes. Native pointer routing and tool dispatch run in the application input schedule before fixed simulation, so route context handling must not wait for a physics tick. Scene-pointer observers use the picked hit and viewport-aware chrome capture as the ownership decision. EguiFocus is published after picking and can still describe the old cursor location during the first event that leaves a menu; do not use that snapshot to reject a valid scene hit.

RunRhaiTool and RunRhaiToolHook callbacks use a bounded UI queue drained after picking in PreUpdate, before fixed simulation. Keep authored pointer and menu policy in those tool hooks rather than sending it through the general REPL queue or a fixed-tick scenario. Heavy synchronous work in an input hook would still occupy the application thread, so keep the hook bounded and move preparation or I/O to its owning asynchronous boundary. When a UI hook reads a collection of USD prims, request the member list once and use QueryUsdPrims for their needed attributes, schemas, or relationships; declare that provider in the caller's query_reads. Avoid per-member QueryUsdPrim loops in input policy because every read occupies the same application thread. Resolve a live USD entity with its owning document identity when several documents can mount the same authored path. Generic MoveEntity persistence resolves the write document from the moved entity's stage, not the active editor tab.

Scene Pointer<Move> and Pointer<Enter> observers may collect raw hits, but the viewport must dispatch movement only for a document with an active typed SetScenePointerMoveHook subscription. Supply a caller-owned interaction_id to both Set and Clear so stale cleanup cannot end a newer interaction. Coalesce the newest raw hit per pointer and picking frame. With no active subscriptions, drop samples before resolving scene identity; with subscriptions on other documents, perform the lightweight document lookup and drop the hit before coordinate conversion or terrain work. For an active interaction, a fallback terrain raycast runs at most once per pointer per picking frame; direct analytic surface hits do not need that fallback. Queue one typed hook after resolution. Clear the subscription when the interaction ends; document close, Twin close, and scene teardown own cleanup. Enter provides the first sample after a scene hit replaces a popup's previous-frame capture hit. Bevy can emit move events for both the pass-through preview and lower hits. Before deduplication, skip the preview event and stop its ancestor propagation; otherwise the preview can consume the cursor sample intended for terrain beneath it. Keep the hook presentation-only: update the live transform of the projected @view@ preview through the generic typed preview-transform command. It validates document and view-layer ownership and uses the canonical active-frame/parent-local conversion; hover must not edit the USD document, trigger projection, or sample a full terrain path. Route add and delete hooks send the accepted route-point snapshot to UpdateUsdCurveView; the presentation owner coalesces it and prepares sparse terrain-local strokes. The terrain shader paints them on its own fragments without changing USD generation. For a DEM route, require InspectUsdCurveView.projection = "terrain_surface", a positive surface_binding_count, and exactly one segment per authored leg; the separate mesh stays hidden. Right-click identity comes from a foreground terrain hit against the published stroke. Use route_surface_annotation.rhai through RunScenarioAsset for publication, long-path and missing-coverage evidence. Its positive fixture needs terrain covering a 40 m circle around the first waypoint and a connector 300 m away along positive X/Z. Pass its explicit view_owner scenario so the gate can isolate and restore that writer. The next primary click commits a moved route point through the canonical @runtime@ USD edit path, whose projected change updates the ribbon once. The route_interaction production gate verifies that Move selects and retains the target, the live ghost follows a coalesced injected terrain cursor trace, and document generation stays unchanged during preview. It sequences typed Bevy press/release events on separate task ticks and waits for observable state with the Rhai behavior tree. It does not verify OS, compositor, or winit input delivery; actual headful input remains a separate check. Do not use simulation-time sleeps or encode progression as numeric phase state. The repeatable production gate is assets/scenes/tests/editor/route_interaction/route_interaction.usda, run by scripts/run_editor_scene_tests.sh; it uses InjectWindowInput to send typed Bevy window events through picking and verifies the mounted fixture, waypoint hit, semantic context intent, unchanged pre-menu selection, live scene selection in the focused editor owner, explicit Move menu action, ghost placement, and deletion. This gate does not exercise physical OS mouse input. Bevy emits one click observer per entity in its previous hover map, whose iteration order is unspecified. The runtime scene router resolves from that same event-source map by hit depth and the authored policy for the actual button before it dispatches one scene event. The runner waits for /api/ready and requires the API Exit command and port release after every verdict.

Runtime-authored route edits belong in Twin @runtime@. Run scripts/run_scene_tests.sh --exact route_runtime_persistence to exercise a manifest-backed Twin through two production API sessions: add a point, verify the .lunco/runtime sidecar write, then reopen and require that the point is present before the scene's initial projection. This test is separate from the isolated editor fixture gate because the latter intentionally disables runtime-overlay I/O.

Coordinates are logical primary-window pixels. Obtain them from a current screenshot and record the window geometry used for the run. For an Editor USD preview, read InspectUsdViewport's measured image_rect and scale_factor to derive coordinates from the exact image area; keep authored fixture geometry and the screenshot in the test review. A coordinate is test input, not domain state: never use it to infer a USD position or replace the canonical BigSpace/frame conversion.

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

Verify each observable boundary

After a gesture, check the owning public surface instead of relying on the absence of a notification:

  • InspectSelection proves selection; QueryUsdPrim proves composed USD topology and authored relationships.
  • ScriptInspect or a focused Rhai query proves program state and event delivery; port(...), owner_of(...), and is_controlled(...) prove the generic control boundary.
  • CaptureScreenshot or an X11 window capture proves the visual result.
  • For route workflows, assert the authored point count/revision, marker or live ribbon publication, program_active, and a nonzero guidance output after selecting the rover and pressing the action binding. Add, move, context-menu delete, and undo/redo are separate assertions over the same canonical USD document; do not treat a spawned ECS entity as persistence proof.

For repeatable acceptance, put the assertions in assets/scenarios/tests/*.rhai and drive typed Bevy events from the scenario with RunScenarioAsset in the already-running production session. Keep each phase event-driven or bounded by a timeout, and emit one terminal authored verdict. This is a headful interaction test, not a Rust test and not a direct call to waypoint_editor.

HUI boundary

Runtime HUI is the native HTML-like surface documented by skills/runtime-ui/SKILL.md, not a browser DOM. Use the generic typed action surface and Rhai-authored labels/options. Do not add JavaScript, browser automation, or a Rust branch for a domain-specific button.

Display and workspace handling

When several agents run graphical sessions, use the same DISPLAY and Wayland/X11 environment as the agent shell. On X11, inspect xprop -root _NET_CURRENT_DESKTOP when diagnosing workspace placement. If the compositor does not expose that EWMH atom, there is no reliable workspace id the application can target; starting on the current display is the only portable best effort. Do not add application state or a fake workspace selector to compensate for a compositor capability that is not exposed.

Stop cleanly

Stop the session with the API Exit, then verify both the process and API port are gone before replacing your own session. Agents may use separate ports; never control another agent's session, use pkill, or reuse a port owned by another agent. A screenshot, command acknowledgement, or open TCP socket alone is not a completed UI test; hand off the exact runtime, input sequence, queries, screenshots, verdict, and any remaining compositor limit.

Telemetry catalog updates

Trace SignalDescriptorsChanged from lunco-signal to the persistent index in lunco-viz/src/telemetry_browser.rs. Samples, API owner association, and selection do not prepare descriptors. Channel admission, metadata, activity, removal, and changed owner label/path/parent facts enqueue affected identities. Rewriting unchanged facts must queue no work; comparison includes facts already captured by an in-flight worker. Each async batch captures and commits at most 64 descriptors; incoming changes must not restart unrelated work or hide the tree. Selection only updates focus membership and the visible-row index; cache inputs include selected entity identities and their current USD paths. Ancestor facts are retained only while indexed channels depend on them. Scene teardown cancels workers and clears the outgoing index with a newer presentation key.

Use InspectTelemetryCatalog through ExecuteCommand to compare initial_scans, prepared_channels, pending work, and capture/worker/commit costs before and after changes. The optional exact signal path returns descriptors for all owners. Run scripts/api/test_telemetry_catalog.py with an existing scene, measured entity id, real numeric source port, and free API port. It owns its windowed production session and invokes the authored Rhai verdict, including the missing-channel negative case; inspect its admission and settled screenshots and confirm its session closes.

© LunCoSim, 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

Just SKILL.md in skills/debug-ui-interactions of LunCoSim/lunco-sim.

Open the folder on GitHubat commit d1c6f00

Compare with similar skills

Debug UI Interactions 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.

Debug UI Interactions compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Debug UI Interactions this skillLunCoSim/lunco-sim105—~3.9kAutomated safety check: PassApache-2.0
Debugasgeirtj/system_prompts_leaks69k—~439Automated safety check: PassCC0-1.0
Openclaw Debuggingopenclaw/openclaw392k—~1.9kAutomated safety check: PassMIT
Debugging Executionsn8n-io/n8n207k—~2.6kAutomated safety check: PassCustom licence
Debugging Toolkitsickn33/agentic-awesome-skills47k1 repos~344Automated safety check: PassMIT
Runtime Debugvercel/next.js143k1 repos~618Automated safety check: PassMIT

Similar skills

  • Debug

    asgeirtj/system_prompts_leaks

    Enable debug logging for this session and help diagnose issues

    69k GitHub stars~439 tokensUpdated today
    Auto-check passed
  • Openclaw Debugging

    openclaw/openclaw

    Debug OpenClaw model, provider, tool-surface, code-mode, streaming, and live/Crabbox behavior by choosing the right logs, probes, and proof path before changing code, including fetching stored…

    392k GitHub stars~1.9k tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    Debug failed or wrong-output workflow executions using executions tools.

    207k GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Debugging Toolkit

    sickn33/agentic-awesome-skills

    A skill your agent uses when working with debugging toolkit smart debug (Alias for debugging-toolkit-smart-debug)

    47k GitHub starsUsed in 1 repo~344 tokens
    DevelopmentAuto-check passed
  • Runtime Debug

    vercel/next.js

    Official

    Debug and verification workflow for runtime-bundle and module-resolution regressions.

    143k GitHub starsUsed in 1 repo~618 tokens
    DevelopmentAuto-check passed
  • Debug

    codewhale-hq/Codewhale

    Reproduce, minimize, localize, identify root cause, and distinguish diagnosis from an authorized fix.

    41k GitHub stars~195 tokensUpdated today
    DevelopmentAuto-check passed

More from LunCoSim/lunco-sim

All 38 skills in this repo
  • Nightly Changelog

    LunCoSim/lunco-sim

    Generate concise LunCoSim nightly GitHub release notes with platform downloads, installation guidance, an AI-agent mission prompt, and a changelog link.

    105 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Build or repair a reusable scene component through a live LunCoSim Editor session.

    105 GitHub stars~4.4k tokensUpdated today
    Auto-check passed
  • Assembly Quality

    LunCoSim/lunco-sim

    Build or review a componentized LunCoSim USD assembly with a realistic, dimensionally checkable presentation.

    105 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Author Rhai Tests

    LunCoSim/lunco-sim

    Author and review LunCoSim behavioral, asset-backed, component, mission, visual, and requirements-verification tests.

    105 GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • Author Rhai Tool

    LunCoSim/lunco-sim

    Create, extend, register, or debug a reusable LunCoSim Rhai tool library for live USD authoring, component linting, inspection, or test support.

    105 GitHub stars~5.2k tokensUpdated today
    Auto-check passed
  • Author Tutorial

    LunCoSim/lunco-sim

    Author an interactive tutorial, guided lesson, onboarding flow, coach-mark tour, or objectives checklist in LunCoSim.

    105 GitHub stars~1.4k tokensUpdated today
    Auto-check passed

Questions about Debug UI Interactions

What does Debug UI Interactions do?

Reproduce and verify LunCoSim desktop UI workflows as a user would perform them, including native key chords, pointer picking, scene selection, HUI actions, route editing, and camera controls. Debug UI Interactions is an agent skill from LunCoSim/lunco-sim. Reproduce and verify LunCoSim desktop UI workflows as a user would perform them, including native key chords, pointer picking, scene selection, HUI actions, route editing, and camera controls.

How do I install Debug UI Interactions in Claude Code?

Run `npx skills add LunCoSim/lunco-sim --skill debug-ui-interactions -a claude-code`. Or copy the skill folder (skills/debug-ui-interactions in LunCoSim/lunco-sim) into .claude/skills/debug-ui-interactions in your project. Claude Code loads it when a task matches its description.

How do I install Debug UI Interactions in Codex?

Run `npx skills add LunCoSim/lunco-sim --skill debug-ui-interactions -a codex`. Or copy the skill folder (skills/debug-ui-interactions in LunCoSim/lunco-sim) into .agents/skills/debug-ui-interactions in your project. Codex loads it when a task matches its description.

Can I use Debug UI Interactions 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 LunCoSim/lunco-sim --skill debug-ui-interactions -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/debug-ui-interactions, .gemini/skills/debug-ui-interactions, .github/skills/debug-ui-interactions and .opencode/skills/debug-ui-interactions in your project.

What does Debug UI Interactions need to run?

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

Does Debug UI Interactions 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 Debug UI Interactions 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 Debug UI Interactions use?

Debug UI Interactions 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 Debug UI Interactions use?

About 3.9k tokens (SKILL.md is roughly 16k 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 Debug UI Interactions?

Skills that share tags, products or a category with Debug UI Interactions: Debug (asgeirtj/system_prompts_leaks, 69k stars), Openclaw Debugging (openclaw/openclaw, 392k stars), Debugging Executions (n8n-io/n8n, 207k stars) and Debugging Toolkit (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Debug UI Interactions?

LunCoSim (a GitHub organization) maintains it in LunCoSim/lunco-sim, which has 105 GitHub stars. The repository holds 38 skills in this directory. The repository was last updated on October 7, 2026.

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