UI Visual Debugging
NangoHQ/nango
A skill your agent uses when modifying or visually debugging Nango frontend UI, including packages/webapp, packages/connect-ui, browser interactions, screenshots, and visual regressions.
How a sentence the user reads is written in Open Screenshot Generator - toasts, dialog titles and bodies, buttons, tooltips (title), aria-labels, placeholders, settings hints, empty states…
$ npx skills add dotnetdreamer/open-screenshot-generator --skill ui-text -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dotnetdreamer/open-screenshot-generator ui-text --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/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ui-text .claude/skills/ui-text && 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 "ui-text" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/.claude/skills/ui-text into .claude/skills/ui-text/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ui-text", 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/dotnetdreamer/open-screenshot-generator/tree/main/.claude/skills/ui-textType 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 dotnetdreamer/open-screenshot-generator --skill ui-text -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dotnetdreamer/open-screenshot-generator ui-text --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/ui-text .agents/skills/ui-text && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ui-text" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/.claude/skills/ui-text into .agents/skills/ui-text/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ui-text", 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 dotnetdreamer/open-screenshot-generator --skill ui-text -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dotnetdreamer/open-screenshot-generator ui-text --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/ui-text .cursor/skills/ui-text && 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 "ui-text" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/.claude/skills/ui-text into .cursor/skills/ui-text/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ui-text", 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/dotnetdreamer/open-screenshot-generator.git --path .claude/skills/ui-text--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 dotnetdreamer/open-screenshot-generator --skill ui-text -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dotnetdreamer/open-screenshot-generator ui-text --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/ui-text .gemini/skills/ui-text && 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 "ui-text" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/.claude/skills/ui-text into .gemini/skills/ui-text/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ui-text", 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 dotnetdreamer/open-screenshot-generator ui-textInstalls 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 dotnetdreamer/open-screenshot-generator --skill ui-text -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/ui-text .github/skills/ui-text && 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 "ui-text" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/.claude/skills/ui-text into .github/skills/ui-text/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ui-text", 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 dotnetdreamer/open-screenshot-generator --skill ui-text -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install dotnetdreamer/open-screenshot-generator ui-text --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dotnetdreamer/open-screenshot-generator.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/ui-text .opencode/skills/ui-text && 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 "ui-text" agent skill from https://github.com/dotnetdreamer/open-screenshot-generator/tree/main/.claude/skills/ui-text into .opencode/skills/ui-text/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ui-text", 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.
ui-textHow a sentence the user reads is written in Open Screenshot Generator - toasts, dialog titles and bodies, buttons, tooltips (title), aria-labels, placeholders, settings hints, empty states…
UI Text is an agent skill from dotnetdreamer/open-screenshot-generator. How a sentence the user reads is written in Open Screenshot Generator - toasts, dialog titles and bodies, buttons, tooltips (title), aria-labels, placeholders, settings hints, empty states, start-screen and tour copy, and thrown errors that reach a toast. Use before writing or changing ANY of those. Covers the house patterns with real before/after strings from this repo, the rules the copy has to pass, which Playwright specs and screenshot scripts match on UI text so a reword does not break them, and a checker…
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file.
It sits in Testing & QA, covering Accessibility and Browser testing. It works with Playwright and Tauri. The repository describes itself as: Open source Canva with CLI/GUI, AI Agent, MCP for App Store and Play Store screenshots. Free alternative to AppScreens, AppLaunchpad and Previewed. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 556578e. 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.
Ships script files (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodenpxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.
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.
UI Text loads about 2.1k tokens when it runs. Until then it costs about 137 tokens; SKILL.md has 1,112 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 dotnetdreamer/open-screenshot-generator at commit 556578e, republished under its MIT licence (© dotnetdreamer). 1,112 words, ~2,103 tokens.
.claude/skills/ui-text/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.The people reading this app's copy are making store screenshots, often against a release deadline. Every string should tell them what state they are in and what to do next, in the words they would use.
The strings have no dictionary. They are hardcoded in the components, mostly
OpenScreenshotGeneratorLayout.tsx.
src/lib/i18n/ is a different thing: it translates the text inside the user's
artboards into store locales. Do not put editor copy there, and do not treat a
project's locale list as a list of UI languages.
The house style is the newer code, not the older code. The early toasts in the layout ("Loading Error", "Failed to load project. See console for details.") are the "don't" examples below. The recent ones in the start screens, cloud, account and panels are the "do" examples.
A toast is read in a second. The title says what happened, the description says what to do about it. If there is nothing to do, drop the description.
Delete Failed / There was an error deleting the project.Nothing to share yet / Create or open a project first.Desktop users have no console, and web users will not open one. Log the error with
console.error and tell the user what they can do.
Failed to load project. See console for details.That version could not be read / It may have been cleared with the browser data."Error", "Loading Error" and "Invalid Template" make the user work out what broke.
ErrorThose images could not be read, That set is no longer on this device"Failed to", "There was an error", "has been", "successfully" all come before the fact and add nothing to it.
The project has been removed from your recent projects.Removed from recent projectsTitles, buttons, tooltips and menu items are sentence case. Product and platform names keep their capitals (App Store, Google Drive, iPad).
Cannot Delete Element, Add New Artboard AfterThe editor was reloaded, Put back in the editorSay what the setting changes for the user. How it works goes in a code comment.
Keeps the open project in your cloud on its own, shortly after each round of edits. Sign in to use it, and watch the corner of the canvas to see where it got toSaves the open project to your cloud a few seconds after you stop editing. Needs sign in"It" and "they" need something on screen to point at. "Simply", "just", "easily", "instantly", "seamless" and "powerful" are words the user skips.
It ran out of memory and the app recovered it.The editor ran out of memory and reloaded. Your last saved work is intact.Add screenshots above and every design here fills with them, instantlyAdd screenshots above to fill every design here| Say | Not |
|---|---|
| artboard | board, slide, page (the UI says "artboard" about 180 times) |
| project | design, file (except on the quick start deck, where each card is a "design") |
| element, layer | object, item (layer only in the Layers panel) |
| export | download, render |
| language | locale (the code says locale, the user never sees the word) |
Say it out loud to someone sitting next to you. If you would not say it that way, it is not ready. Then delete every word you can remove without losing a fact.
From rule 19 in .agents/AGENTS.md:
aria-label,
placeholders, menu items, settings hints. A toast description or dialog body made of
full sentences keeps its periods, as the recent code does..claude/skills/humanizer, which AGENTS.md makes mandatory
for everything a user reads.The old toasts in the layout break most of these patterns. Fix one when you are already changing that code path, or when it is actually wrong. A sweep is churn, and a lot of these strings are matched by tests.
UI text is also a locator. A reword that looks harmless can break a test.
| Reader | Where | Matches on |
|---|---|---|
| Playwright specs | tests/e2e/specs/ | getByTitle, getByRole({ name }), getByText, about 250 calls |
| Page object | tests/e2e/helpers/editor.ts | toolbar titles, palette aria-label shaped Add ${label} (${libraryId}), tab names with exact: true |
| Screenshot driver | .claude/skills/app-screenshots/scripts/ | CSS selectors like button[aria-label="Expand right panel"], title^="Step back" |
# Before changing a string: who reads it?
node .claude/skills/ui-text/copy.mjs locked "Expand right panel" "Put back in the editor"
# After writing copy: check the lines added since HEAD
node .claude/skills/ui-text/copy.mjs check
# Audit one file whole (expect the old layout toasts to light up)
node .claude/skills/ui-text/copy.mjs check --all src/components/open-screenshot-generator/SettingsDialog.tsxcheck flags dashes, curly quotes, trailing periods on short copy, "see console",
"There was an error", "Failed to ...", selling words and Title Case. Title Case and
selling words can be false alarms (a product name it does not know). The rest are real.
locked first.
If it says LOCKED, update the spec or script too, then run that spec
(npx playwright test --project web tests/e2e/specs/<file>).aria-label replaces the visible text as the accessible name. A button that
reads "Export" on screen but has aria-label="Export artboards" answers to the
label, so getByRole('button', { name: 'Export', exact: true }) finds nothing.title. Adding visible text to one changes
its accessible name, and adding an aria-label changes it again. editor.ts explains
the locator policy at the top.getByRole without exact: true matches
a substring, so a new button whose name contains an existing one ("Export" inside
"Export all") can make an old locator match two elements and fail. The page object
passes exact: true for that reason; keep new names distinct.toast({ description: err.message }) shows
whatever the lower layer threw, so a message in src/lib/ that ends up in a toast
follows these rules too. Keep technical detail in console.error.grep -rn "Exact string" src tests/e2e .claude/skills/app-screenshots/scripts --include='*.ts' --include='*.tsx' --include='*.js'A string built with a template literal (`Add ${label} (${libraryId})`) will not
show up under its final text. Search for a fixed fragment of it.
© dotnetdreamer, 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/ui-text of dotnetdreamer/open-screenshot-generator.
Open the folder on GitHubat commit 556578e
UI Text 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 |
|---|---|---|---|---|---|---|
| UI Text this skilldotnetdreamer/open-screenshot-generator | 124 | — | ~2.1k | Automated safety check: Pass | MIT | |
| UI Visual DebuggingNangoHQ/nango | 13k | — | ~1.3k | Automated safety check: Pass | Custom licence | |
| Playwright Best Practicessanity-io/sanity | 6.4k | 7 repos | ~6.4k | Automated safety check: Pass | MIT | |
| Mirroir Onboardjfarcand/mirroir-mcp | 245 | — | ~4.4k | Automated safety check: Notes | Apache-2.0 | |
| Verify Debbie Codesdebs-obrien/debbie.codes | 142 | — | ~1.9k | Automated safety check: Pass | None | |
| React Testingaffaan-m/ECC | 275k | 1 repos | ~3.3k | Automated safety check: Pass | MIT |
NangoHQ/nango
A skill your agent uses when modifying or visually debugging Nango frontend UI, including packages/webapp, packages/connect-ui, browser interactions, screenshots, and visual regressions.
sanity-io/sanity
A skill your agent uses when writing Playwright tests, fixing flaky tests, debugging failures, implementing Page Object Model, configuring CI/CD, optimizing performance, mocking APIs, handling…
jfarcand/mirroir-mcp
Onboard a consumer web app to mirroir's .mirroir/ dotfile by EXPLORING the running app (chrome-devtools-mcp) — derive real selectors from the accessibility tree, exercise each surface's primary…
debs-obrien/debbie.codes
Drive the live debbie.codes Nuxt site (web UI) the way a user does via Playwright — launch the dev server, doctor health, exercise mapped features, capture screenshots/ARIA evidence, and clean up.
affaan-m/ECC
React component testing with React Testing Library, Vitest/Jest, MSW for network mocking, accessibility assertions with axe, and the decision boundary between component tests and Playwright/Cypress…
Community-Access/accessibility-agents
Internal helper: re-run targeted scans to confirm a fix works at runtime.
dotnetdreamer/open-screenshot-generator
Builds an App Store App Preview video (and a Play Store or landing page promo cut) from a screen recording of the app, using the open-screenshot-generator CLI (osg video): it starts from one of 20…
dotnetdreamer/open-screenshot-generator
Drive Open Screenshot Generator headlessly (puppeteer-core + Edge) to take UI screenshots, add palette elements, upload device screenshots, export artboard PNGs, and regenerate the 3D device…
dotnetdreamer/open-screenshot-generator
Drives the live Open Screenshot Generator editor tool by tool over MCP, using osg mcp to expose the design tools (artboards, elements, backgrounds, fonts, the asset libraries, templates, App Preview…
dotnetdreamer/open-screenshot-generator
Check the latest xtekky/gpt4free releases for provider additions/changes and decide whether Open Screenshot Generator's AI providers need the same.
dotnetdreamer/open-screenshot-generator
Add properly licensed Adobe Stock photos to the Images palette library (e.g.
dotnetdreamer/open-screenshot-generator
Checks that rendered store assets will actually be accepted, and then ships them, using the open-screenshot-generator CLI: osg verify audits the produced PNGs and MP4s against App Store and Google…
Works with
Categories
How a sentence the user reads is written in Open Screenshot Generator - toasts, dialog titles and bodies, buttons, tooltips (title), aria-labels, placeholders, settings hints, empty states…. UI Text is an agent skill from dotnetdreamer/open-screenshot-generator. How a sentence the user reads is written in Open Screenshot Generator - toasts, dialog titles and bodies, buttons, tooltips (title), aria-labels, placeholders, settings hints, empty states, start-screen and tour copy, and thrown errors that reach a toast.
UI Text fits situations like: tasks that involve Accessibility; tasks that involve Browser testing.
Run `npx skills add dotnetdreamer/open-screenshot-generator --skill ui-text -a claude-code`. Or copy the skill folder (.claude/skills/ui-text in dotnetdreamer/open-screenshot-generator) into .claude/skills/ui-text in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dotnetdreamer/open-screenshot-generator --skill ui-text -a codex`. Or copy the skill folder (.claude/skills/ui-text in dotnetdreamer/open-screenshot-generator) into .agents/skills/ui-text 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 dotnetdreamer/open-screenshot-generator --skill ui-text -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ui-text, .gemini/skills/ui-text, .github/skills/ui-text and .opencode/skills/ui-text in your project.
Going by SKILL.md and its folder, UI Text needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node and npx). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. 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.
UI Text is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.4k 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 UI Text: UI Visual Debugging (NangoHQ/nango, 13k stars), Playwright Best Practices (sanity-io/sanity, 6.4k stars), Mirroir Onboard (jfarcand/mirroir-mcp, 245 stars) and Verify Debbie Codes (debs-obrien/debbie.codes, 142 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
dotnetdreamer (a GitHub user) maintains it in dotnetdreamer/open-screenshot-generator, which has 124 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 7, 2026.
Source: dotnetdreamer/open-screenshot-generator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.