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 agentmods add skills/emre-guler/websec/xssnpx skills add emre-guler/websec --skill xssgit clone --depth 1 https://github.com/emre-guler/websecWrote 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/emre-guler/websec/xss)<a href="https://agentmods.dev/skills/emre-guler/websec/xss"><img src="https://agentmods.dev/badge/skills/emre-guler/websec/xss.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 | $0.00103 | $0.06501 |
| Opus 5 | $0.00051 | $0.03250 |
| Sonnet 5 | $0.00021 | $0.01300 |
| Haiku 4.5 | $0.00010 | $0.00650 |
Grade A, and why
xss 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.
How it starts
The opening of the file, as written. The whole thing — 180 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Cross-Site Scripting Detection
Overview
Cross-site scripting is an output-encoding failure: attacker-chosen data reaches a browser in a position where the browser parses it as markup or code, so script runs inside the victim's session for the vulnerable origin. Script running as the site can read and rewrite the DOM, steal cookies and tokens, read a page's anti-forgery token and issue fully valid state-changing requests, capture credentials with injected form fields, and act as the user. The attacker is a remote third party who either lures the victim to a crafted URL (reflected, DOM-based) or plants a payload the application later serves to other users (stored) — the latter reaches administrators and is the highest-impact form. This skill locates every site where untrusted data becomes part of a response or is handed to a client-side HTML/execution sink, checks each site in parallel, and merges the results into <output_dir>/xss-results.md.
What it is NOT
- Other client-side sink families (
/websec:dom-based): test the sink, not the source. If the sink renders HTML or executes code (innerHTML,document.write,eval,Function, jQuery.html()), it belongs here — including DOM-based, reflected-DOM and stored-DOM cases. If the sink is navigation,document.cookie,localStorage, a request header,WebSocket(),JSON.parse,document.evaluate,executeSql,document.domain, or a plain DOM property, it belongs to/websec:dom-based. DOM clobbering and web-message origin flaws also live there; note here only when they are the delivery vehicle for a sink in this skill. - Server-side template injection (
/websec:ssti): if user input is concatenated into the template source and evaluated by the server's template engine, it is/websec:ssti(usually remote code execution). Client-side template expression evaluation in the browser stays here. - Cross-site request forgery (
/websec:csrf): CSRF makes the browser send a request it cannot read; XSS runs code and can read responses. XSS defeats anti-forgery tokens; the reverse is not true. - Prototype pollution (
/websec:prototype-pollution): pollutingObject.prototypeis the gadget, not the sink. Report it there and note the resulting HTML sink here only if untrusted data reaches it directly. - Server-side injection (
/websec:sql-injection,/websec:os-command-injection): different trust boundary — the database or the shell, not another user's browser. - Upload handling (
/websec:file-upload): an uploaded document that runs script in a viewer's browser is that skill's when the missing control is upload-side — type allow-list, stored extension,Content-Disposition, sniffing protection. Test: is the flaw that the file was accepted and served at all, or that its contents reach a rendering sink? Only the second is here. - Open redirection (
/websec:open-redirect, or/websec:dom-basedwhen client JavaScript assigns the navigation): steering the browser to an attacker-chosen destination without achieving markup or script execution is not this class. Test: does the payload land in a parsed HTML or script context, or only in a destination the browser navigates to? Ajavascript:destination that genuinely executes is reported here and the redirect noted there. - Content spoofing and embedding-based phishing: injecting text or styling that misleads a reader without reaching a markup or script context is a presentation and brand issue with no execution behind it. No skill in this set owns it. Test: name the parsed context the payload reaches; if there is none, it is out of scope — say so and move on rather than reaching for a neighbouring class.
- Not a finding: a reflection that is correctly encoded for the context it lands in; auto-escaping template output with no escape hatch on the path; self-inflicted payloads that require the victim to paste code into their own console or field with no cross-site delivery; a Markdown or rich-text pipeline whose maintained sanitiser output is the value actually rendered; developer-controlled constants that merely pass through an HTML sink.
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 · 180 lines · 103 tokens per session scan A 05d6329bcb18
xss is a skill published in the GitHub repository emre-guler/websec (2 stars, last pushed 7d ago), licensed MIT. It adds 103 tokens to every session and 6,501 once invoked, about $0.0005 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-08-31.
Other skills, from other repositories
vantage
Autonomous, artifact-driven SAST (Static Application Security Testing) for web AND mobile app repositories, plus optional code-level remediation. Use whenever the user asks to security-review, pentest, audit, or scan a codebase for vulnerabilities — web (SQLi, XSS, IDOR/BOLA, auth bypass, SSRF, XXE, hardcoded secrets…
prowler-ui
Prowler UI-specific patterns. For generic patterns, see: typescript, react-19, nextjs-16, tailwind-4. Trigger: When working inside ui/ on Prowler-specific conventions (shadcn, folder placement, actions/adapters, shared types/hooks/lib).
prowler-test-api
Testing patterns for Prowler API: JSON:API, Celery tasks, RLS isolation, RBAC. Trigger: When writing tests for api/ (JSON:API requests/assertions, cross-tenant isolation, RBAC, Celery tasks, viewsets/serializers).
prowler-docs
Prowler documentation style guide and writing standards. Trigger: When writing documentation for Prowler features, tutorials, or guides.
react-19
React 19 patterns with React Compiler. Trigger: When writing React 19 components/hooks in .tsx (React Compiler rules, hook patterns, refs as props). If using Next.js App Router/Server Actions, also use nextjs-16.
prowler
Main entry point for Prowler development - quick reference for all components. Trigger: General Prowler development questions, project overview, component navigation (NOT PR CI gates or GitHub Actions workflows).