Visual context analyzer for AI agents. Provides screenshots, accessibility scans, DOM snapshots, and element descriptions for web pages. Use when you need to see what a web page looks like, analyze accessibility issues, inspect DOM structure, or get detailed element information. Triggers on requests like "take a screenshot", "check accessibility", "what does this page look like", "analyze the UI", "inspect this element", or any visual/UI analysis task.
npx skills add https://github.com/majiayu000/claude-skill-registry --skill agent-eyes
Visual context analyzer for web pages. Provides AI agents with the ability to "see" web applications through screenshots, accessibility scans, DOM snapshots, and element descriptions.
uv package manager (recommended)playwright install chromiumAll commands support --compact / -c flag for token-efficient output:
| Mode | Screenshot | DOM | A11y | Total Tokens |
|------|------------|-----|------|--------------|
| Standard | Base64 inline | depth=5, 20 children | Full violations | ~500K+ |
| Compact | File path only | depth=3, 10 children | Summary only | ~3-5K |
Use compact mode when context window size is a concern (which is most of the time).
# Compact context - reduces ~500K tokens to ~3-5K tokens
uv run $SKILL_DIR/agent_eyes.py context http://localhost:3000 --compact
# Compact screenshot - always saves to file, never returns base64
uv run $SKILL_DIR/agent_eyes.py screenshot http://localhost:3000 --compact
# Compact a11y - returns summary + top N issues only
uv run $SKILL_DIR/agent_eyes.py a11y http://localhost:3000 --compact
# Compact DOM - stricter limits on depth and children
uv run $SKILL_DIR/agent_eyes.py dom http://localhost:3000 --compact
All commands use uv run for automatic dependency management:
SKILL_DIR=".claude/skills/agent-eyes/scripts"
Capture full page or element screenshots:
# Full page screenshot (saves to .canvas/screenshots/)
uv run $SKILL_DIR/agent_eyes.py screenshot http://localhost:3000
# Element screenshot
uv run $SKILL_DIR/agent_eyes.py screenshot http://localhost:3000 --selector ".hero"
# Save to specific path
uv run $SKILL_DIR/agent_eyes.py screenshot http://localhost:3000 --output ./tmp/page.png
# Get as base64 (for inline context) - NOT recommended, use --compact instead
uv run $SKILL_DIR/agent_eyes.py screenshot http://localhost:3000 --base64
# RECOMMENDED: Compact mode - always saves to file, never returns base64
uv run $SKILL_DIR/agent_eyes.py screenshot http://localhost:3000 --compact
Run axe-core accessibility analysis:
# Full page scan (WCAG 2.1 AA)
uv run $SKILL_DIR/agent_eyes.py a11y http://localhost:3000
# Scoped to element
uv run $SKILL_DIR/agent_eyes.py a11y http://localhost:3000 --selector "main"
# WCAG AAA level
uv run $SKILL_DIR/agent_eyes.py a11y http://localhost:3000 --level AAA
# RECOMMENDED: Compact mode - summary + top issues only (~1-2K tokens vs 100K+)
uv run $SKILL_DIR/agent_eyes.py a11y http://localhost:3000 --compact
uv run $SKILL_DIR/agent_eyes.py a11y http://localhost:3000 --compact --max-issues 5
Get simplified DOM tree:
# Full page DOM
uv run $SKILL_DIR/agent_eyes.py dom http://localhost:3000
# Subtree only
uv run $SKILL_DIR/agent_eyes.py dom http://localhost:3000 --selector ".content"
# Control depth and children
uv run $SKILL_DIR/agent_eyes.py dom http://localhost:3000 --depth 3 --max-children 10
# RECOMMENDED: Compact mode - depth=3, max-children=10, text=50 chars
uv run $SKILL_DIR/agent_eyes.py dom http://localhost:3000 --compact
Get detailed element information (styles, bounding box, attributes):
uv run $SKILL_DIR/agent_eyes.py describe http://localhost:3000 --selector ".hero-button"
Get comprehensive context bundle (screenshot + a11y + DOM + description):
# Full context for page
uv run $SKILL_DIR/agent_eyes.py context http://localhost:3000
# Focused on element
uv run $SKILL_DIR/agent_eyes.py context http://localhost:3000 --selector ".hero"
# Without screenshot (smaller output)
uv run $SKILL_DIR/agent_eyes.py context http://localhost:3000 --no-screenshot
# RECOMMENDED: Compact mode - file paths only, limited DOM/a11y (~3-5K tokens)
uv run $SKILL_DIR/agent_eyes.py context http://localhost:3000 --compact
# Compact with custom limits
uv run $SKILL_DIR/agent_eyes.py context http://localhost:3000 --compact \
--dom-depth 2 --max-children 5 --max-issues 5
All commands return JSON to stdout:
{
"ok": true,
"...": "command-specific fields"
}
On error:
{
"ok": false,
"error": "Error description"
}
Compact context output (~3-5K tokens instead of ~500K):
{
"ok": true,
"url": "http://localhost:3000",
"title": "My App",
"timestamp": "2026-01-22T10-30-00-000Z",
"compact": true,
"screenshot_path": ".canvas/screenshots/2026-01-22T10-30-00-000Z.png",
"screenshot_size": 443281,
"dom": {
"tag": "body",
"children": [...]
},
"a11y_summary": {
"total_violations": 5,
"by_severity": {"critical": 1, "serious": 2, "moderate": 2, "minor": 0},
"top_issues": [
{"id": "color-contrast", "impact": "serious", "affected_count": 3}
]
}
}
Compact a11y output (~1-2K tokens instead of ~100K):
{
"ok": true,
"total_violations": 15,
"by_severity": {"critical": 2, "serious": 5, "moderate": 6, "minor": 2},
"by_category": {"color": 3, "aria": 5, "keyboard": 2},
"top_issues": [
{
"id": "color-contrast",
"impact": "serious",
"description": "Elements must have sufficient color contrast...",
"affected_count": 3,
"help_url": "https://dequeuniversity.com/rules/axe/..."
}
],
"passes": 42,
"incomplete": 3
}
npm run dev &
uv run $SKILL_DIR/agent_eyes.py screenshot http://localhost:3000
uv run $SKILL_DIR/agent_eyes.py a11y http://localhost:3000
uv run $SKILL_DIR/agent_eyes.py describe http://localhost:3000 --selector ".problematic-button"
uv run $SKILL_DIR/agent_eyes.py context http://localhost:3000 --selector ".hero"
# 1. Get accessibility violations
uv run $SKILL_DIR/agent_eyes.py a11y http://localhost:3000
# Output shows violations like:
# {
# "ok": true,
# "violations": [
# {
# "id": "color-contrast",
# "impact": "serious",
# "description": "Elements must have sufficient color contrast",
# "nodes": [{"html": "<button class='cta'>..."}]
# }
# ]
# }
# 2. Describe the element to understand current styles
uv run $SKILL_DIR/agent_eyes.py describe http://localhost:3000 --selector ".cta"
# 3. Make code changes to fix the contrast issue
# 4. Re-run a11y to verify fix
uv run $SKILL_DIR/agent_eyes.py a11y http://localhost:3000
.canvas/screenshots/ by default with ISO timestampsnetworkidle before capturing| Operation | Standard Mode | Compact Mode |
|-----------|---------------|--------------|
| Screenshot | ~100-470K tokens (base64) | ~50 tokens (path only) |
| DOM Snapshot | ~50-150K tokens | ~2-3K tokens |
| A11y Scan | ~50-100K tokens | ~500-1K tokens |
| Full Context | ~500K+ tokens | ~3-5K tokens |
Recommendation: Always use --compact flag unless you specifically need base64 data for inline image processing. The compact mode reduces token usage by 99% while preserving all essential information.
| Mode | Use Case |
|------|----------|
| Standard | Debugging, when you need full HTML snippets, when feeding to vision model |
| Compact | Most agent workflows, design reviews, accessibility audits, CI/CD pipelines |
This skill should be used when the user asks to "create a plugin", "scaffold a plugin", "understand plugin structure", "organize plugin components", "set up plugin.json", "use ${CLAUDE_PLUGIN_ROOT}", "add commands/agents/skills/hooks", "configure auto-discovery", or needs guidance on plugin directory layout, manifest configuration, component organization, file naming conventions, or Claude Code plugin architecture best practices.
This skill should be used when the user asks to "create a plugin", "scaffold a plugin", "understand plugin structure", "organize plugin components", "set up plugin.json", "use ${CLAUDE_PLUGIN_ROOT}", "add commands/agents/skills/hooks", "configure auto-discovery", or needs guidance on plugin directory layout, manifest configuration, component organization, file naming conventions, or Claude Code plugin architecture best practices.
| SwiftUI 前端设计 skill — anti AI-slop rules, design direction advisor, brand asset protocol, and five-dimension review. Works with Claude Code, Cursor, Codex, and OpenCode.
An example user-invoked skill that demonstrates frontmatter options and the skills/<name>/SKILL.md layout
Interact with iOS simulator or Android emulator/device using snapshot-based coordinates. Uses accessibility tree snapshots for precise element targeting, with screenshot verification as fallback. Use when navigating the app on a simulator/emulator.
DeepChat app settings modification (DeepChat 设置/偏好) skill. Activate ONLY when the user explicitly asks to change DeepChat's own settings/preferences (e.g., theme, language, font size...). Do NOT activate for OS/system settings, editor settings, or other apps.
Stop coding agents from shipping generic UI. Use UIZZE's 800,000+ real web and iOS screens to build product-specific interfaces, define a design contract, cover required states, and run a hard finish gate. Use for web or iOS UI design, implementation, redesign, critique, and pre-ship review in Codex, Claude Code, Cursor, Copilot, and other coding agents.
> Use this skill when the user is doing hands-on DOCA Erasure Coding programming on a BlueField DPU, ConnectX NIC, or host — bringing up a doca_ec context, picking among the create / recover / update tasks, choosing matrix type / N / K / block size, querying doca_ec_cap_* before sizing, setting doca_mmap src/dst permissions, or debugging DOCA_ERROR_* returns from doca_ec_task_*. Trigger even when the user does not name "DOCA Erasure Coding" or "Reed-Solomon" — typical implicit phrasings include "one data block changed, how do I refresh parity without re-encoding", "a disk failed and 2 parity blocks are gone, can I rebuild", "RAID-6 resilience across 12 disks", "my doca_ec_task_create returns NOT_PERMITTED", or "is this N+K layout still recoverable". Refuse and route elsewhere for non-Reed-Solomon codes (fountain / LDPC / raptor), pure-replication designs, network FEC, or other DOCA accelerator libraries (SHA / Compress / AES-GCM / DMA) — those belong to other skills.
Take majiayu000/agent-eyes from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.