Skip to content
AI & Agents
Skill

/obscura

Operate and validate Obscura for JavaScript page loading, stealth browsing, anti-fingerprinting, tracker blocking, screenshots and visual comparison, CDP automation with Puppeteer or Playwright, screencasting, PDF export, MCP browser interaction, and web extraction. Use when

BOOST
From plugin
obscura
29k1 skill
Install
$ npx -y skills add h4ckf0r0day/obscura --skill obscura --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/obscura

Context preview

The summary Claude sees to decide when to auto-load this skill.

Operate and validate Obscura for JavaScript page loading, stealth browsing, anti-fingerprinting, tracker blocking, screenshots and visual comparison, CDP automation with Puppeteer or Playwright, screencasting, PDF export, MCP browser interaction, and web extraction. Use when

SKILL.md

obscura.SKILL.md
name: obscura
description: Operate and validate Obscura for JavaScript page loading, stealth browsing, anti-fingerprinting, tracker blocking, screenshots and visual comparison, CDP automation with Puppeteer or Playwright, screencasting, PDF export, MCP browser interaction, and web extraction. Use when running Obscura against deterministic fixtures or real sites, diagnosing rendering, geometry, resource, identity, or transport failures, or choosing the correct CLI, CDP, MCP, rendering, or stealth workflow.

Obscura

Use Obscura as a lightweight, stealth-capable Rust headless browser for automation. It embeds V8, owns the DOM and rendering pipeline, and exposes Chrome DevTools Protocol workflows without launching Chromium. Treat rendering and stealth as first-class, complementary capabilities.

Build variants

Official release archives and Docker images include rendering. For a source checkout, build release mode with the render feature:

CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=2 cargo build --release -p obscura-cli --bins --features render

Build rendering and stealth together for the wreq/BoringSSL transport, browser-identity protections, and tracker blocking:

CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=2 cargo build --release -p obscura-cli --bins --features render,stealth

Build without rendering when only DOM, extraction, or CDP automation is needed:

CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=2 cargo build --release -p obscura-cli --bins --no-default-features
CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=2 cargo build --release -p obscura-cli --bins --no-default-features --features stealth

Use `./target/release/obscura` in the commands below when working from source.

Use stealth

The stealth build keeps the complete rendering, screenshot, screencast, PDF, CDP, and MCP surface. It adds a consistent browser fingerprint across TLS, HTTP headers, user agent, navigator, and WebGL surfaces; masks `navigator.webdriver`; masks patched native functions; and blocks the built-in tracker-domain list.

Enable stealth at runtime with the global `--stealth` flag. It applies to `fetch`, `serve`, `scrape`, and `mcp`, before or after the subcommand:

obscura --stealth fetch https://example.com --screenshot page.png
obscura serve --stealth --port 9222

The runtime flag needs a `render,stealth` build for the wreq/BoringSSL transport.

Fetch, evaluate, and capture

obscura fetch https://example.com --dump text
obscura fetch https://example.com --eval "document.title"
obscura fetch https://example.com --screenshot page.png
obscura fetch https://example.com \
  --eval "window.scrollTo(0, document.documentElement.scrollHeight)" \
  --screenshot bottom.png

The CLI screenshot path writes PNG and accepts one URL. An omitted `--wait` uses adaptive settling with a five-second cap. An explicit `--wait N` is a fixed delay of `N` seconds. `--timeout` is also measured in seconds and bounds navigation separately.

Use `--dump original` for a binary or raw HTTP response that should bypass DOM and JavaScript processing. Use `scrape` for many URLs when the requested output does not require one screenshot per URL.

A local `http://127.0.0.1:N` needs the global `--allow-private-network`, which unblocks loopback, RFC1918 and link-local; without it the fetch fails with `Access to private/internal IP address 127.0.0.1 is not allowed`.

Drive CDP

Start the server:

obscura serve --port 9222

Connect Puppeteer with `puppeteer-core` or Playwright with `chromium.connectOverCDP`. Standard `page.screenshot()` supports viewport and full-page capture; `page.pdf()` produces raster-backed print output. Scroll with page JavaScript before a viewport capture when the user wants a lower section of the page.

Use raw CDP for `Page.captureScreenshot`, `Page.startScreencast`, and `Page.printToPDF`. A screencast client must acknowledge every `Page.screencastFrame` using `Page.screencastFrameAck`. Frames are driven by page activity; this is not fixed-frame-rate desktop capture.

PDF output supports paper dimensions, margins, landscape, scale, backgrounds, and page ranges. It does not currently provide selectable text, tagged PDF, outlines, headers/footers, or complete CSS paged-media behavior.

Drive MCP

Run `obscura mcp` for stdio or `obscura mcp --http --port 3000` for HTTP. Navigate first, then inspect or interact with the current page. Refresh a snapshot or interactive-element listing after navigation, clicking, scrolling, or a framework rerender because element references may have changed.

Render-enabled MCP builds expose `browser_screenshot` as an MCP PNG image and `browser_pdf` as an embedded PDF resource. MCP does not stream screencast frames; choose CDP for that workflow.

Validate visual behavior

Start with a deterministic fixture that isolates the behavior. Then test a broad real-site set at both initial and scrolled positions. For an engine comparison, keep viewport, device scale, user agent, network inputs, settle policy, scroll, animation time, and capture boundary identical.

Confirm both engines navigated successfully and produced nonblank images before interpreting a diff. Treat a pixel metric as a regression tripwire, not a verdict. Inspect resource completion, box geometry, line wrapping, structural edges, clipping, and fixed or sticky behavior, then reduce real failures to a fixture. Do not introduce hostname-specific rendering logic.

Set expectations accurately

Obscura supports many common layout and paint paths but is not a bundled Chrome build. Long-tail CSS, service workers, some Web APIs, native media, GPU or compositor effects, PDF structure, and platform font rasterization can differ from Chromium. Preserve the project's existing positioning and published benchmark claims when editing its documentation. Use the benchmark suite and matched inputs when adding or updating performance or fidelity measurements.

Read more
Ships withobscura

obscura serve --port 9222 --allow-private-network

Get the whole plugin
Stats
29,458
Stars
2,219
Forks
Active
Maintenance
Rust
Language
Apache-2.0
License
11h ago
Last commit
6mo ago
Created
3h ago
Added

Repo: h4ckf0r0day/obscura