Web Application Testing
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
Implement E2E tests for Unity Editor extensions (EditorWindow and custom Inspector) using the unity-editor-driver framework in this repository.
$ npx skills add kurotu/VRCQuestTools --skill unity-editor-driver-e2e -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kurotu/VRCQuestTools unity-editor-driver-e2e --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/kurotu/VRCQuestTools.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/unity-editor-driver-e2e .claude/skills/unity-editor-driver-e2e && 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 "unity-editor-driver-e2e" agent skill from https://github.com/kurotu/VRCQuestTools/tree/master/.claude/skills/unity-editor-driver-e2e into .claude/skills/unity-editor-driver-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unity-editor-driver-e2e", 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/kurotu/VRCQuestTools/tree/master/.claude/skills/unity-editor-driver-e2eType 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 kurotu/VRCQuestTools --skill unity-editor-driver-e2e -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kurotu/VRCQuestTools unity-editor-driver-e2e --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kurotu/VRCQuestTools.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/unity-editor-driver-e2e .agents/skills/unity-editor-driver-e2e && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "unity-editor-driver-e2e" agent skill from https://github.com/kurotu/VRCQuestTools/tree/master/.claude/skills/unity-editor-driver-e2e into .agents/skills/unity-editor-driver-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unity-editor-driver-e2e", 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 kurotu/VRCQuestTools --skill unity-editor-driver-e2e -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kurotu/VRCQuestTools unity-editor-driver-e2e --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kurotu/VRCQuestTools.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/unity-editor-driver-e2e .cursor/skills/unity-editor-driver-e2e && 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 "unity-editor-driver-e2e" agent skill from https://github.com/kurotu/VRCQuestTools/tree/master/.claude/skills/unity-editor-driver-e2e into .cursor/skills/unity-editor-driver-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unity-editor-driver-e2e", 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/kurotu/VRCQuestTools.git --path .claude/skills/unity-editor-driver-e2e--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 kurotu/VRCQuestTools --skill unity-editor-driver-e2e -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kurotu/VRCQuestTools unity-editor-driver-e2e --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kurotu/VRCQuestTools.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/unity-editor-driver-e2e .gemini/skills/unity-editor-driver-e2e && 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 "unity-editor-driver-e2e" agent skill from https://github.com/kurotu/VRCQuestTools/tree/master/.claude/skills/unity-editor-driver-e2e into .gemini/skills/unity-editor-driver-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unity-editor-driver-e2e", 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 kurotu/VRCQuestTools unity-editor-driver-e2eInstalls 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 kurotu/VRCQuestTools --skill unity-editor-driver-e2e -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kurotu/VRCQuestTools.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/unity-editor-driver-e2e .github/skills/unity-editor-driver-e2e && 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 "unity-editor-driver-e2e" agent skill from https://github.com/kurotu/VRCQuestTools/tree/master/.claude/skills/unity-editor-driver-e2e into .github/skills/unity-editor-driver-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unity-editor-driver-e2e", 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 kurotu/VRCQuestTools --skill unity-editor-driver-e2e -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kurotu/VRCQuestTools unity-editor-driver-e2e --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kurotu/VRCQuestTools.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/unity-editor-driver-e2e .opencode/skills/unity-editor-driver-e2e && 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 "unity-editor-driver-e2e" agent skill from https://github.com/kurotu/VRCQuestTools/tree/master/.claude/skills/unity-editor-driver-e2e into .opencode/skills/unity-editor-driver-e2e/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "unity-editor-driver-e2e", 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.
unity-editor-driver-e2eImplement E2E tests for Unity Editor extensions (EditorWindow and custom Inspector) using the unity-editor-driver framework in this repository.
Unity Editor Driver E2E is an agent skill from kurotu/VRCQuestTools. Implement E2E tests for Unity Editor extensions (EditorWindow and custom Inspector) using the unity-editor-driver framework in this repository. Use this skill whenever you need to write, fix, or extend EditMode E2E tests that interact with editor UI controls — even if the request only mentions "test", "automate inspector", "UI test", "check window behavior", or similar phrases. The framework works non-invasively: no changes to the target window or inspector code are ever required.
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `evals/evals.json`).
It sits in Testing & QA, covering End-to-end testing. It works with Unity. The repository describes itself as: Unity editor extension to support uploading VRChat avatars for Oculus Quest. The licence is MIT.
11 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit c68d147. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are csharp, json and bash).
From 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.
Unity Editor Driver E2E loads about 3.1k tokens when it runs. Until then it costs about 127 tokens; SKILL.md has 612 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); files beside SKILL.md are not scanned.
The full file from kurotu/VRCQuestTools at commit c68d147, republished under its MIT licence (© kurotu). 612 words, ~3,140 tokens.
.claude/skills/unity-editor-driver-e2e/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.EditorDriver lets you automate and assert on Unity Editor windows and custom Inspectors without touching the target code. Tests live in EditMode test assemblies and run via Unity Test Runner.
Create an .asmdef for your test assembly. Reference EditorDriver.Editor (and your target
window/component assemblies). Enable UNITY_INCLUDE_TESTS so the assembly is only included
in test builds.
{
"name": "MyPlugin.E2ETests.Editor",
"rootNamespace": "MyPlugin.Tests",
"references": [
"EditorDriver.Editor",
"MyPlugin.Editor",
"MyPlugin.Runtime"
],
"includePlatforms": ["Editor"],
"overrideReferences": true,
"precompiledReferences": ["nunit.framework.dll"],
"autoReferenced": false,
"defineConstraints": ["UNITY_INCLUDE_TESTS"]
}Every E2E test fixture follows the same shape:
using System.Collections;
using NUnit.Framework;
using UnityEngine.TestTools;
using EditorDriver;
[TestFixture]
public class MyWindowE2ETests
{
private Driver _driver;
[SetUp]
public void SetUp()
{
_driver = new Driver();
}
[TearDown]
public void TearDown()
{
_driver?.Dispose(); // closes all windows and destroys GameObjects
}
[UnityTest]
public IEnumerator SomeTest()
{
var handle = _driver.OpenWindow<MyWindow>();
yield return null; // let Unity process the window's first OnGUI
// ... interact and assert ...
}
}Key rules:
[UnityTest] with IEnumerator for any test that needs an OnGUI frame.yield return null immediately after opening a window or inspector._driver.Dispose() (or CloseAll()) in [TearDown] — never rely on
the test framework to clean up Unity objects.// Opens a fresh instance (never reuses an existing window)
var handle = _driver.OpenWindow<MyWindow>();
var window = handle.Window; // the EditorWindow instance// Creates a temporary GameObject, adds TComponent, opens the default Editor in an isolated window
var handle = _driver.OpenInspector<MyComponent>();
// With an explicit Editor type
var handle = _driver.OpenInspector<MyComponent, MyComponentEditor>();
// InspectorHandle properties
handle.Window // EditorWindow hosting the inspector
handle.Editor // UnityEditor.Editor instance
handle.Component // the Component on the temporary GameObject
handle.GameObject // the temporary GameObject_driver.CloseWindow(windowHandle); // close a specific window
_driver.CloseInspector(inspectorHandle); // close inspector and destroy its GameObject
_driver.CloseAll(); // close everything (also called by Dispose)Page.Scan is the recommended approach. It auto-discovers all interactive controls without any
manual descriptor. It works for both IMGUI and UIElements windows.
var handle = _driver.OpenWindow<MyWindow>();
yield return null;
var page = Page.Scan(handle.Window);// By displayed text value (IMGUI and UIElements)
var locator = page.GetByValue("Hello World");
// By label text — works with UIElements; also works with IMGUI via Page.Describe
var locator = page.GetByLabel("Text Field");
// By type and zero-based index
var firstToggle = page.GetByType(ControlType.Toggle, 0);
var secondToggle = page.GetByType(ControlType.Toggle, 1);
// All discovered controls
IReadOnlyList<ControlInfo> all = page.Controls;GetByValue / GetByLabel / GetByType all throw InvalidOperationException when the
control is not found — use this as an implicit assertion.
Use Page.Describe when you know the window's layout in advance and prefer label-based access.
This works for both IMGUI and UIElements; the resolver is auto-detected.
var page = Page.Describe(handle.Window, p =>
{
p.Label("Base Settings", EditorStyles.boldLabel);
p.TextField("Text Field");
p.BeginToggleGroup("Optional Settings");
p.Toggle("Inner Toggle");
p.Slider("Slider", -3f, 3f);
p.EndToggleGroup();
p.Button("Apply");
p.IntField("Count");
p.FloatField("Scale");
p.ObjectField("Target");
});
page.GetByLabel("Text Field").Fill("new value");Available descriptor methods: Label, TextField, Toggle, Slider, BeginToggleGroup,
EndToggleGroup, Button, IntField, FloatField, ObjectField.
All query methods return a Locator. Use it to interact with or inspect a single control.
| Method | Description |
|---|---|
ReadText() | Reads the displayed text (via clipboard SelectAll→Copy) |
Fill(string) | Clears the field and types the given text |
Toggle() | Clicks a checkbox or toggle control |
SetSlider(float) | Types a value into the slider's numeric field |
Click() | Clicks the center of the control |
CaptureScreenshot() | Returns a Texture2D cropped to the control area |
.ControlType | The ControlType enum value |
.Rect | The Rect of the control in screen space |
After Fill, Toggle, or SetSlider, always repaint and yield before asserting:
page.GetByValue("Hello World").Fill("New Text");
handle.Repaint();
yield return null;
page.Refresh(); // re-discover controls after UI change
Assert.AreEqual("New Text", page.GetByValue("New Text").ReadText());When the UI changes (e.g. a toggle group expands to reveal more controls), call
page.Refresh() after the change to re-discover the new state. Controls inside a disabled
group are not discoverable until the group is enabled.
var page = Page.Scan(handle.Window);
int countBefore = page.Controls.Count;
// Enable a toggle group (toggle at index 1 in this example)
page.GetByType(ControlType.Toggle, 1).Toggle();
handle.Repaint();
yield return null;
page.Refresh(); // picks up newly active controls
Assert.Greater(page.Controls.Count, countBefore);
// Inner slider is now reachable
var slider = page.GetByValue("1.23");
slider.Fill("2.5");WindowHandle exposes reflection helpers for white-box state assertions:
// UI → State: interact, then read internal field
page.GetByValue("Hello World").Fill("Updated");
handle.Repaint();
yield return null;
string val = handle.GetFieldValue<string>("myString");
Assert.AreEqual("Updated", val);
// State → UI: write internal field, then verify it appears in the UI
handle.SetFieldValue("myString", "From Code");
handle.Repaint();
yield return null;
page.Refresh();
Assert.AreEqual("From Code", page.GetByValue("From Code").ReadText());For IMGUI inspectors, cast handle.Component and read/write public fields directly:
var component = (MyComponent)handle.Component;
// UI → State
page.GetByValue("Hello World").Fill("Inspector Test");
handle.Repaint();
yield return null;
Assert.AreEqual("Inspector Test", component.myString);
// State → UI
component.myString = "From Code";
handle.Repaint();
yield return null;
page.Refresh();
Assert.AreEqual("From Code", page.GetByValue("From Code").ReadText());UIElements inspectors use BindProperty, so after a direct field change you must notify
the binding system via serializedObject.Update() before repainting:
var component = (MyUIElementsComponent)handle.Component;
// State → UI (UIElements binding requires serializedObject.Update)
component.myString = "From Code";
handle.Editor.serializedObject.Update();
handle.Repaint();
yield return WaitForBindings();
page.Refresh();
Assert.AreEqual("From Code", page.GetByLabel("Text Field").ReadText());UIElements bindings may not resolve in a single frame. For read operations on UIElements inspectors, yield multiple frames before scanning:
private static IEnumerator WaitForBindings()
{
yield return null;
yield return null;
yield return null;
}
[UnityTest]
public IEnumerator ReadUIElementsField()
{
var handle = _driver.OpenInspector<MyUIElementsComponent>();
yield return WaitForBindings(); // instead of a single yield return null
var page = Page.Scan(handle.Window);
Assert.AreEqual("Hello World", page.GetByLabel("Text Field").ReadText());
}Unlike IMGUI Scan (value-only), UIElements Scan exposes labels from the visual tree, so
GetByLabel works out of the box:
// UIElements windows support both:
page.GetByLabel("Text Field").Fill("new");
page.GetByValue("Hello World").ReadText();On Linux, call handle.Repaint() before reading UIElements state after mutating serialized
data. It walks IBindable elements and forces binding.PreUpdate()/binding.Update(),
which avoids stale bindings.
Always build paths with Path.Combine and Path.GetTempPath() for cross-platform safety.
Clean up in [TearDown].
using System.IO;
[SetUp]
public void SetUp()
{
_driver = new Driver();
_screenshotDir = Path.Combine(Path.GetTempPath(), "E2E_" + System.Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(_screenshotDir);
}
[TearDown]
public void TearDown()
{
_driver?.Dispose();
if (Directory.Exists(_screenshotDir))
Directory.Delete(_screenshotDir, recursive: true);
}
[UnityTest]
public IEnumerator TakeScreenshot()
{
var handle = _driver.OpenWindow<MyWindow>();
yield return null;
// Whole window
var path = Path.Combine(_screenshotDir, "window.png");
handle.Screenshot(path);
Assert.IsTrue(File.Exists(path));
// Individual control
var page = Page.Scan(handle.Window);
var tex = page.GetByValue("Hello World").CaptureScreenshot();
Assert.Greater(tex.width, 0);
UnityEngine.Object.DestroyImmediate(tex);
}Window positioning: Use EditorWindowExtensions.SetPosition() instead of assigning
EditorWindow.position directly. On Linux, the window manager applies position changes
asynchronously; SetPosition uses a min/max-size trick to make resizes deterministic.
UIElements on Linux: Call handle.Repaint() before reading UIElements state after
mutating serialized data. This forces IBindable.binding.PreUpdate()/Update() and
avoids stale bindings.
File paths: Always use Path.Combine(...) — never concatenate with \ or / directly.
# Run all tests in the E2E assembly
uloop run-tests --filter-type assembly --filter-value "MyPlugin.E2ETests.Editor"
# Run a single test by full name
uloop run-tests --filter-type exact --filter-value "MyPlugin.Tests.MyWindowE2ETests.SomeTest"See Assets/Tests/Editor/ for complete worked examples covering IMGUI windows, IMGUI
inspectors, UIElements windows, and UIElements inspectors — including bidirectional state
verification patterns.
© kurotu, 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 in .claude/skills/unity-editor-driver-e2e of kurotu/VRCQuestTools.
Open the folder on GitHubat commit c68d147
Unity Editor Driver E2E 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 |
|---|---|---|---|---|---|---|
| Unity Editor Driver E2E this skillkurotu/VRCQuestTools | 373 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Web Application Testinganthropics/skills | 180k | 51 repos | ~966 | Automated safety check: Pass | Apache-2.0 | |
| OpenHarness End-to-End EvalsHKUDS/OpenHarness | 16k | 1 repos | ~2.1k | Automated safety check: Notes | MIT | |
| playwright-cli Browser Automationgithub/gh-aw | 5.4k | 24 repos | ~2.8k | Automated safety check: Pass | MIT | |
| Write and Verify Playwright Testsappsmithorg/appsmith | 41k | — | ~2.9k | Automated safety check: Notes | Apache-2.0 | |
| Cucumber and Playwright E2E Testslanggenius/dify | 158k | — | ~682 | Automated safety check: Pass | Custom licence |
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
HKUDS/OpenHarness
Validates OpenHarness features by running real multi-turn agent loops with live LLM calls against an unfamiliar codebase, checking actual tool execution.
github/gh-aw
Drives a real browser from the command line with playwright-cli to open pages, interact, mock requests, save state and work with Playwright tests.
appsmithorg/appsmith
Writes a Playwright end-to-end test from a prompt, runs it against a live Appsmith deployment and retries with fixes up to three times until it passes.
langgenius/dify
Guides changes and reviews of the Cucumber and Playwright end-to-end suite under `e2e/`: feature files, step definitions, support code, tags, locators and assertions.
langflow-ai/langflow
Write and review Playwright E2E tests for Langflow. An agent skill from langflow-ai/langflow.
kurotu/VRCQuestTools
Replay recorded PlayMode keyboard and mouse input. An agent skill from kurotu/VRCQuestTools.
kurotu/VRCQuestTools
Capture Unity Editor windows or Game View rendering as PNG. An agent skill from kurotu/VRCQuestTools.
kurotu/VRCQuestTools
Execute C with Unity APIs when existing uloop tools cannot inspect or edit enough.
kurotu/VRCQuestTools
Find or inspect Unity GameObjects, especially objects the user currently selected in the Hierarchy.
kurotu/VRCQuestTools
Record PlayMode keyboard and mouse input to JSON. An agent skill from kurotu/VRCQuestTools.
kurotu/VRCQuestTools
Get the Unity scene hierarchy as a structured tree. An agent skill from kurotu/VRCQuestTools.
Works with
Categories
Implement E2E tests for Unity Editor extensions (EditorWindow and custom Inspector) using the unity-editor-driver framework in this repository. Unity Editor Driver E2E is an agent skill from kurotu/VRCQuestTools. Implement E2E tests for Unity Editor extensions (EditorWindow and custom Inspector) using the unity-editor-driver framework in this repository.
Unity Editor Driver E2E fits situations like: you need to write; extend EditMode E2E tests that interact with editor UI controls — even if the request only mentions test; automate inspector; check window behavior.
Run `npx skills add kurotu/VRCQuestTools --skill unity-editor-driver-e2e -a claude-code`. Or copy the skill folder (.claude/skills/unity-editor-driver-e2e in kurotu/VRCQuestTools) into .claude/skills/unity-editor-driver-e2e in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kurotu/VRCQuestTools --skill unity-editor-driver-e2e -a codex`. Or copy the skill folder (.claude/skills/unity-editor-driver-e2e in kurotu/VRCQuestTools) into .agents/skills/unity-editor-driver-e2e 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 kurotu/VRCQuestTools --skill unity-editor-driver-e2e -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/unity-editor-driver-e2e, .gemini/skills/unity-editor-driver-e2e, .github/skills/unity-editor-driver-e2e and .opencode/skills/unity-editor-driver-e2e in your project.
SKILL.md names no scripts, command-line tools or credentials: Unity Editor Driver E2E is instructions for the agent only.
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. Review the folder before installing.
Unity Editor Driver E2E is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 13k 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 Unity Editor Driver E2E: Web Application Testing (anthropics/skills, 180k stars), OpenHarness End-to-End Evals (HKUDS/OpenHarness, 16k stars), playwright-cli Browser Automation (github/gh-aw, 5.4k stars) and Write and Verify Playwright Tests (appsmithorg/appsmith, 41k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kurotu (a GitHub user) maintains it in kurotu/VRCQuestTools, which has 373 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on September 30, 2026.
Source: kurotu/VRCQuestTools on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.