Driving The Editor Ui logo

Driving The Editor Ui

Organization
SummerEngine
driving-the-editor-ui

Drive the editor UI by name: run actions, clear blocking dialogs, switch screens, read a dock.

Overview

PublisherSummerEngine
Repositorysummer
Skill namedriving-the-editor-ui
Stars
91
Forks
8
Bundled files
1
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by SummerEngine on GitHub. Read the source before you install it.

Installation

Install the Driving The Editor Ui AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/SummerEngine/summer/tree/main/library/skills/driving-the-editor-ui
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/SummerEngine/summer.git /tmp/summer
mkdir -p .claude/skills
cp -r /tmp/summer/library/skills/driving-the-editor-ui .claude/skills/driving-the-editor-ui
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Driving The Editor Ui in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Driving The Editor Ui on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Driving The Editor Ui is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Driving the Editor UI

UI work vs scene work — decide first

The editor UI is not where scene work happens. Nodes, properties, placement, lighting, materials: scene-scripting (summer_run_script), the scene tools, summer_world_snapshot / summer_snapshot_diff / summer_screenshot (verifying-scenes). The Scene dock and the Inspector are views of that data; clicking through them to change a property is slower, less reliable, and unverifiable compared with summer_set_prop.

UI ops are for the steps a human does with the mouse that have no scene-level equivalent:

AskRoute
"Open Project Settings" / "open the Import dock" / "toggle the Animation panel"summer_ui_actions mode:"invoke" by name
"Switch to the 3D view" / "go to the Script screen"summer_ui_activate path:"main_screen" action:"select_tab" value:"3D"
"Something is blocking the editor" / tool calls return modal_openthe blocking-dialog pattern below
"What does the Inspector show right now?"summer_ui_tree root:"dock:inspector"
"Change the main scene setting"summer_project_setting — a dedicated tool wins over any UI op
"Move the player to (0, 1, 0)"summer_set_prop / summer_run_script — scene work, never UI

The ladder

  1. Dedicated tool (summer_project_setting, summer_open_scene, summer_select_node, summer_save_scene, …). If one exists, the UI ops are the wrong layer.
  2. Named action — summer_ui_actions mode:"list" filter:"<word>" to find the exact name, then mode:"invoke" action_name:"<name>". The event takes the same path the shortcut key would, so the editor's own handlers run.
  3. Tree + activate — summer_ui_tree to find a control's path, summer_ui_activate to press / toggle / select a tab / set text / set a value through the control's own input path.
  4. Pixels — summer_ui_screenshot, only to look. There is no coordinate click anywhere in this surface: if a thing is visible it is in the tree, and the tree is what activation takes.

Each rung costs more tokens and is less deterministic than the one above it. Do not start at 3 because it feels general.

The blocking-dialog pattern

An exclusive dialog (Project Settings, a confirmation, an unsaved-changes prompt) makes the root window drop input; every mutating UI op then answers modal_open with the blocking_dialog, and other editor operations may stall as still_queued.

  1. summer_ui_tree root:"dialogs" → read blocking, blocking_dialog {title, path, class}, and the dialog's text and buttons (kind: ok | cancel | custom, enabled).
  2. Decide with the user in view. button:"cancel" is the safe close and the default; "ok" or a custom button text confirms whatever the dialog asks — only when that is what the user wants.
  3. summer_ui_activate action:"dismiss_dialog" path:"<blocking_dialog.path>" (or title:"<title>").
  4. Read back: the result's visible_after must be false, and summer_ui_tree root:"dialogs" must show blocking:false. visible_after:true means the dialog re-validated and stayed up — read it again with root:"dialog:<title>" instead of retrying blindly.

A dialog the human would have to click through, you also have to click through — nothing here bypasses one.

Main-screen switching

spatial_editor/* actions need the 3D screen; canvas_item_editor/* need 2D; the script editor's actions need Script. A not_handled result (invoked:true, handled:false) usually means the wrong screen is up.

summer_ui_activate path:"main_screen" action:"select_tab" value:"3D"
→ state.current_tab / state.text read back the selected editor

value is the editor name (2D, 3D, Script, Game, AssetLib, case-insensitive) or index. not_selected means the switch was refused (scene change in progress, hidden editor button) — wait, retry, read back.

Reading a dock's state

summer_ui_tree root:"dock:<title|id>" (file_system, scene_tree, inspector, or any dock title) returns the dock's controls with text, tooltip (icon-only buttons are named by it), checked, enabled, tabs + current_tab, value/min/max, item_count/selected. Go deeper on one subtree with root:"path:<path>" and a larger depth/limit; children_truncated:true plus the real child_count tells you where a cut happened.

Paths and auto-names (@Panel@123) are stable within a session only. Re-read the tree before activating; never persist a path across sessions.

The deny-list

The engine refuses, with denied_action, anything that ends or replaces the session or deletes without the human's confirmation: editor/file_quit, editor/quit_to_project_list, editor/reload_current_project, scene_tree/delete_no_confirm, every project_manager/* name — and buttons or menu items whose label quits, reloads the project, or closes the editor. summer_ui_actions mode:"list" marks them denied:true. Do not attempt them and do not route around them by path; tell the user what was asked and leave that click to them. File-dialog paths that leave the project (.., user://, ~, absolute paths outside res://) are refused as denied_path.

Verification — read back, never assume

  • An invoke succeeded when its effect is observable: a dialog appears in root:"dialogs", a dock's summer_ui_tree changes, or — for anything scene-level — summer_snapshot_diff / summer_get_scene_tree show it. invoked:true alone proves the event was dispatched, not that anything happened.
  • summer_ui_activate returns state after the action from the same node (checked, current_tab, text, value, freed:true if the action freed it). Cite it.
  • A screenshot proves appearance only. A control's exact state is in the tree.
  • engine_lacks_op means the build predates these ops: nothing was sent. Use the dedicated tools for the outcome, or ask the user to click, and say so.

Failure taxonomy — what to do

failure_reasonMeansNext
unknown_action (+close_matches)no such namepick one of the matches, or mode:"list" with a filter
denied_actionsafety liststop; hand the click to the user
modal_open (+blocking_dialog)exclusive dialog eats inputblocking-dialog pattern
not_handleddispatched, no receiverswitch main screen / reveal the owning panel, retry
not_visible / disabled / obscuredcontrol exists but cannot take the eventreveal it, satisfy the precondition, or dismiss what covers it
unsupported_control (+supported_actions)class not driven this wayuse the listed action, or a named action (MenuBar)
no_activation_pathno hover and no focus reached the buttonthe named action instead
tab_not_found / button_not_found / ambiguous_dialogwrong or ambiguous nameuse the listed tabs / buttons / candidates verbatim
no_rendererheadless editor, no pixelssummer_ui_tree; pixels need a display

Related skills: scene-scripting and verifying-scenes own the scene loop this skill deliberately stays out of; verification-before-completion carries the done-claiming rules; headless-scripting is the route when there is no editor UI at all.

From a shell

No Summer MCP tools in this session? Run each one as a command; when summer --version is missing or below 4.0, use npx -y summer-engine@latest in place of summer. Fields are flags in kebab-case (--scene-path res://main.tscn) or one --input '<json>', and summer ops describe <op> prints the exact input. The summer-cli skill has the rest.

In this skillCommand
summer_get_scene_treesummer engine get-scene-tree
summer_ui_actionssummer engine list-ui-actions, summer engine invoke-ui-action
summer_open_scenesummer engine open-scene
summer_project_settingsummer engine project-setting
summer_run_scriptsummer engine run-script
summer_save_scenesummer engine save-scene
summer_screenshotsummer engine screenshot
summer_select_nodesummer engine select-node
summer_set_propsummer engine set-prop
summer_snapshot_diffsummer engine snapshot-diff
summer_ui_activatesummer engine ui-activate
summer_ui_screenshotsummer engine ui-screenshot
summer_ui_treesummer engine ui-tree
summer_world_snapshotsummer engine world-snapshot

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Driving The Editor Ui AI skill do?

Drive the editor UI by name: run actions, clear blocking dialogs, switch screens, read a dock.

Why use Driving The Editor Ui on TypingMind?

Because you install it once and use it with any model. Driving The Editor Ui is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Driving The Editor Ui in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/SummerEngine/summer/tree/main/library/skills/driving-the-editor-ui. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Driving The Editor Ui?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Driving The Editor Ui?

As many as you like. As long as a model supports skills, you can use Driving The Editor Ui with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Driving The Editor Ui AI skill free?

Yes. It is published on GitHub by SummerEngine under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇