Web Application Testing
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
Capture a spatial hierarchy of rendered DOM elements from any webpage.
$ npx skills add adobe/skills --skill page-tree -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install adobe/skills page-tree --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/adobe/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/web/skills/page-tree .claude/skills/page-tree && 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 "page-tree" agent skill from https://github.com/adobe/skills/tree/main/plugins/web/skills/page-tree into .claude/skills/page-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-tree", 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/adobe/skills/tree/main/plugins/web/skills/page-treeType 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 adobe/skills --skill page-tree -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install adobe/skills page-tree --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/web/skills/page-tree .agents/skills/page-tree && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "page-tree" agent skill from https://github.com/adobe/skills/tree/main/plugins/web/skills/page-tree into .agents/skills/page-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-tree", 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 adobe/skills --skill page-tree -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install adobe/skills page-tree --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/web/skills/page-tree .cursor/skills/page-tree && 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 "page-tree" agent skill from https://github.com/adobe/skills/tree/main/plugins/web/skills/page-tree into .cursor/skills/page-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-tree", 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/adobe/skills.git --path plugins/web/skills/page-tree--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 adobe/skills --skill page-tree -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install adobe/skills page-tree --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/web/skills/page-tree .gemini/skills/page-tree && 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 "page-tree" agent skill from https://github.com/adobe/skills/tree/main/plugins/web/skills/page-tree into .gemini/skills/page-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-tree", 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 adobe/skills page-treeInstalls 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 adobe/skills --skill page-tree -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/web/skills/page-tree .github/skills/page-tree && 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 "page-tree" agent skill from https://github.com/adobe/skills/tree/main/plugins/web/skills/page-tree into .github/skills/page-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-tree", 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 adobe/skills --skill page-tree -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install adobe/skills page-tree --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/web/skills/page-tree .opencode/skills/page-tree && 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 "page-tree" agent skill from https://github.com/adobe/skills/tree/main/plugins/web/skills/page-tree into .opencode/skills/page-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "page-tree", 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.
page-treeCapture a spatial hierarchy of rendered DOM elements from any webpage.
Page Tree is an agent skill from adobe/skills. Capture a spatial hierarchy of rendered DOM elements from any webpage. Injects a pre-built script via playwright-cli that walks the DOM, detects layout grids, extracts backgrounds, prunes invisible nodes, promotes elements rendered outside their DOM parent (overlays, fixed navs, modals), and tags overlay nodes with occlusion metadata. Returns three outputs: LLM-friendly indented text, structured JSON tree, and a nodeMap mapping positional IDs to CSS selectors with background and overlay data. Use before page…
Its SKILL.md is about 1.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts (for example `.releaserc.json`, `evals/evals.json` and `package.json`). Compatibility notes: Requires playwright-cli on PATH. Run playwright-cli --help for usage.
It sits in Testing & QA, covering Browser testing. It works with Playwright. The repository describes itself as: Adobe Skills for Agents. The licence is Apache-2.0.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit cbc9952. 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 1 file in scripts/ (JavaScript), which the agent can run.
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.
Requires playwright-cli on PATH. Run `playwright-cli --help` for usage.
From compatibility in the SKILL.md frontmatter.
Page Tree loads about 1.2k tokens when it runs. Until then it costs about 189 tokens; SKILL.md has 422 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); the scripts in this folder are not scanned.
The full file from adobe/skills at commit cbc9952, republished under its Apache-2.0 licence (© adobe). 422 words, ~1,221 tokens.
.claude/skills/page-tree/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Capture a spatial hierarchy of rendered DOM elements from any webpage via
playwright-cli. Returns three outputs for downstream consumption.
playwright-cli available (run playwright-cli --help to verify)if [[ -n "${CLAUDE_SKILL_DIR:-}" ]]; then
VT_BUNDLE="${CLAUDE_SKILL_DIR}/scripts/page-tree-bundle.js"
else
VT_BUNDLE="$(find ~/.claude \
-path "*/page-tree/scripts/page-tree-bundle.js" \
-type f 2>/dev/null | head -1)"
fiVerify the path is non-empty before continuing.
| Parameter | Default | Description |
|---|---|---|
minWidth | 900 | Minimum element width in px. Elements narrower than this are excluded. position: fixed elements always pass regardless. Lower for more detail (e.g., 300 for mobile). |
Run the script location block above and store the path in VT_BUNDLE.
If the path is empty, report an error and stop.
Inject the bundle via initScript in the playwright-cli config, then
capture with a pure expression eval. Do NOT use inline $(cat) or IIFE
wrappers — playwright-cli eval only accepts pure expressions (it wraps
them as () => (EXPR) internally, so function bodies with statements
fail).
URL="<target URL>"
MINWIDTH=900 # or caller-specified value
# Build config with initScript — injects bundle before navigation
VT_CONFIG="/tmp/vt-config-$$.json"
echo "{\"browser\":{\"initScript\":[\"$VT_BUNDLE\"]}}" > "$VT_CONFIG"
# Open page (or use existing session) — bundle creates window.__visualTree
playwright-cli --config="$VT_CONFIG" open "$URL"
sleep 2
# Capture — pure expression, no IIFE
VT_RESULT=$(playwright-cli eval \
"JSON.stringify(window.__visualTree.captureVisualTree($MINWIDTH))")
rm -f "$VT_CONFIG"Parse the returned JSON string.
Present three sections to the caller:
1. Visual Tree (text format)
The primary output for LLM consumers. Show in a code block:
r @0,0 1440x5667
rc1 [3x1] @0,0 1440x83 "Header text..."
rc2 @0,83 1440x5216
rc2c1 [bg:image] @0,83 1440x410 "Hero text..."
...Format: ID [role] [CxR] [bg:type] @x,y wxh "text..."
2. Node Map
Positional ID to metadata lookup. Show as JSON. Each entry contains:
selector: CSS selector for the DOM elementbackground (optional): { type, value, raw, source }overlay (optional): { occluding: [sibling IDs this node covers] }Overlay entries indicate the node was promoted from a deeper DOM position to root level because it rendered outside its parent's bounds (e.g., cookie banners, fixed navs, modals).
3. JSON Tree
Full structured tree. Show as JSON only if the caller requests it, otherwise mention it is available. Each node contains: tag, selector, bounds, text, role, layout, background, children.
playwright-cli goto <url> then
wait for network idle) for best results.© adobe, Apache-2.0. 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 4 other files (scripts) in plugins/web/skills/page-tree of adobe/skills.
Open the folder on GitHubat commit cbc9952
Page Tree 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 |
|---|---|---|---|---|---|---|
| Page Tree this skilladobe/skills | 195 | — | ~1.2k | Automated safety check: Pass | Apache-2.0 | |
| Web Application Testinganthropics/skills | 180k | 51 repos | ~966 | Automated safety check: Pass | Apache-2.0 | |
| Playwright CLIsanity-io/sanity | 6.4k | 18 repos | ~1.9k | Automated safety check: Pass | MIT | |
| playwright-cli Browser Automationgithub/gh-aw | 5.3k | 23 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.
sanity-io/sanity
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
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.
adobe/skills
Scaffolds, implements, deploys and debugs Adobe Runtime actions in App Builder projects, with templates for webhooks, events, database CRUD, sequences and Asset Compute workers.
adobe/skills
Launches Chrome with an unpacked extension over CDP, opens its sidepanel, popup or options page, and hands over to cdp-connect for clicks, typing and screenshots.
adobe/skills
Extracts icons, metadata, text, forms, videos and social links from any web page with playwright-cli, with SVG icon classification and cleanup.
adobe/skills
Detect all languages used on a webpage — both declared (html@lang, hreflang alternate links, nested lang= attributes, meta content-language) and actually present in the body text (Google CLD3 via…
adobe/skills
Prepare any webpage for clean interaction by detecting and removing disruptive overlays (cookie banners, GDPR consent, modals, popups, newsletter signups, paywalls, login walls).
adobe/skills
Reduce a webpage to a structural skeleton with semantic tokens.
Works with
Categories
Capture a spatial hierarchy of rendered DOM elements from any webpage. Page Tree is an agent skill from adobe/skills. Capture a spatial hierarchy of rendered DOM elements from any webpage.
Page Tree fits situations like: tasks that involve Browser testing.
Run `npx skills add adobe/skills --skill page-tree -a claude-code`. Or copy the skill folder (plugins/web/skills/page-tree in adobe/skills) into .claude/skills/page-tree in your project. Claude Code loads it when a task matches its description.
Run `npx skills add adobe/skills --skill page-tree -a codex`. Or copy the skill folder (plugins/web/skills/page-tree in adobe/skills) into .agents/skills/page-tree 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 adobe/skills --skill page-tree -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/page-tree, .gemini/skills/page-tree, .github/skills/page-tree and .opencode/skills/page-tree in your project.
Going by SKILL.md and its folder, Page Tree needs JavaScript for the scripts in its folder. Our summary lists: Node.js. Compatibility (from SKILL.md): Requires playwright-cli on PATH. Run `playwright-cli --help` for usage..
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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Page Tree is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.2k tokens (SKILL.md is roughly 4.9k 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 Page Tree: Web Application Testing (anthropics/skills, 180k stars), Playwright CLI (sanity-io/sanity, 6.4k stars), playwright-cli Browser Automation (github/gh-aw, 5.3k 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.
adobe (a GitHub organization) maintains it in adobe/skills, which has 195 GitHub stars. The repository holds 105 skills in this directory. The repository was last updated on October 6, 2026.
Source: adobe/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.