CtrlK
BlogDocsLog inGet started
Tessl Logo

testland/graphql-complexity-limit-tester

The GraphQL attack-surface / hardening skill: crafts over-limit depth and complexity queries then asserts rejection before execution, verifying that graphql-depth-limit, graphql-cost-analysis, and graphql-armor (max-depth / cost-limit / max-tokens plugins) are actually enforced and not just configured; carries the introspection attack-surface catalog (what __schema exposes, per-framework disable controls, hideSchemaDetailsFromClientErrors) in references/introspection.md and the persisted-query allowlisting strategies (Apollo APQ protocol, auto-register vs strict-allowlist vs hybrid modes) in references/persisted-queries.md. Use when auditing a GraphQL service for DoS or schema-disclosure exposure, hardening a production deployment, or adding tests that prove the limits in CI.

71

Quality

89%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Overview
Quality
Evals
Security
Files

Quality

Content

77%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A well-structured, highly actionable testing procedure with excellent workflow guardrails (hard-stop precondition, boundary guidance, resolver short-circuit assertion, anti-patterns table) and a clean one-level-deep bundle split. The weaknesses are repeated library defaults and URL citations across sections, and a graphql-armor cost-bust example that does not demonstrably exceed its stated limit.

Suggestions

State each library default and its source URL exactly once (e.g., in Step 2) and remove the repetitions in the Overview, Step 3, Step 4 comments, and the References list — keep References as the single URL index.

Make the graphql-armor over-cost example verifiably over-limit: compute the cost of the sample query under objectCost=2/scalarCost=1/depthCostFactor=1.5, or generate fields programmatically as the graphql-cost-analysis example does (Array.from({ length: MAX_COST + 1 }, ...)).

Consolidate the Overview's library list with Step 1's install commands so each library is introduced once with its repo/URL, cutting roughly 20 lines of duplicated citation.

DimensionReasoningScore

Conciseness

The body is mostly efficient with no explanations of concepts Claude already knows, but library defaults are repeated (max-depth "n = 6" and "maxCost = 5000" in both Overview and Step 2; "objectCost = 2, scalarCost = 1, depthCostFactor = 1.5" in Step 3 and again in a Step 4 comment), and the same escape.tech plugin URLs are cited three to four times across Overview, Steps 2–4, and References. That is more than the minor trimming of the 4 anchor; it fits the 3 anchor ("mostly efficient but... could be tightened").

3 / 5

Actionability

Install commands, copy-paste TypeScript test code for all three libraries on both Apollo and Envelop, and a resolver-instrumentation verification pattern ("expect(resolverCallCount).toBe(0)") make the guidance mostly fully executable. However the graphql-armor over-cost example relies on an uncomputed "Stack fields so calculated cost > maxCost=200" over a ~15-field query that likely stays under 200, so that test as written could pass vacuously — a real gap for a skill whose purpose is over-limit construction. Fits the 4 anchor, not the 5 anchor.

4 / 5

Workflow Clarity

Clear numbered sequence (Install → Identify limit → Craft queries → Write tests → Assert rejection before execution) with explicit validation checkpoints: the HALT hard-stop when no limit is configured, boundary guidance ("Use limit+1 to be unambiguous"), config-drift detection ("Tests that pass in NODE_ENV=test but fail in NODE_ENV=production... signal a configuration drift problem"), and a six-row anti-patterns table serving as a failure-mode checklist. Matches the 5 anchor.

5 / 5

Progressive Disclosure

The two bundle files (references/introspection.md, references/persisted-queries.md) exist, are one level deep, and are clearly signaled from both the Overview and the References section; the SKILL.md body keeps only the testing procedure inline and externalizes the reference catalogs. Content is appropriately split with easy navigation, matching the 5 anchor.

5 / 5

Total

17

/

20

Passed

Description

96%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong, highly concrete description: explicit what and when clauses, natural trigger terms, and named libraries/plugins. The only weakness is that advertising the introspection and persisted-query reference catalogs slightly blurs the boundary with companion skills in the same family.

Suggestions

Drop or shorten the parenthetical catalogs of references/introspection.md and references/persisted-queries.md contents from the description; keep the description scoped to depth/complexity/token limit testing to reduce trigger overlap with companion skills.

Trim the per-plugin enumeration (max-depth / cost-limit / max-tokens) to a single library list to cut description length without losing trigger terms.

DimensionReasoningScore

Specificity

The description lists multiple concrete actions in third person — "crafts over-limit depth and complexity queries then asserts rejection before execution, verifying that graphql-depth-limit, graphql-cost-analysis, and graphql-armor (max-depth / cost-limit / max-tokens plugins) are actually enforced and not just configured" — with named libraries and plugins. Coverage of the skill's actions is comprehensive, matching the 5 anchor rather than the 4 anchor ("minor gaps in coverage").

5 / 5

Completeness

Both questions are answered explicitly: what ("crafts over-limit depth and complexity queries then asserts rejection before execution, verifying that... are actually enforced and not just configured") and when ("Use when auditing a GraphQL service for DoS or schema-disclosure exposure, hardening a production deployment, or adding tests that prove the limits in CI"). Clear 5 — an explicit 'Use when' clause with concrete triggers.

5 / 5

Trigger Term Quality

Natural trigger phrases a user would actually say are present: "auditing a GraphQL service for DoS or schema-disclosure exposure, hardening a production deployment, or adding tests that prove the limits in CI", with synonyms for the attack class (DoS / schema-disclosure) and the limit types (depth / complexity). This is comprehensive synonym coverage per the 5 anchor, not merely good coverage (4).

5 / 5

Distinctiveness Conflict Risk

The core niche (depth/cost/token limit enforcement testing) is clearly distinct, but the description advertises that it "carries the introspection attack-surface catalog... and the persisted-query allowlisting strategies" — the territories of closely related companion skills — which invites triggering for introspection-disable or APQ-allowlist tasks. This is minor overlap risk with closely related skills (4 anchor), not the minimal-conflict 5 anchor.

4 / 5

Total

19

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Reviewed

Table of Contents