CtrlK
BlogDocsLog inGet started
Tessl Logo

testland/zap-baseline

Configures and runs OWASP ZAP baseline scanning: `zap-baseline.py` Docker-packaged spider + passive scan suitable for CI gating; supports `-t target_url` + `-r html_report` + `-c config_file` rule customization (INFO/IGNORE/FAIL warnings) and Ajax spider via `-j` for JS-heavy SPAs; `zap-full-scan.py` active companion for staging. Covers authenticated scans end to end as a reference - ZAP Context, auth methods (form/JSON/script/browser), session management, verification strategy, OAuth/bearer injection, context XML export for `-n` - plus DAST cadence planning (PR-blocking passive baseline, nightly ZAP full + nuclei active layer, baseline-finding ratchet for legacy apps). Use when the user runs OWASP ZAP for pre-prod web app DAST, needs coverage of routes behind a login wall, or is designing a team's DAST rollout cadence.

70

Quality

88%

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

82%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 runbook: sequenced steps, executable commands and CI config throughout, genuine progressive disclosure to real reference files, and honest limitations/anti-patterns. The main deductions are repeated docker invocations and other minor trims for conciseness, plus the absence of explicit validation checkpoints in the scan workflows.

Suggestions

Cut the repeated full 'docker run -v $(pwd):/zap/wrk/:rw -t ghcr.io/zaproxy/zaproxy:stable …' preamble from Steps 4, 5, and 7 — define it once in Step 2 and show only the differing flags afterward.

Add explicit validation checkpoints to the workflows: after each scan, verify the report file exists and is non-empty before proceeding, and confirm the target host is staging (not production) before any zap-full-scan.py run.

Fix the 'Three suppression layers' table in Step 6, which actually lists four rows — either relabel it or merge the redundant '-I flag' row into the surrounding prose.

DimensionReasoningScore

Conciseness

Largely lean — tables and copy-paste commands with no padding or explaining of known concepts — but the full 'docker run -v $(pwd):/zap/wrk/:rw…' invocation is repeated four times, the 'When to use' section restates the frontmatter description, and the 'Three suppression layers' table actually lists four rows. Fits 'efficient; minor instances that could be trimmed' rather than 'every token earns its place'.

4 / 5

Actionability

Every step is executable: verbatim docker pull/run commands (Steps 1-2), a concrete zap-config.tsv with justification template (Step 6), complete GitHub Actions YAML (Step 8), and specific triage/suppression mechanisms. Copy-paste ready and covers the common cases.

5 / 5

Workflow Clarity

Steps 1-8 are clearly sequenced with per-step cross-references and risk warnings ('NEVER point at production'), but there are no explicit validation checkpoints (e.g., verify the report file was produced, confirm the target is staging before an active scan) — 'most checkpoints present; minor validation gaps'.

4 / 5

Progressive Disclosure

The body stays a working overview and pushes deep topics to real, clearly signaled one-hop references (references/auth.md and references/cadence.md both exist and match their inline promises). However, auth.md itself links onward to script-based-auth.md and oauth-bearer-injection.md, adding a second hop, and the final References section partially duplicates the inline links — 'good structure; minor organization gaps' rather than the ideal one-level split.

4 / 5

Total

17

/

20

Passed

Description

88%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 highly specific, well-triggered description that names concrete flags, auth methods, and cadence concepts, and closes with an explicit three-clause 'Use when' trigger. Keyword coverage is good though a few natural synonyms are missing, and the full-scan/cadence claims create minor overlap with closely related skills.

DimensionReasoningScore

Specificity

Lists multiple concrete, flag-level actions ('-t target_url', '-c config_file rule customization (INFO/IGNORE/FAIL warnings)', 'Ajax spider via -j', 'OAuth/bearer injection', 'context XML export for -n') plus companion tooling and cadence planning — comprehensive with no real coverage gaps.

5 / 5

Completeness

Explicitly answers both: what ('Configures and runs OWASP ZAP baseline scanning…') and when ('Use when the user runs OWASP ZAP for pre-prod web app DAST, needs coverage of routes behind a login wall, or is designing a team's DAST rollout cadence') with concrete trigger phrases — the exact shape of the anchor-5 example.

5 / 5

Trigger Term Quality

Natural trigger terms are strong ('runs OWASP ZAP', 'pre-prod web app DAST', 'routes behind a login wall', 'DAST rollout cadence'), but a few common synonyms users might say ('security scan', 'vulnerability scan', 'CI security gate') are absent, matching 'good keyword coverage; a few natural terms missing' rather than the comprehensive-synonyms anchor.

4 / 5

Distinctiveness Conflict Risk

The OWASP ZAP baseline niche is clear and mostly distinct, but the description also claims the 'zap-full-scan.py active companion' and 'DAST cadence planning (nightly ZAP full + nuclei active layer)' territory, which overlaps closely related sister skills (e.g., nuclei-dast) — minor overlap risk rather than minimal.

4 / 5

Total

18

/

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