Develop and iterate on IWSDK PanelUI components. Use when the user wants to create, modify, debug, or improve UI panels in their IWSDK application. Covers UIKITML editing, full-screen preview with ScreenSpace, and visual verification.
67
81%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
Efficiently develop and iterate on IWSDK PanelUI panels using ScreenSpace for full-screen 2D preview. The workflow has a required core (setup for iteration) and optional extensions (the actual UI work, driven by user intent).
User request is in $ARGUMENTS.
Find the panel entity and its UIKITML source file.
PanelUI component. Use ecs_find_entities with withComponents: ["PanelUI"] to find them.PanelUI component's config field with ecs_query_entity to find the JSON path (e.g., ./ui/welcome.json).ui/ with the same name but .uikitml extension (e.g., ui/welcome.uikitml).The ScreenSpace component positions a panel in front of the camera so it appears as a 2D UI — ideal for fast iteration.
If the entity already has ScreenSpace: Note the current settings so they can be restored later.
ecs_query_entity(entityIndex, components: ["ScreenSpace"]) → save the valuesIf the entity does not have ScreenSpace: You will need to add it in code.
Either way, set ScreenSpace to fill the entire viewport in code:
.addComponent(ScreenSpace, {
top: "0px",
left: "0px",
width: "100vw",
height: "100vh",
});Setting this in code (not via ecs_set_component) ensures it persists across hot reloads.
Take a browser_screenshot to confirm the panel fills the screen and is ready for iteration.
This is where the user's request drives the work. Edit the .uikitml file in ui/.
mcp__iwsdk-reference__search_code to query for supported UIKITML element types and CSS properties. Search for things like "uikitml interpret container text" or specific element types you need.#id and .class (via PanelDocument's querySelector).width: 50 = 50cm). World space uses meters. 100cm = 1m..uikitml file. Changes are auto-compiled by the vite plugin and hot-reloaded..json file in public/ui/ should never be modified directly, but can be read for quick debugging to inspect the compiled element tree, class definitions, and properties.After each edit to the .uikitml file:
browser_screenshot to visually verify the change.public/ui/<name>.json) to debug layout issues or inspect computed properties.Repeat the edit-screenshot cycle as needed.
When done with UI work, always restore the ScreenSpace component to its original state.
If it had ScreenSpace before: Restore the original values that were noted in Step 2.
// Restore original settings
.addComponent(ScreenSpace, {
top: "20px",
left: "20px",
height: "40%",
// ... whatever was noted
});If it did not have ScreenSpace before: Remove the ScreenSpace component addition from code.
Take a final browser_screenshot to confirm the panel is back to its normal state.
.uikitml, never the compiled .json — the JSON is auto-generated and will be overwritten.getElementById(id) or querySelector(selector) on the PanelDocument to access UI elements programmatically in systems. Elements can be named with .name = "id" to make them discoverable in the scene hierarchy."400px", "100vw", "20px".b3d1162
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.