agentsclimarketplace

Security audit csv reporting

Skill cxcscmu/SkillLearnBench/skills/b1-one-shot-claude-haiku-4-5/dependency-vulnerability-check/security-audit-csv-reporting

[COLM'26] SkillLearnBench is the first benchmark for evaluating continual learning methods that automatically generate agent skills.

Install
npx -y skills add cxcscmu/SkillLearnBench --skill security-audit-csv-reporting

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

Generate structured CSV security audit reports from vulnerability data with proper filtering, formatting, and field mapping.

SKILL.md

3.8 KB, as published. Nobody here has run it

Security Audit CSV Reporting

Overview

Converting vulnerability data into CSV format for audit trails, compliance reporting, and stakeholder communication.

CSV Schema

Standard security audit CSV columns:

Package,Version,CVE_ID,Severity,CVSS_Score,Fixed_Version,Title,Url

Field Definitions

ColumnTypeDescriptionExample
PackageStringPackage/library namelodash
VersionStringInstalled version4.17.20
CVE_IDStringCVE identifierCVE-2021-23337
SeverityStringHIGH or CRITICALHIGH
CVSS_ScoreFloat/StringCVSS v3 score (0-10)7.5 or N/A
Fixed_VersionStringVersion with fix or N/A4.17.21
TitleStringVulnerability title/descriptionPrototype Pollution
UrlStringReference URLhttps://nvd.nist.gov/vuln/detail/CVE-2021-23337

Implementation Pattern

import csv
import json
from typing import List, Dict

def generate_security_audit_csv(vulnerabilities: List[Dict], output_file: str):
    """
    Generate security audit CSV from vulnerability data.

    vulnerabilities: List of vulnerability dictionaries
    output_file: Path to output CSV file
    """

    fieldnames = ['Package', 'Version', 'CVE_ID', 'Severity',
                  'CVSS_Score', 'Fixed_Version', 'Title', 'Url']

    with open(output_file, 'w', newline='') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()

        for vuln in vulnerabilities:
            row = {
                'Package': vuln.get('package', 'N/A'),
                'Version': vuln.get('version', 'N/A'),
                'CVE_ID': vuln.get('cve_id', 'N/A'),
                'Severity': vuln.get('severity', 'N/A'),
                'CVSS_Score': vuln.get('cvss_score', 'N/A'),
                'Fixed_Version': vuln.get('fixed_version', 'N/A'),
                'Title': vuln.get('title', 'N/A'),
                'Url': vuln.get('url', 'N/A')
            }
            writer.writerow(row)

Filtering and Sorting

Filter by Severity

def filter_by_severity(vulnerabilities, severity_levels=['HIGH', 'CRITICAL']):
    """Filter vulnerabilities to only specified severity levels"""
    return [v for v in vulnerabilities if v.get('severity') in severity_levels]

Sort by Severity and CVSS

def sort_vulnerabilities(vulnerabilities):
    """Sort by severity (CRITICAL first) then by CVSS score (descending)"""

    severity_order = {'CRITICAL': 0, 'HIGH': 1}

    def sort_key(vuln):
        severity = severity_order.get(vuln.get('severity'), 2)
        # Handle N/A CVSS scores
        cvss = float(vuln.get('cvss_score', 0)) if vuln.get('cvss_score') != 'N/A' else 0
        return (severity, -cvss)

    return sorted(vulnerabilities, key=sort_key)

Data Cleaning

Sanitize CSV Fields

def sanitize_field(value):
    """Sanitize field for CSV output"""
    if value is None:
        return 'N/A'
    if isinstance(value, list):
        return '; '.join(str(v) for v in value)
    return str(value).strip()

def prepare_row(vuln_data):
    """Prepare vulnerability record for CSV output"""
    return {k: sanitize_field(v) for k, v in vuln_data.items()}

Usage

Use this skill when:

  • Converting vulnerability scan results to audit format
  • Creating compliance reports
  • Sharing findings with stakeholders
  • Building automated security audit pipelines
  • Archiving vulnerability data for historical tracking

Related Skills

  • trivy-vulnerability-scanning: Source of vulnerability data
  • cvss-score-extraction: Enriching data with CVSS scores

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.