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/cryptonpx skills add emre-guler/websec --skill cryptogit 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.00091 | $0.06379 |
| Opus 5 | $0.00046 | $0.03189 |
| Sonnet 5 | $0.00018 | $0.01276 |
| Haiku 4.5 | $0.00009 | $0.00638 |
Grade A, and why
crypto 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 — 161 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Cryptographic Failure Detection
Overview
Cryptography in an application is a small set of promises: that a stored password cannot be turned back into a password, that a ciphertext reveals nothing and cannot be altered undetected, that a token nobody issued cannot be guessed, that a signed value is the value that was signed. Every promise rests on a primitive plus the parameters it is handed, and it is almost always the parameters that fail — a digest chosen for speed where slowness was the point, a nonce that never changes, a random source built for simulations rather than secrets, a comparison that returns early. The attacker is either offline, holding a stolen table or a ciphertext and grinding at it with no rate limit, or online, predicting the next token, flipping bits in a cookie, or sitting between the application and a service whose certificate it declined to check. What they gain is every password in the table, the plaintext behind every stored field, or a forged value the application treats as its own. This skill finds such gaps by locating every site where a cryptographic decision is made, verifying each one in parallel, and merging the results into <output_dir>/crypto-results.md.
What it is NOT
- Credential material in the repository (
/websec:secrets): a key, password, or token committed to source, configuration, or a client bundle. Test: would the finding survive if the value were replaced by a strong one from a managed source? If yes it is here, because the defect is in how the key is used; if the whole finding is that the value is in the repository, it is theirs. A good key used badly is here; a committed key is theirs. - Signed-token mechanics (
/websec:jwt): algorithm allowlists, header-driven key selection, unsecured mode, claim assertion, key-set fetching. Test: is the question which algorithm the token may name, or whether the primitive and its parameters are sound at all? The first is theirs; the second is here. - The credential flow (
/websec:authentication): login rate-limiting, lockout, how a reset link is issued and expired, how a session ends. Test: remove the flow and keep the storage — is the weakness still there? A password under a fast digest is here; a reset that never expires is theirs. A reset token's predictability is here; what the flow does with it is theirs. - Data that was never protected (
/websec:information-disclosure): a field returned in a response, logged, or shipped in a bundle in the clear. Test: was there a control that broke, or was there no control? Nothing applied is theirs; a control applied with parameters that make it breakable is here. - Not a finding: a fast digest as a checksum, cache key, ETag, or content-addressed filename, where nothing security-relevant rests on collision resistance; a general-purpose generator behind jitter, sampling, or display order; an unauthenticated cipher whose ciphertext never leaves the process; a work factor lowered in a test configuration the deployed one overrides. Naming a deprecated primitive is not the finding — what depends on it is.
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 · 161 lines · 91 tokens per session scan A 79805891ad10
crypto is a skill published in the GitHub repository emre-guler/websec (2 stars, last pushed 5d ago), licensed MIT. It adds 91 tokens to every session and 6,379 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-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…
tailwind-4
Tailwind CSS 4 patterns and best practices. Trigger: When styling with Tailwind (className, variants, cn()), especially when dynamic styling or CSS variables are involved (no var() in className).
prowler-docs
Prowler documentation style guide and writing standards. Trigger: When writing documentation for Prowler features, tutorials, or guides.