Skip to content
Back to skills

Warden Scan

ASecurity

Automated SAST + dependency vulnerability scan. Runs Semgrep (code vulnerabilities) and pip-audit (CVE-matched dependencies) and writes a structured JSON report. Use when asked to "scan for vulnerabilities", "run a security scan", "check for CVEs", or "audit dependencies".

  • 71 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 6, 2026
securitypythonbashsecurity

Works with

  • claude code
  • cli

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned September 6, 2026

npx -y skills add tonone-ai/tonone --skill warden-scan --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Warden Scan?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Warden Scan
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tonone-ai-warden-scan-tonone/badge)](https://www.skillsdirectory.com/skills/tonone-ai-warden-scan-tonone)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: warden-scan
description: Automated SAST + dependency vulnerability scan. Runs Semgrep (code vulnerabilities) and pip-audit (CVE-matched dependencies) and writes a structured JSON report. Use when asked to "scan for vulnerabilities", "run a security scan", "check for CVEs", or "audit dependencies".
allowed-tools: Bash, Read, Glob
version: 0.9.7
author: tonone-ai <hello@tonone.ai>
license: MIT
compatibility: Designed for Claude Code
tags: [engineering, security, scan]
---

# Warden Scan — Automated SAST + Dependency Audit

You are Warden. Run a real security scan using Semgrep and pip-audit, then display the findings.

## Step 1: Locate the scanner

Find the scan.py entry point:

```bash
find . -path "*/warden_agent/scan.py" -not -path "*/__pycache__/*" 2>/dev/null | head -3
```

If not found, tell the user:

> `scan.py` not found. Run `pip install semgrep pip-audit` and ensure the tonone plugin is installed.

## Step 2: Determine target

If the user specified a path, use it. Otherwise use `.` (current directory).

## Step 3: Run the scan

```bash
python <path-to-scan.py> <target> --out .reports/warden-latest.json
```

The script:

- Runs Semgrep SAST (`semgrep --config auto`)
- Runs pip-audit on `requirements*.txt` files (falls back to current env)
- Writes a JSON report and prints a summary line

Capture stdout + stderr. If the script exits with code 2, that means critical/high findings were found (expected, not an error).

## Step 4: Display results

Parse and render the report using the tonone output kit format (40-line CLI budget, box-drawing skeleton):

```
┌─────────────────────────────────────────────┐
│ warden-scan  <target>                       │
└─────────────────────────────────────────────┘

CRITICAL  <N>   HIGH  <N>   MEDIUM  <N>   LOW  <N>

── SAST Findings ───────────────────────────────
[C] <title>  <location>
    <detail — 1 line>
    Fix: <recommendation>

[H] <title>  <location>
    <detail — 1 line>
    Fix: <recommendation>

── Dependency Findings ─────────────────────────
[H] <CVE-ID> in <pkg>==<ver>  <requirements-file>
    Fix: <recommendation>

── Summary ─────────────────────────────────────
Report: .reports/warden-latest.json
```

Severity indicators: `[C]` critical, `[H]` high, `[M]` medium, `[L]` low.

Show all CRITICAL and HIGH findings. Collapse MEDIUM/LOW into a count if there are more than 5.

If 0 findings: show a clean pass banner.

## Step 5: Exit guidance

If critical or high findings exist, end with:

> **Action required.** Review findings above. Run `/warden-harden` for remediation steps or `/warden-threat` for a full threat model.

If only medium/low:

> **Passed with warnings.** No critical issues found. Consider `/warden-audit` for a broader manual review.

If clean:

> **Clean scan.** No issues found by Semgrep or pip-audit.

Follow the output format defined in docs/output-kit.md — 40-line CLI max, box-drawing skeleton, unified severity indicators, compressed prose. If findings exceed 40 lines, emit a summary table and invoke `/atlas-report` to write the full report.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…