Agent skill

Doc Screenshots

by WordPress in WordPress/wordpress-playground

Annotate UI screenshots with documentation callouts in Fellyph's established visual style — uniform-width orange arrows with white halos, double-stroke target outlines, numbered callout cards, dim…

GPL-2.0Auto-check passedTesting & QA

Install Doc Screenshots

skills CLI
$ npx skills add WordPress/wordpress-playground --skill doc-screenshots -a claude-code

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

GitHub CLI
$ gh skill install WordPress/wordpress-playground doc-screenshots --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/WordPress/wordpress-playground.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/doc-screenshots .claude/skills/doc-screenshots && 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
doc-screenshots
GitHub stars
2k
Token cost
~1.8k tokens
SKILL.md length
961 words
Files
7 (incl. scripts)
Skills in repo
5
Repo updated
First seen
Licence
GPL-2.0

At a glance

Annotate UI screenshots with documentation callouts in Fellyph's established visual style — uniform-width orange arrows with white halos, double-stroke target outlines, numbered callout cards, dim…

  • Works in 3 steps: Capture. Take screenshots at… → Author the config. All geometry is in… → Quality gate — actually look. Read the…
  • Asks to annotate a screenshot
  • SKILL.md covers Workflow, Choosing the annotation mode, Placement rules the script… and Style constants (already baked…, plus 1 more section
  • Runs Python scripts from its folder; calls python3 and python

What it does

Doc Screenshots is an agent skill from WordPress/wordpress-playground. Annotate UI screenshots with documentation callouts in Fellyph's established visual style — uniform-width orange arrows with white halos, double-stroke target outlines, numbered callout cards, dim overlays and a framed canvas. Use this whenever the user asks to annotate a screenshot, add arrows or callouts to a screenshot, create documentation images, highlight UI controls in a capture, or produce docs/tutorial visuals for Playground, Studio or any web UI — even if they just say "add arrows to this" or "make a…

Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including scripts (for example `evals/evals.json`, `evals/files/boxes.json` and `evals/files/broken-config.json`).

It sits in Testing & QA, covering Frontend development. It works with WordPress, WebAssembly and Playwright. The repository describes itself as: Run WordPress in the browser via WebAssembly PHP. The licence is GPL-2.0.

When your agent uses it

  • Asks to annotate a screenshot
  • Callouts to a screenshot
  • Create documentation images
  • Highlight UI controls in a capture

Example prompts

  • “add arrows to this”
  • “make a docs screenshot”
  • “/doc-screenshots”

Requirements

  • Python 3

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. Capture. Take screenshots at deviceScaleFactor: 2. Never eyeball coordinates: record every target's bounding box programmatically and save…
  2. Author the config. All geometry is in CSS px relative to the screenshot's top-left. Write a config JSON using the schema in the script's…
  3. Quality gate — actually look. Read the rendered WEBP at full size, plus the zoomed crops the script saves of every arrowhead and outline…

What it can do on your machine

Read from SKILL.md and the folder at commit 48cd2db. 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

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python3
    • python

    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

Doc Screenshots loads about 1.8k tokens when it runs. Until then it costs about 137 tokens; SKILL.md has 961 words of instructions outside code blocks.

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

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); the scripts in this folder are not scanned.

SKILL.md

The full file from WordPress/wordpress-playground at commit 48cd2db, republished under its GPL-2.0 licence (© WordPress). 961 words, ~1,823 tokens.

Download SKILL.mdSave it as .claude/skills/doc-screenshots/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.
name
doc-screenshots
description
Annotate UI screenshots with documentation callouts in Fellyph's established visual style — uniform-width orange arrows with white halos, double-stroke target outlines, numbered callout cards, dim overlays and a framed canvas. Use this whenever the user asks to annotate a screenshot, add arrows or callouts to a screenshot, create documentation images, highlight UI controls in a capture, or produce docs/tutorial visuals for Playground, Studio or any web UI — even if they just say "add arrows to this" or "make a docs screenshot".

Documentation Screenshot Annotations

Produce annotated UI screenshots in one specific house style: uniform-width orange (#e8590c) arrows with white halos, double-stroke blue outlines around targets, and (for overviews) a row of numbered callout cards over a dimmed screenshot. Never use stock arrow shapes, stroked polylines, or ad-hoc styles.

The geometry engine lives in scripts/annotate.py. Your job is to produce accurate coordinates and a config JSON; the script renders everything (supersampling, Bézier ribbons, halos, cards, shadows, WEBP export) exactly to spec. Do not reimplement the drawing by hand.

Workflow

  1. Capture. Take screenshots at deviceScaleFactor: 2. Never eyeball coordinates: record every target's bounding box programmatically and save the boxes to JSON — including regions (panels, sidebars, block trees), not just buttons; eyeballed region outlines are the most common quality-gate failure. With Playwright:

    js
    const viewport = { width: 1440, height: 900 };
    const page = await browser.newPage({ viewport, deviceScaleFactor: 2 });
    // ... navigate, prepare UI state ...
    const box = await page.locator('button:has-text("Export")').boundingBox();
    await page.screenshot({ path: 'shot.png' });

    Iframes: Playwright's locator(...).boundingBox() already returns main-viewport coordinates, even inside nested iframes (Playground nests main page → remote.html wrapper → the WordPress scope frame) — use the boxes as-is, no offsets. Only raw getBoundingClientRect() inside a frame's own evaluate() (or the Chrome DevTools MCP tools) needs the enclosing iframe's box offset added.

    WordPress modals: Editor screens open welcome guides ("Edit your site" → Get started) whose overlay swallows clicks; some have no aria-label="Close" button. Dismiss with an Escape loop — while .components-modal__screen-overlay exists, press Escape on the frame's body, wait ~1s — and retry the blocked click between attempts. The modal can appear after the page looks loaded, so dismiss lazily around the click, not once up front.

    Prefer driving the browser from Node with the repo's own node_modules/playwright; otherwise run python3 -m pip install playwright && python3 -m playwright install chromium, or use the Chrome DevTools MCP capture tools.

    Before capturing, clean up dev-environment artifacts such as update nags, debug badges, and plugin notices. They must not appear in docs imagery.

  2. Author the config. All geometry is in CSS px relative to the screenshot's top-left. Write a config JSON using the schema in the script's docstring; read it first. Runnable examples of both modes are in examples/ and share the bundled sample-shot.webp. Then run:

    bash
    python .agents/skills/doc-screenshots/scripts/annotate.py config.json --crops crops/

    The script needs Python with Pillow. If no suitable interpreter is active, create a virtual environment in the session scratchpad with python3 -m venv <scratchpad>/venv && <scratchpad>/venv/bin/python -m pip install Pillow, then call that interpreter directly. The script validates the config up front and exits with a readable config error: message on bad input; output must be a .webp path.

  3. Quality gate — actually look. Read the rendered WEBP at full size, plus the zoomed crops the script saves of every arrowhead and outline (named <output-stem>-NN-<spot>.png, so one crops directory can serve every config in a batch). Check that tip gaps are even (5–7px short of each outline), halos are unbroken, no arrow crosses another arrow or a sibling annotation, stderr has no card-text overflow warnings, and artifacts are removed. Also sanity-check legibility at docs width (~860px) and mobile (~343px); if labels become unreadable, simplify rather than shrink. Fix and re-render until clean.

Choosing the annotation mode

  • Pointing at specific controls (a dialog walkthrough, "click here"): use outlines + free arrows. No dim, no cards. One arrow per target, tail starting from empty space, arriving straight onto the outline.
  • Overview with a legend ("these are the three persistence controls"): use cards + outlines + dim. Cards get target indexes and the script auto-draws vertical arrows from each card's bottom edge onto its outline. Set dim.region to the area holding the documented controls so they stay at full brightness while the rest dims 24% toward #28313b.
  • Add chrome_bar (44px bar, traffic lights, URL pill) only when browser context matters to the reader.
Show full SKILL.md (335 more words)Show less

Placement rules the script cannot decide for you

  • Arrow endpoints: the tip must stop 5–7px short of the target's outline (for card arrows the script handles the 6px gap; for free arrows, place to accordingly). Both tangents are axis-parallel — pick axis so the arrow leaves and arrives straight, giving the calm S-curve.
  • Arrows must never cross each other or overlap another annotation. If a layout forces a crossing, move the tail, flip the axis, or reorder cards so each card sits roughly above its target.
  • Outlines must enclose the whole control including secondary lines (a row's timestamp, a button's icon), not just the text node you queried for. Pad 6–10px, radius 10–14 for rounded rects; plain circles r≈25 for icon-only buttons.
  • Card copy: title 2–3 words, subtitle one short clause. The script warns on stderr if text overflows its card — treat that as a hard failure.

Style constants (already baked into the script — do not override)

Arrows are orange #e8590c on pure white halos; outlines, badges and cards stay blue #3858e9. The shaft is a uniform 9px line (constant top to bottom, round caps) ending in an open chevron head — two 16px diagonal strokes of the same width sweeping back from the tip at ±35°; halo expanded 3.2px per side. Outline = white width 9 on the bbox expanded 2.5px, blue width 4 on the exact bbox. Canvas #f6f7f7, 36px margins, rounded frame with 1px #dcdcde border and soft shadow. Cards: white, radius 16, 1px #ccced0 border, double shadow, blue badge r22, Helvetica Neue (27px bold title #101517 / 19px subtitle #2c3338). Export is WEBP quality ~89 after a single LANCZOS downsample from the supersampled canvas.

Reference outputs in this style: an action walkthrough (free arrows onto dialog controls) and an overview legend (three cards over a dimmed page) — match their look, spacing and restraint.

Repo layout

The source of truth is .agents/skills/doc-screenshots/. .claude/skills is a committed symlink to ../.agents/skills, so Claude Code loads the same files — edit only under .agents/skills/ and never create a separate copy.

© WordPress, GPL-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

SKILL.md and 6 other files (scripts) in .agents/skills/doc-screenshots of WordPress/wordpress-playground.

  • SKILL.md
  • evals/evals.json
  • evals/files/boxes.json
  • evals/files/broken-config.json
  • examples/config-overview-cards.json
  • examples/config-walkthrough-arrows.json
  • scripts/annotate.py

Open the folder on GitHubat commit 48cd2db

Compare with similar skills

Doc Screenshots 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.

Doc Screenshots compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Doc Screenshots this skillWordPress/wordpress-playground2k—~1.8kAutomated safety check: PassGPL-2.0
UI Visual DebuggingNangoHQ/nango13k—~1.3kAutomated safety check: PassCustom licence
Verify Debbie Codesdebs-obrien/debbie.codes142—~1.9kAutomated safety check: PassNone
UI QA SweepLanternOps/breeze132—~3kAutomated safety check: NotesAGPL-3.0
Shogun Screenshotyohey-w/multi-agent-shogun1.4k—~901Automated safety check: NotesMIT
Playwright CLIbitsocialnet/5chan135—~1.1kAutomated safety check: NotesGPL-3.0

Similar skills

  • 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.

    13k GitHub stars~1.3k tokensUpdated today
    Testing & QAAuto-check passed
  • Verify Debbie Codes

    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.

    142 GitHub stars~1.9k tokensUpdated today
    Testing & QAAuto-check passed
  • UI QA Sweep

    LanternOps/breeze

    Broad regression QA of the Breeze RMM web UI via Playwright — exercising everyday MSP workflows and setup tasks like a human QA tester, logging functional PASS/FAIL plus UI/UX observations, and…

    132 GitHub stars~3k tokensUpdated today
    Testing & QAAuto-check: notes
  • Shogun Screenshot

    yohey-w/multi-agent-shogun

    スクリーンショットの取得・加工を行う。ローカルスクショから最新画像を取得、 PlaywrightでWebページをキャプチャ、画像のトリミング・リサイズ、機微情報を黒塗りマスキング。

    1.4k GitHub stars~901 tokensUpdated 2 mo ago
    Testing & QAAuto-check: notes
  • Playwright CLI

    bitsocialnet/5chan

    Verify browser behavior or reproduce a web UI issue with the installed Playwright CLI.

    135 GitHub stars~1.1k tokensUpdated yesterday
    Testing & QAAuto-check: notes
  • Webapp Testing

    LeastBit/Claude_skills_zh-CN

    使用 Playwright 与本地 Web 应用程序交互及进行测试的工具包。支持验证前端功能、调试 UI 行为、捕获浏览器截图以及查看浏览器日志。

    588 GitHub stars~604 tokensUpdated 8 mo ago
    Testing & QAAuto-check passed

More from WordPress/wordpress-playground

  • Compile Php Wasm

    WordPress/wordpress-playground

    Compile PHP.wasm main modules and side modules (dynamic extensions) for Node.js and web platforms.

    2k GitHub stars~2.8k tokensUpdated today
    Auto-check passed
  • Debug Php Wasm Main Module

    WordPress/wordpress-playground

    Debug PHP.wasm main module crashes including Asyncify errors (unreachable, memory access out of bounds), JSPI errors (SuspendError, trying to suspend JS frames), WASM memory growth bugs, and runtime…

    2k GitHub stars~3.1k tokensUpdated today
    Auto-check passed
  • Debug Php Wasm Side Modules

    WordPress/wordpress-playground

    Debug WASM side modules (dynamic PHP extensions) including dlopen failures, SIDEMODULE loading, JSPI suspension crashes in extensions, C++ weak symbol issues, and extension runtime errors.

    2k GitHub stars~2.5k tokensUpdated today
    Auto-check passed
  • Playground Website Debugging

    WordPress/wordpress-playground

    Debug the WordPress Playground website by running the dev server from source and interacting with it via Playwright MCP.

    2k GitHub stars~1.9k tokensUpdated today
    Auto-check passed

Questions about Doc Screenshots

What does Doc Screenshots do?

Annotate UI screenshots with documentation callouts in Fellyph's established visual style — uniform-width orange arrows with white halos, double-stroke target outlines, numbered callout cards, dim…. Doc Screenshots is an agent skill from WordPress/wordpress-playground. Annotate UI screenshots with documentation callouts in Fellyph's established visual style — uniform-width orange arrows with white halos, double-stroke target outlines, numbered callout cards, dim overlays and a framed canvas.

When should I use Doc Screenshots?

Doc Screenshots fits situations like: asks to annotate a screenshot; callouts to a screenshot; create documentation images; highlight UI controls in a capture.

How do I install Doc Screenshots in Claude Code?

Run `npx skills add WordPress/wordpress-playground --skill doc-screenshots -a claude-code`. Or copy the skill folder (.agents/skills/doc-screenshots in WordPress/wordpress-playground) into .claude/skills/doc-screenshots in your project. Claude Code loads it when a task matches its description.

How do I install Doc Screenshots in Codex?

Run `npx skills add WordPress/wordpress-playground --skill doc-screenshots -a codex`. Or copy the skill folder (.agents/skills/doc-screenshots in WordPress/wordpress-playground) into .agents/skills/doc-screenshots in your project. Codex loads it when a task matches its description.

Can I use Doc Screenshots 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 WordPress/wordpress-playground --skill doc-screenshots -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/doc-screenshots, .gemini/skills/doc-screenshots, .github/skills/doc-screenshots and .opencode/skills/doc-screenshots in your project.

What does Doc Screenshots need to run?

Going by SKILL.md and its folder, Doc Screenshots needs Python for the scripts in its folder and the command-line tools its instructions call (python3 and python). Our summary lists: Python 3.

Does Doc Screenshots 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 Doc Screenshots 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Doc Screenshots use?

Doc Screenshots is published under the GPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Doc Screenshots use?

About 1.8k tokens (SKILL.md is roughly 7.3k 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 Doc Screenshots?

Skills that share tags, products or a category with Doc Screenshots: UI Visual Debugging (NangoHQ/nango, 13k stars), Verify Debbie Codes (debs-obrien/debbie.codes, 142 stars), UI QA Sweep (LanternOps/breeze, 132 stars) and Shogun Screenshot (yohey-w/multi-agent-shogun, 1.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Doc Screenshots?

WordPress (a GitHub organization) maintains it in WordPress/wordpress-playground, which has 1,973 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 8, 2026.

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