streamkit: Skill for Claude Code

.agents/skills/testing-web-capture/SKILL.md

testing-web-capture is a skill for Claude Code, Codex from streamer45/streamkit. It costs 48 tokens per session (1,676 once invoked), scanned A, original, MPL-2.0.

An end-to-end test guide for StreamKit's web-capture gateway demo, which captures or casts rendered web pages through a native Servo plugin. It covers setup, service startup, timeouts, and endpoint checks.

In plain words
What is it for?
Use it to verify clip and cast endpoints, Servo page rendering, timeout settings, plugin freshness, and isolation between browser sessions.
Why use it?
It helps detect stale native plugins, white frames, cross-session rendering leaks, failed page loads, and incorrect gateway responses.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one. Also seen: installed under .agents/ (shared by several agents).

This is streamer45/streamkit's own configuration. It tells Claude Code and Codex how to work on streamkit itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything streamkit configures →

Reuse

Borrowing it

Nothing to install: this file belongs to streamer45/streamkit. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/streamer45/streamkit/main/.agents/skills/testing-web-capture/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/streamer45/streamkit

Made for: Claude Code, Codex.

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

agentmods badge for testing-web-capture

README.md
[![agentmods](https://agentmods.dev/badge/skills/streamer45/streamkit/testing-web-capture/github.svg)](https://agentmods.dev/skills/streamer45/streamkit/testing-web-capture)
Your own site
<a href="https://agentmods.dev/skills/streamer45/streamkit/testing-web-capture"><img src="https://agentmods.dev/badge/skills/streamer45/streamkit/testing-web-capture/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for testing-web-capture

Your own site · 80×15
<a href="https://agentmods.dev/skills/streamer45/streamkit/testing-web-capture"><img src="https://agentmods.dev/badge/skills/streamer45/streamkit/testing-web-capture.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 48 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,676 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5.1 $0.00048 $0.01676
Opus 5.5 $0.00019 $0.00670
Sonnet 5.5 $0.00010 $0.00335
Haiku 4.5 $0.00005 $0.00168

Measured 2mo ago against content hash de2bd9e68d3f, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

testing-web-capture scanned grade A with 1 finding 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 2mo 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.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

- Live cast: `http://127.0.0.1:8080/cast/<target-url>` → WebM (vp9-sw). curl with `-H 'Accept: video/webm'` to grab raw stream.
.agents/skills/testing-web-capture/SKILL.md · 73 lines

How it starts

The opening of the file, as written. The whole thing — 73 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Testing the web-capture gateway demo

Setup

  1. Go toolchain is required for the gateway (/usr/local/go/bin/go); install from go.dev tarball if missing.
  2. Build + deploy the servo plugin: just build-plugin-native-servo && just copy-plugins-native.
    • Verify freshness: md5sum target/plugins/release/libservo_web.so .plugins/native/servo/libservo_web.so must match and have a recent timestamp. Stale .so files are a known source of white frames / cross-request corruption.
    • skit loads plugins only at startup — restart just skit after copying.
  3. Start backend: just skit (127.0.0.1:4545; auth Auto disables auth on loopback, no token needed locally).
  4. Start gateway: cd examples/web-capture && go run ./cmd/gateway --listen :8080 --skit-url http://127.0.0.1:4545.
    • --load-timeout-secs N / GATEWAY_LOAD_TIMEOUT_SECS (default 5) sets servo's load_timeout_secs in both pipeline templates. It must stay below the gateway's hard-coded 8s mseReadyTimeout, or cast viewers 503.
    • To test a non-default value, run a second gateway on another port (e.g. --listen :8081 --load-timeout-secs 2); both can share one skit.

Endpoints

  • Finite clip: http://127.0.0.1:8080/clip/dur=20s,res=1280x720/<target-url> → MP4 (h264-sw).
  • Live cast: http://127.0.0.1:8080/cast/<target-url> → WebM (vp9-sw). curl with -H 'Accept: video/webm' to grab raw stream.
  • SSRF guard blocks loopback/private targets — use public sites (streamkit.dev is dark-themed, example.com light-themed: a good high-contrast pair for leak checks).

Verifying frames (don't trust playback alone)

  • Extract frames: ffmpeg -i clip.mp4 -vf "select='eq(n,30)+eq(n,300)'" -vsync 0 f_%d.png
  • Live cast WebM files have no cues — ffmpeg -ss/-sseof seeking silently returns the first frame. Extract frames with select='eq(n,N)' full decodes instead, and beware lexicographic sorting of %d-numbered frame files.
  • Pixel stats with PIL: min/max grey and dark-pixel fraction distinguish blank white (min≈255), blank black/pre-paint (max≈0), and real content.
  • Since the first-load gate (plugin >= 0.2.2), clips/casts should show page content from frame 0 (the node holds emission until the page is ready, capped by load_timeout_secs, default 30s). Pre-0.2.2 builds may show all-black cold-start clips or blank lead-ins.
  • Since plugin >= 0.2.3, "ready" is load-complete OR ~2s after first paint — ad-heavy pages that never fire their load event no longer stall the full timeout. The gateway also caps load_timeout_secs at 5s (GATEWAY_LOAD_TIMEOUT_SECS), so worst-case time-to-first-byte through the gateway is ~5s plus one GOP (~1s).
  • Some pages (e.g. streamkit.dev) may still show a single white first frame — the page's own pre-theme paint, not a gate failure.
  • Testing the load-timeout expiry path via the gateway is hard: SSRF blocks local hanging servers and public "slow" endpoints (httpstat.us sleep, closed ports) fail fast rather than hang. In practice pages release via load-complete or the post-paint branch, so the expiry warn may never fire — say so rather than claiming that branch was covered.
  • The gate branch that fired is visible in the skit log (plugin logs, grep emission /tmp/skit.log): Initial page loaded; starting frame emission (load-complete), Initial page painted but load still pending after 2s; … (the >=0.2.3 post-paint branch — expect this on ad-heavy pages like cnn.com/theverge.com, ~2.2s after servo init), or Page did not finish loading within Ns; … (timeout cap).

Read the full file on GitHub · 73 lines

Changes

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.

  1. 2mo ago First seen · 73 lines · 48 tokens per session scan A de2bd9e68d3f

Subscribe to this mod's changes

testing-web-capture is a skill published in the GitHub repository streamer45/streamkit (24 stars, last pushed 1mo ago), licensed MPL-2.0. It adds 48 tokens to every session and 1,676 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.