Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/SecurityTalent/bugskill-ainpx agentmods add skills/securitytalent/bugskill-ai/csptWrote 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/securitytalent/bugskill-ai/cspt)<a href="https://agentmods.dev/skills/securitytalent/bugskill-ai/cspt"><img src="https://agentmods.dev/badge/skills/securitytalent/bugskill-ai/cspt/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.
<a href="https://agentmods.dev/skills/securitytalent/bugskill-ai/cspt"><img src="https://agentmods.dev/badge/skills/securitytalent/bugskill-ai/cspt.svg" alt="Reviewed on agentmods" width="80" 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.00114 | $0.02129 |
| Opus 5.5 | $0.00046 | $0.00852 |
| Sonnet 5.5 | $0.00023 | $0.00426 |
| Haiku 4.5 | $0.00011 | $0.00213 |
Grade A, and why
cspt 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 20d 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.
grep -rn 'fetch(\|xhr.open\|axios.get\|axios.post' src/ | grep '+' This is a copy
100% identical to cspt — 0 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 163 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Client-Side Path Traversal (CSPT)
What Is Broken and Why
Client-Side Path Traversal occurs when attacker-controlled input is concatenated
directly into the path component of a JavaScript fetch() or XHR URL without
proper encoding. The injected ../ sequences traverse the URL path, redirecting
the request to an unintended endpoint. Unlike server-side path traversal (which
reads files), CSPT redirects API calls — enabling response injection, data exfiltration,
and XSS when chained with an open redirect that fetch() auto-follows to an
attacker-controlled domain.
Key Signals
- JavaScript source with user-controlled input concatenated into a fetch/XHR path:
fetch("/api/users/" + userId + "/profile") fetch(`/api/posts/${postId}/comments`) xhr.open("GET", "/api/data/" + param) - Input lands in the path segment (before
?), not the query string - No
encodeURIComponent()wrapping the input, or encoding applied only to specific chars - Application has open redirect endpoints (
/redirect?u=,/oauth/authorize?redirect_uri=) - SPA frameworks where routing inputs feed directly into API calls
- Response content is rendered as HTML or passed to
innerHTML/eval()
Methodology
- Map all
fetch()/XHRcalls in JavaScript source — look for string concatenation in the URL path. - Identify which parameters control the path segment (not query string).
- Test basic traversal: inject
../../../anything— did the request path change? - Determine depth needed: count path segments to traverse to root or to a useful endpoint.
- Find a usable gadget endpoint — open redirect (
/redirect?u=ATTACKER) or any endpoint whose response is reflected in the DOM. - Craft final payload: traverse to the gadget, chain to attacker-controlled response.
- If WAF blocks, apply encoding bypass strategy (see table below).
- Confirm XSS or data exfiltration via OOB callback.
WAF Bypass: Encoding Level Matrix
| Situation | Strategy | Example |
|---|---|---|
| No WAF | Use plain ../ |
../../../gadget |
| WAF level = App level | Encode dots: %2e%2e/ |
%2e%2e/%2e%2e/%2e%2easdf |
| WAF level < App level | Over-encode slashes | ..%252f..%252f..%252fasdf |
| WAF level > App level | Pad with dummy segments | a%252fa%252fa%252fa/../../../../asdf |
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.
- 20d ago First seen · 163 lines · 114 tokens per session scan A 97aeff354b03
cspt is a skill published in the GitHub repository SecurityTalent/bugskill-ai (13 stars, last pushed 21d ago), licensed MIT. It adds 114 tokens to every session and 2,129 once invoked, about $0.0005 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). It is 100% identical to cspt, differing in 0 lines, and is treated as a copy.
Other skills, from other repositories
playwright-best-practices
Use when writing Playwright tests, fixing flaky tests, debugging failures, implementing Page Object Model, configuring CI/CD, optimizing performance, mocking APIs, handling authentication or OAuth, testing accessibility (axe-core), file uploads/downloads, date/time mocking, WebSockets, geolocation, permissions…
fullpage-screenshot
Capture full-page screenshots of a website at several viewport widths at once, including pages behind basic auth or needing setup clicks. Use when asked to screenshot a site, grab full-page captures, check a page across breakpoints, produce responsive review artefacts, or compare how a layout renders at mobile, tablet…
legado-book-source-generator
A skill for analysing websites and generating book-source rules for Legado, an app that reads online novels and other books. It is triggered by requests involving book sources, Legado rules, or novel-site analysis.
serpbase-skill
Agent-portable SerpBase skill for Codex, Claude Code, OpenClaw, opencode, and other AI coding/research agents. Use when an agent needs current Google Search, Images, News, Videos, Google Maps local search, or Google Maps place detail results through serpbase.dev; when configuring search grounding through SerpBase; or…
reddit-skills
Reddit automation skill collection. Supports authentication, content publishing, search & discovery, social interactions, and compound operations. Triggered when a user asks to operate Reddit (post, search, comment, login, analyze, upvote, save).
hasdata
Use HasData to scrape any public web page, run real-time Google/Bing/Google-AI-Mode search queries, pull structured data from e-commerce, real-estate, lodging, jobs, maps, travel, video, and social platforms, or run async bulk-scraping and crawling jobs without managing proxies, browsers, or captchas. Reach for this…