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 patrickserrano/lacquer --skill url-validation-securitygit clone --depth 1 https://github.com/patrickserrano/lacquerWrote 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/patrickserrano/lacquer/url-validation-security)<a href="https://agentmods.dev/skills/patrickserrano/lacquer/url-validation-security"><img src="https://agentmods.dev/badge/skills/patrickserrano/lacquer/url-validation-security.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.00055 | $0.00497 |
| Opus 5 | $0.00028 | $0.00249 |
| Sonnet 5 | $0.00011 | $0.00099 |
| Haiku 4.5 | $0.00006 | $0.00050 |
Grade A, and why
url-validation-security 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 3d 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.
What it actually says
URL Validation Security Posture
Validate every user-provided URL through a positive-allowlist validator
before it reaches AVPlayer, URLSession, or a WKWebView. Validate at
both the manager and service boundaries (the duplication is intentional
defense-in-depth). Known limitation: homograph / IDN look-alike hosts are not
detected.
The validator parses once via URLComponents and asserts: http/https scheme
only, non-empty host, no userinfo (credentials), a UTF-8 byte-length cap,
and rejection of C0 controls / DEL / literal & percent-encoded null bytes. The
dangerous-scheme denylist is redundant belt-and-suspenders.
enum SecureURLValidator {
/// Returns true only when the URL satisfies every required property.
/// Known limitation: homograph / IDN look-alike hosts are not detected.
nonisolated static func validate(_ urlString: String) -> Bool {
guard !urlString.isEmpty else { return false }
guard urlString.utf8.count <= 2048 else { return false }
guard !urlString.unicodeScalars.contains(where: { $0.value < 0x20 || $0.value == 0x7F }) else { return false }
guard !urlString.contains("\0"), !urlString.lowercased().contains("%00") else { return false }
let dangerous = ["javascript:", "data:", "file:", "vbscript:"]
guard !dangerous.contains(where: { urlString.lowercased().hasPrefix($0) }) else { return false }
guard let components = URLComponents(string: urlString) else { return false }
guard let scheme = components.scheme?.lowercased(), ["http", "https"].contains(scheme) else { return false }
guard components.user == nil, components.password == nil else { return false }
guard let host = components.host, !host.isEmpty else { return false }
return true
}
}
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.
- 3d ago First seen · 42 lines · 55 tokens per session scan A f5025547c35c
url-validation-security is a skill published in the GitHub repository patrickserrano/lacquer (3 stars, last pushed yesterday), licensed MIT. It adds 55 tokens to every session and 497 once invoked, about $0.0003 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
printing-press-amend
Amend a published CLI from one of two input sources: (1) dogfood mode mines the active Claude Code session transcript for friction (missing flags, hand- rolled API payloads, silent-null returns); (2) direct-input mode accepts user-supplied asks (rename a command, add commands or feeds, fix a named bug, optionally…
printing-press-score
Score a generated CLI against the Steinberger bar, compare two CLIs side-by-side.
printing-press-output-review
Internal sub-skill: agentic review of a printed CLI's sampled command output for plausibility issues that rule-based checks can't encode (substring-match relevance, format bugs, silent source drops, ranking failures). Invoked via the Skill tool by the main printing-press skill at Phase 4.85 and printing-press-polish…
gograph
Go repository intelligence for Claude Code. Use when reading, navigating, editing, reviewing, or refactoring a Go codebase. Exposes 64 query, analysis, and workflow capabilities through the local gograph MCP server, including bounded first-call exploration, AST-aware call graphs, blast-radius analysis, impact, and…
performance
A guide to measuring and improving the speed and resource use of Go programs. It explains benchmarks and profiling, which records where a program spends time or memory.
skit
Run, inspect, and manage entries in the user's skit library — their personal hub, manager, and launcher for scripts in many languages (Python, shell, JS/TS, and more), executables, command templates, and AI-agent prompts, with typed parameter forms, saved presets, and per-entry launch policy. Use when the user asks to…