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/jwtnpx skills add emre-guler/websec --skill jwtgit clone --depth 1 https://github.com/emre-guler/websecWhat 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.00069 | $0.05255 |
| Opus 5 | $0.00034 | $0.02627 |
| Sonnet 5 | $0.00014 | $0.01051 |
| Haiku 4.5 | $0.00007 | $0.00526 |
Grade A, and why
jwt 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 2d 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 — 174 lines — stays where its author put it; the contents beside it link to each section on GitHub.
JWT Detection
Overview
A JSON Web Token is a compact container of claims — subject, role, expiry, audience — protected by a signature so the recipient can detect tampering. Applications use it as the session credential itself: whatever the token says about the caller is what the application believes. The flaw class lives at the acceptance site, the moment a request's token is turned into a trusted identity. It fails when the signature is never checked, when the token is allowed to choose its own algorithm or supply its own key, when the signing secret is guessable, or when the claims that bound the token in time and scope are never asserted. The attacker is any client holding one valid token — or merely knowing the token's shape — who wants a token the server never issued; what they gain is impersonation of any user, including administrators, and any entitlement the claims encode. This skill finds such gaps by locating every issuance and acceptance site, verifying each one in parallel, and merging the results into <output_dir>/jwt-results.md.
What it is NOT
- Local credential flows (
/websec:authentication): password checking, lockout, reset, and the session lifecycle. If the token is validated correctly but issued too early in a login flow, that is the sibling skill. - Delegated login flow logic (
/websec:oauth): callback validation,state, scope, and account linking. An identity token arriving from a provider is validated here; how the flow delivers it is judged there. - Outbound request reachability (
/websec:ssrf): whether a key-set fetch triggered by a token header can reach internal services. The decision to fetch an address the token names is judged here; note the reachability question there. - Injection mechanics (
/websec:path-traversal,/websec:sql-injection): what a traversal sequence or quote does once a key-identifier value reaches a file path or a query. The trust placed in that header value is judged here; the sink's own class goes under "Also observed". - What a valid token is allowed to reach (
/websec:access-control): a forged or unverified token is this skill's finding. A correctly verified token whoserole,tenant, orscopeclaim was minted from a user-writable profile field is judged here as misplaced trust in the issuing side, and cross-referenced there for the privilege consequence. An endpoint that consults no claim at all before acting is theirs outright. Test: is the token wrong, is the claim wrong, or is nothing checking the claim? - Data exposure (
/websec:information-disclosure): sensitive values carried in a payload that anyone holding the token can read. A signed token is not an encrypted one; that is a data-handling finding, not a forgery one. - The signing primitive and its parameters (
/websec:crypto): the strength of the digest behind a MAC, a symmetric secret's length and randomness source, a constant-time comparison, a certificate check on the client that fetches a key set. Test: is the question which algorithm the token may name, or whether the primitive itself and its parameters are sound? The first is here; the second is theirs. - The signing key being committed (
/websec:secrets): a secret or private key present in source, configuration, a pipeline definition, or a client bundle. Test: the impersonation a guessable or leaked secret enables is judged here; the fact that the value sits in the repository is theirs. - Not a finding: a service that receives or forwards a token it never verifies, where
architecture.mdrecords verification as happening in a gateway or upstream hop. The absence of verification here is the architecture, not a flaw. What is judged in that case: whether this service trusts the token's claims, or an identity header derived from them, without any integrity check of its own — and whether a caller reaching the service directly, bypassing the hop, would be believed. Say which of those you could establish and which needs the gateway's configuration. - Not a finding: a tampered token that the application correctly rejects; a verification key published at a key-set address while the acceptance site pins its algorithm; a readable payload carrying nothing sensitive; a token used for a non-security purpose that the architecture notes identify as such.
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.
- 2d ago First seen · 174 lines · 69 tokens per session scan A 7d8007a1a1a2
jwt is a skill published in the GitHub repository emre-guler/websec (2 stars, last pushed 6d ago), licensed MIT. It adds 69 tokens to every session and 5,255 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-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-compliance
Creates, syncs, audits and manages Prowler compliance frameworks end-to-end. Covers the two supported JSON schemas (universal multi-provider and legacy per-provider), the SDK model tree (legacy attribute classes, universal ComplianceFramework, ConfigRequirements guardrails), output formatters (legacy per-framework +…
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-pr
Creates Pull Requests for Prowler following the project template and conventions. Trigger: When working on pull request requirements or creation (PR template sections, PR title Conventional Commits check, changelog gate/no-changelog label), or when inspecting PR-related GitHub workflows like conventional-commit.yml…
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-ci
Helps with Prowler repository CI and PR gates (GitHub Actions workflows). Trigger: When investigating CI checks failing on a PR, PR title validation, changelog gate/no-changelog label, conflict marker checks, secret scanning, CODEOWNERS/labeler automation, or anything under .github/workflows.