red-team-flow — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited red-team-flow (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Generate SITF-compliant attack flow JSON files from red team or penetration testing reports.
/red-team-flow <engagement-name> [source]engagement-name: Identifier for the engagement (e.g., "acme-2026q1", "client-sdlc-audit")source: One of:--file <path>: Path to report file (markdown, txt, json, pdf)--url <url>: URL to report or findings pageArguments: $ARGUMENTS
The skill accepts red team and pentest reports in various formats:
The skill looks for these common report patterns:
When this skill is invoked:
techniques.json to get the full SITF technique library."type": "technique-gap"customLabel and connect the entry point directly to the first in-scope techniquecustomLabel with "Contributing:" and connect it with a dashed edge (see /attack-flow Phase 4)Apply these layout rules (consistent with /attack-flow):
#### Rule 1: Component Layout (Left-to-Right by Attack Flow)
#### Rule 2: Technique Ordering (Top-to-Bottom)
#### Rule 3: Technique-Component Centering
#### Rule 4: Component Sizing
#### Rule 5: Edge Connections
top target handle and a bottom source handle (app/visualizer.html). Entry points expose right/bottom sources, exit points left/top targetssourceHandle: "bottom", targetHandle: "top" within a component. For cross-component edges, right/left is the convention, but on technique nodes it falls back to bottom/top. Don't design layouts that rely on side connections"type": "smoothstep" for all edges/attack-flow Phase 4#### Rule 6: Edge Labels (Minimal)
"label": "")customLabel / evidence, never on edges"labelStyle": { "fill": "#DC2626", "fontWeight": 600, "fontSize": 10 } and a transparent "labelBgStyle": { "fill": "#FFFFFF", "fillOpacity": 0 }Generate attack flow JSON with this structure (identical to /attack-flow output):
{
"metadata": {
"name": "Engagement Name",
"title": "Canvas Display Title",
"created": "ISO-8601 timestamp",
"version": "1.0",
"framework": "SITF",
"source": "red-team-report",
"description": "Brief engagement description"
},
"nodes": [],
"edges": []
}Metadata field guidelines:
name: Short identifier (e.g., "acme-2026q1", "client-sdlc-audit")title: Concise canvas title, max 5-7 words (e.g., "ACME CI/CD Pipeline Assessment", "Client SDLC Red Team Q1")description: One sentence summary, max 150 charactersNode types (same as /attack-flow):
entryPoint: How the engagement started (Assumed Breach, External Attacker, Insider, etc.)component: SITF component container (endpoint, vcs, cicd, registry, production)technique: Attack technique from techniques.jsontechnique-gap: Placeholder for missing SITF techniqueexitPoint: Engagement outcome (Data Exfiltration, Persistence, Supply Chain Compromise, etc.)Special metadata for red team flows:
"source": "red-team-report" to metadata"engagement" field if client/engagement name is known"scope" array listing in-scope components#### Node Structure - Technique (with evidence)
{
"id": "technique-c003-1",
"type": "technique",
"position": { "x": 95, "y": 160 },
"data": {
"id": "T-C003",
"name": "PWN Request / Poisoned Pipeline Execution",
"component": "cicd",
"stage": "Initial Access",
"description": "Full description from techniques.json",
"risks": ["risk1", "risk2"],
"controls": { "protective": [], "detective": [] },
"customLabel": "Exploited workflow in repo X",
"evidence": "PR #142 triggered workflow with write permissions",
"severity": "Critical"
},
"zIndex": 10,
"width": 160,
"height": 96
}After generating the flow, analyze defensive gaps:
| Technique | Missing Control | OWASP SPVS |
|-----------|-----------------|------------|
| T-C003 | Minimal workflow permissions | V3.1 |
| T-C005 | Log sanitization | V2.5 |Run this checklist before outputting:
[ ] Valid JSON structure (parse test passes)
[ ] Required fields: metadata.{name,title,created,version,framework,source}, nodes[], edges[]
[ ] All node IDs are unique
[ ] All edge source/target reference valid node IDs
[ ] Technique nodes use data.id and data.name (NOT techniqueId/label)
[ ] Technique nodes include full risks[] and controls from techniques.json
[ ] All techniques centered within components (x = component.x + 45)
[ ] Component heights adequate for technique count
[ ] Out-of-scope findings noted but not forced into SITF
[ ] Evidence preserved in customLabel or evidence fields
[ ] Exit points connected to terminal techniques
[ ] No orphaned nodes: every non-entry node has an incoming edge, EXCEPT roots marked "Contributing:"
[ ] Edge labels: at most 3-5 non-empty, each 1-2 words, transparent background
[ ] No client-identifying details unless the user confirmed the flow stays privateflows/red-team/<engagement-name>.jsonpython3 -c "import json; json.load(open('file'))"## Red Team Flow: <engagement-name>
### Attack Chain
1. Initial Access via [entry point]
2. [Technique] → [Technique] → ...
3. Impact: [exit point]
### Techniques Used
| ID | Name | Component | Evidence |
|----|------|-----------|----------|
| T-C003 | PWN Request | CI/CD | PR #142 |
| ... | ... | ... | ... |
### Control Gaps Identified
| Missing Control | Would Prevent | Priority |
|-----------------|---------------|----------|
| Minimal workflow permissions | T-C003, T-C005 | High |
| ... | ... | ... |
### Out-of-Scope Findings
- [Finding X]: Generic cloud attack, see MITRE ATT&CK T1078
### Technique Gaps
- [Finding Y]: No matching SITF technique, run `/technique-proposal`/technique-proposal for eachRed team reports are usually confidential, and flows may end up in a public repo or PR. Unless the user says otherwise, use a neutral engagement name, and leave client names, internal hostnames, account names and real secrets out of labels, evidence and metadata.
Users often adjust the layout in the visualizer and save over the file, then ask for more changes.
metadata.name to "Attack Flow" and drops title/description (check source, engagement and scope too). Check the metadata after every user save and restore it/red-team-flow acme-2026q1 --file ./reports/acme-final-report.md/red-team-flow client-audit --url https://internal.wiki/engagements/client-findings/red-team-flow demo-engagement
We started with access to a developer laptop (assumed breach). Found GitHub
PAT in ~/.config/gh/hosts.yml. Used the token to access private repos and
discovered hardcoded AWS credentials in a workflow file. The AWS creds had
admin access to production S3 buckets. We exfiltrated customer data as POC.Red Team Reports (attack chains):
Pentest Reports (isolated findings):
The skill auto-detects based on report structure:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.