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/graphqlnpx skills add emre-guler/websec --skill graphqlgit 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.00086 | $0.05518 |
| Opus 5 | $0.00043 | $0.02759 |
| Sonnet 5 | $0.00017 | $0.01104 |
| Haiku 4.5 | $0.00009 | $0.00552 |
Grade A, and why
graphql 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 — 170 lines — stays where its author put it; the contents beside it link to each section on GitHub.
GraphQL Detection
Overview
GraphQL inverts the usual API contract: the client, not the server, decides the exact shape of the data it receives, and a single endpoint accepts queries, mutations, and subscriptions written against a strongly typed schema. The weaknesses that follow are not one bug class but a set of ways that design amplifies familiar failures — authorization checked at the transport layer never fires for a nested field, a throttle that counts HTTP requests counts nothing when one request carries a hundred aliased operations, and a self-describing schema hands an attacker the complete map of everything the server can do. The flaws sit in two places: the server construction where introspection, limits, and transport rules are configured, and the resolver bodies where objects are fetched from arguments. The attacker is any API client, often unauthenticated, who sends operations the developers never intended to expose. What they gain ranges from the schema itself through other users' records to a practical brute force against a throttled login. This skill finds these by locating the server configuration and every resolver that fetches by argument, checking each in parallel, and merging the results into <output_dir>/graphql-results.md.
What it is NOT
- Access control (
/websec:access-control): that skill owns authorization decided at routes, middleware, and handlers. A resolver that returns an object selected purely by a client-supplied argument, with no per-object check, is judged here — the missing check is a resolver-code shape found while reading the schema, and it is this class's highest-value finding. Discriminating test: if the fix belongs inside a resolver or a schema directive, it is here; if it belongs in HTTP middleware or a route guard covering the whole endpoint, note it for/websec:access-control. - CSRF (
/websec:csrf): a cookie-authenticated endpoint that executes mutations from a cross-site form is CSRF. Judge the GraphQL-specific transport posture here — whetherGETand form-encoded bodies reach the executor and whether the declared content type is validated — and cross-reference/websec:csrffor the token and same-site question. - Injection (
/websec:sql-injection,/websec:nosql-injection,/websec:os-command-injection): GraphQL is a typed layer and injects nothing by itself. A resolver that concatenates an argument into an underlying query or command is owned by the matching injection skill; note the resolver here and classify there. - Business logic (
/websec:business-logic): alias multiplication or batching that defeats a coupon, attempt, or quota limit is judged here as a missing operation limit; the rule that limit was protecting belongs there. Discriminating test: which artefact does the fix change — the schema, a resolver, or the executor's operation limits (here), or a domain rule that would be equally wrong behind a REST route (there)? - WebSockets (
/websec:websockets): subscription transport, per-message authorization, and origin checks on the upgrade belong there. Note the subscription surface here and hand it over. - Information disclosure (
/websec:information-disclosure): a schema dump is disclosure. It is a finding here when introspection or suggestion output names types, fields, or arguments whose resolvers enforce an authorization check — that is, when the schema describes strictly more than the caller reading it can execute. - API surface issues (
/websec:api): a mutation input object that binds fields the caller should not be able to set, or a type that returns more properties than the caller should see, is the same defect that skill owns at REST endpoints. Test: if the fix is to narrow the input type or the selectable fields — the binding set — hand it there; if the fix is a per-object check inside the resolver, it stays here. - Not a finding:
__typenameanswering — that is defined behaviour on every server; introspection enabled on a schema whose every type and field already resolves without an authorization check; a field-level error with no schema-name suggestions; an unknown-field error on an otherwise authorized query.
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 · 170 lines · 86 tokens per session scan A 7a64822b97f2
graphql is a skill published in the GitHub repository emre-guler/websec (2 stars, last pushed 6d ago), licensed MIT. It adds 86 tokens to every session and 5,518 once invoked, about $0.0004 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.