Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add JansenAnalytics/claudex --skill website-screenshotgit clone --depth 1 https://github.com/JansenAnalytics/claudexWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/jansenanalytics/claudex/website-screenshot)<a href="https://agentmods.dev/skills/jansenanalytics/claudex/website-screenshot"><img src="https://agentmods.dev/badge/skills/jansenanalytics/claudex/website-screenshot.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00084 | $0.00858 |
| Opus 5 | $0.00042 | $0.00429 |
| Sonnet 5 | $0.00017 | $0.00172 |
| Haiku 4.5 | $0.00008 | $0.00086 |
Grade A, and why
website-screenshot scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 79 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Website Screenshot
Uses playwright-core + system Chromium to capture screenshots headlessly. Prints the output path to stdout; exits 0 on success, 1 on failure.
Script
${CLAUDE_SKILLS_DIR:-$HOME/.claude-agent/.claude/skills}/website-screenshot/scripts/screenshot.cjs
Note: The
.cjsextension is required — OpenClaw'spackage.jsonhas"type": "module", which breaks.jsfiles usingrequire.
Usage
node <script> <url> [options]
| Option | Default | Description |
|---|---|---|
--output <path> |
/tmp/screenshot-<ts>.png |
Where to save the PNG |
--width <px> |
1280 |
Viewport width |
--height <px> |
900 |
Viewport height |
--full-page |
off | Capture full scrollable page |
--wait <strategy> |
domcontentloaded |
domcontentloaded / load / networkidle |
--delay <ms> |
0 |
Extra wait after load (for JS-heavy pages) |
--timeout <ms> |
20000 |
Navigation timeout |
--dark |
off | Emulate dark color scheme |
--mobile |
off | 375×812 viewport, pixel ratio 2, mobile UA |
The URL scheme is auto-added if missing (example.com → https://example.com).
Workflow
- Run the script, capture stdout as the output path.
- Save to a persistent path —
/tmpvanishes between exec calls. Use the workspace or a reliable path. - Send via
messagetool, then delete the file.
Standard pattern
OUTFILE=$HOME/.openclaw/workspace/screenshot-$(date +%s).png
node ${CLAUDE_SKILLS_DIR:-$HOME/.claude-agent/.claude/skills}/website-screenshot/scripts/screenshot.cjs \
"https://example.com" \
--output "$OUTFILE" \
--wait domcontentloaded
# Then in message tool:
# media: $OUTFILE
# caption: "example.com"
# Then clean up:
rm "$OUTFILE"
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 79 lines · 84 tokens per session scan A 65b36c37c610
website-screenshot is a skill published in the GitHub repository JansenAnalytics/claudex (5 stars, last pushed 2mo ago), licensed MIT. It adds 84 tokens to every session and 858 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
stealth-browser-launch
Launch stealth Chromium with C++ fingerprint patches for anti-bot bypass.
browser-automation-expert
Drive a real browser to navigate, extract data and complete flows on sites without an API: scraping, crawling, authentication, dynamic content and anti-bot handling. Use when the user mentions web scraping, crawling, browser automation, Puppeteer or headless Chrome, wants data pulled from a website, needs a login or…
fortress-stealth-browser
Use when a web fetch is blocked — Cloudflare, DataDome, PerimeterX, Akamai, a 403/429, a CAPTCHA/"Press & Hold", "Access denied", an empty JavaScript shell, or a page whose data only appears after client-side rendering. Drives a real recompiled-Chromium stealth engine (Fortress) via the Fortress MCP to fetch, extract…
playwright-cli
Automate browser interactions, test web pages and work with Playwright tests.
spanify-buffers
Find and fix unsafe buffer operations in a C++ file by removing UNSAFETODO markers and replacing unsafe raw pointers/C-style functions with base::span and standard safe containers. Use when the user asks to fix unsafe buffer warnings or -Wunsafe-buffer-usage errors. Don't use for other types of memory safety bugs like…
chrome-performance-optimizer
Autonomous multi-agent performance optimization loop for Chromium and V8. Supports profile-seeded mode (analyzing Speedometer 3 / JetStream profiles via pprof or Sagacity MCP) and pattern-driven discovery mode (fan-out exploration of Blink and V8 macro-patterns grounded in historical wins and past rejected CLs).…