From threatmodel-skills
Aggregates security findings from Semgrep, Bandit, ZAP, Trivy, Grype, Gitleaks, Nuclei, Checkov, Horusec into DefectDojo for deduplication, SLA tracking, risk prioritization, and compliance reporting. Use for multi-scanner vulnerability management across pipelines and teams.
npx claudepluginhub agentsecops/secopsagentkit --plugin offsec-skillsThis skill uses the workspace's default tool permissions.
DefectDojo aggregates findings from every SecOpsAgentKit scanner into one platform—deduplicating across tools, tracking SLA compliance, and producing compliance-ready reports. It transforms isolated scanner outputs into a managed vulnerability backlog with ownership and remediation history.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Designs, implements, and audits WCAG 2.2 AA accessible UIs for Web (ARIA/HTML5), iOS (SwiftUI traits), and Android (Compose semantics). Audits code for compliance gaps.
DefectDojo aggregates findings from every SecOpsAgentKit scanner into one platform—deduplicating across tools, tracking SLA compliance, and producing compliance-ready reports. It transforms isolated scanner outputs into a managed vulnerability backlog with ownership and remediation history.
Key concepts:
Start DefectDojo locally:
git clone https://github.com/DefectDojo/django-DefectDojo.git
cd django-DefectDojo && docker compose up -d
# Access at http://localhost:8080 — change admin/admin password immediately
Import the first scan result:
pip install requests
./scripts/import_findings.py \
--host http://localhost:8080 \
--api-key <your-api-key> \
--engagement-id 1 \
--scan-type "Semgrep JSON Report" \
semgrep-results.json
Retrieve your API key: DefectDojo UI → User (top-right) → API v2 Key.
Create a Product (once per application) and an Engagement (once per sprint or pipeline):
# Create product
curl -s -X POST "$DD_HOST/api/v2/products/" \
-H "Authorization: Token $DD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "My App", "description": "Main application", "prod_type": 1}'
# Create engagement — use template for full options
curl -s -X POST "$DD_HOST/api/v2/engagements/" \
-H "Authorization: Token $DD_API_KEY" \
-H "Content-Type: application/json" \
-d @assets/defectdojo-engagement-template.json
See assets/defectdojo-engagement-template.json for a full CI/CD engagement template.
# Semgrep (SAST)
./scripts/import_findings.py --host $DD_HOST --api-key $DD_API_KEY \
--engagement-id $EID --scan-type "Semgrep JSON Report" semgrep.json
# Trivy (containers/filesystem)
./scripts/import_findings.py --host $DD_HOST --api-key $DD_API_KEY \
--engagement-id $EID --scan-type "Trivy Scan" trivy.json
# Gitleaks (secrets)
./scripts/import_findings.py --host $DD_HOST --api-key $DD_API_KEY \
--engagement-id $EID --scan-type "Gitleaks Scan" gitleaks.json
# Re-import after fixes — auto-closes resolved findings
./scripts/import_findings.py --reimport --host $DD_HOST --api-key $DD_API_KEY \
--engagement-id $EID --scan-type "Trivy Scan" trivy-new.json
For the complete mapping of every SecOpsAgentKit tool to its DefectDojo parser name and required output format, see references/tool-parser-map.md.
Add an import step after each scanner in any pipeline:
# GitHub Actions — add after each scanner step
- name: Import findings to DefectDojo
env:
DD_HOST: ${{ secrets.DD_HOST }}
DD_API_KEY: ${{ secrets.DD_API_KEY }}
DD_ENGAGEMENT_ID: ${{ secrets.DD_ENGAGEMENT_ID }}
run: |
pip install requests
./scripts/import_findings.py \
--host "$DD_HOST" \
--api-key "$DD_API_KEY" \
--engagement-id "$DD_ENGAGEMENT_ID" \
--scan-type "Semgrep JSON Report" \
semgrep-results.json
Progress:
[ ] 1. Run all applicable scanners; save JSON output for each
[ ] 2. Import each result file with correct --scan-type (see references/tool-parser-map.md)
[ ] 3. Review deduplicated findings in DefectDojo UI: Engagements → Tests → Findings
[ ] 4. Triage: set severity, assign owner, and set SLA due dates
[ ] 5. Risk-accept findings with business justification (required for SOC2/PCI-DSS evidence)
[ ] 6. Re-run scanners after fixes; --reimport to auto-close resolved findings
[ ] 7. Export compliance report: Reports → Generate Report
Work through each step systematically. Check off completed items.
After import in the DefectDojo UI:
pci-req-6.3)importer role. Use security lead role for triage operations. Rotate keys quarterly.docker-compose.override.https.yml).scripts/)references/)assets/)Create one persistent CI/CD engagement per branch. Re-import on every merge to keep a live deduplicated finding list with auto-closure of fixed issues.
Import all scanner outputs at end of sprint into a single time-boxed engagement. Review combined risk posture in one place; assign findings to the next sprint backlog.
Before an audit, filter findings by compliance tag (e.g., pci-dss), include risk acceptances and closure timestamps. Export as the vulnerability management evidence package.
403 Forbidden on importSolution: Verify the API key has importer role or higher. Regenerate at User → API v2 Key. Confirm --host does not include a trailing slash.
Solution: Use --reimport (not a second --import) for subsequent scans of the same tool against the same engagement. Re-import updates existing findings instead of creating new ones.
Solution: Parser names are case-sensitive. Check the exact value in references/tool-parser-map.md. Use curl "$DD_HOST/api/v2/importers/" -H "Authorization: Token $DD_API_KEY" to list all available parsers.