SECURITY REVIEW
Not yet assessed
Review the original instructions and requested permissions before installing.
No security review is available for this catalog entry yet.
Deep DFD understanding from images and text. Multi-phase analysis protocol that extracts entities, maps data flows, contextualizes security boundaries, and produces structured DFD features JSON for threat modeling.
Review the original instructions and requested permissions before installing.
No security review is available for this catalog entry yet.
How clearly the skill guides your agent, how complete its workflow is, and how you can check the outcome.
No quality assessment is available for this catalog entry yet.
Original instructions from the publisher’s SKILL.md
# DFD Analysis Skill
> **Purpose:** Enable models to deeply understand Data Flow Diagrams from **images**, **text descriptions**, or **structured input** — then produce a detailed, validated DFD features JSON optimized for threat modeling and diagram rendering.
---
## When to Use
| Trigger | Action |
|---------|--------|
| User provides a DFD image/screenshot | Activate **Image Analysis Mode** → read `image-analysis.md` |
| User provides structured system description (JSON) | Activate **Text Analysis Mode** |
| User describes a system in natural language | Activate **Text Analysis Mode** (parse into structured input first) |
| User provides both image + text | Activate **Hybrid Mode** (image as primary, text as supplement) |
| Need to validate/review existing DFD JSON | Activate **Validation Mode** (Phase 5 only) |
---
## 5-Phase Analysis Protocol
Every DFD analysis follows these phases sequentially. **No phase may be skipped.**
### Phase 1 — Input Classification
Determine input type and prepare for analysis.
| Input Type | Detection | Preparation |
|------------|-----------|-------------|
| **Image** | File/URL with image extension, or vision input | Read `image-analysis.md` → extract visual elements |
| **Structured JSON** | Has `structured_input` with `users`, `systempurpose`, `keyfeatures` etc. | Parse directly |
| **Natural Language** | Free-form text describing a system | Convert to structured input format first |
| **Hybrid** | Image + any text/JSON | Parse image first, merge with text data |
**For natural language → structured input conversion:**
Extract these fields from the description:
- `users` — Who interacts with the system?
- `systempurpose` — What does the system do?
- `keyfeatures` — What are the main capabilities?
- `hostingenvironment` — Where is it deployed?
- `sensitivedata` — What sensitive/PII data exists?
- `thirdpartyservices` — What external services are used?
- `accessmethods` — How do users access it?
- `datastores` — What data stores exist?
- `cybercontrols` — What security controls exist?
- `assets` — What valuable data needs protection? (optional)
- `threat_actors` — What threat actors are relevant? (optional)
---
### Phase 2 — Entity Extraction
Extract the three core DFD element types. Refer to `json-schema.md` for naming rules.
#### 2a. External Entities
- **Sources:** `users` + `thirdpartyservices` fields
- **Rules:**
- Capitalize properly: `customers` → `Customers`
- Normalize third-party names: `google login` → `Google SSO`, `stripe payment` → `Stripe`
- Include all user types AND external service providers
#### 2b. Processes
- **Source:** `keyfeatures` field
- **Rules:**
- Each feature becomes a process, capitalize each word
- For payment services: add `Process Payment` only if no explicit checkout/pay feature
- Keep process names action-oriented: `Login`, `Search Products`, `Checkout And Pay`
#### 2c. Data Stores
- **Derived from:** processes (NOT directly from input)
- **Naming rules:**
- `Manage [Entity]` → `[Entity] Database`
- `Manage [Entity]s` → `[Entity] Database` (singular)
- Special: `Manage Blog Posts` → `Blog Database`
- Logical derivation: `Search Products` → `Product Database`
- **Exclusions:**
- No `User Database` if SSO handles auth externally
- No `Payment Database` if payments handled by third-party
---
### Phase 3 — Flow Mapping
Map all data flows following strict Source → Process → Target pattern.
#### Hard Rules (NEVER violate)
| Rule | Violation Example | Correct Form |
|------|-------------------|--------------|
| No direct entity↔data store flows | `Customer → User Database` | `Customer → Login → User Database` |
| No direct entity↔entity flows | `Stripe → Customer` | `Stripe → Process Payment → Customer` |
| Every flow passes through a process | `Product DB → Customer` | `Product DB → Search Products → Customer` |
| Include return flows | One-way only | Add reverse flow (query results, confirmations) |
#### Entity-to-Process Matching
Use these mappings to connect external entities to processes. See `json-schema.md` for the complete mapping table.
| External Entity Type | Matches Processes Containing |
|---------------------|------------------------------|
| Payment (Stripe, PayPal, Razorpay) | payment, pay, checkout, transaction, billing |
| Search (Elastic, Algolia) | search, browse, find, query, discover |
| Auth (Google SSO, Auth0, Okta) | login, auth, sign, authenticate |
| AI (OpenAI, Claude, Gemini) | generate, analyze, predict, recommend, chat |
| Communication (Twilio, SendGrid) | notify, message, email, sms, alert |
| Maps (Google Maps, Mapbox) | map, location, track, navigate, delivery |
| Storage (S3, Azure Blob) | upload, download, store, backup |
#### Authentication Flows
- SSO: `User → Login → SSO Provider` + `SSO Provider → Login → User`
- Include callback flows where applicable
#### Flow Numbering
- Sequential: `1.`, `2.`, `3.`...
- Use arrow symbol: `→`
- Format: `"1. Source → Process → Target"`
---
### Phase 4 — Security Contextualization
Build the security layer on top of the functional DFD.
#### 4a. Trust Boundaries
Hierarchical zones with nesting support. Standard zones:
| Zone | Contains | Nesting |
|------|----------|---------|
| Internet Zone | External users | Children: per-user-type networks |
| DMZ | Public-facing processes | — |
| Application Zone | Business logic processes | — |
| Data Zone | Databases, file storage | — |
| External Services Zone | Third-party entities | — |
| PCI Zone | Payment processes (if card data) | — |
| Admin Zone | Admin processes | — |
Determine boundaries based on: deployment environment, data sensitivity, data flow patterns.
#### 4b. Assets
Identify valuable data that needs protection.
- **Priority:** Use input `assets` if provided; otherwise derive from `sensitivedata` + processes/data stores
- **IDs:** A01, A02, A03...
- **Sensitivity:** `high` | `medium` | `low`
- **Common assets:** User Credentials, Payment Data, Personal Information, Health Records, Business Data, API Keys/Secrets
#### 4c. Security Controls
Categorize from `cybercontrols` input.
- **IDs:** C01, C02, C03...
- **Types:** `authentication` | `authorization` | `encryption_transit` | `encryption_rest` | `monitoring` | `network` | `access_control`
- Associate with relevant nodes (processes) and edges (flow numbers)
- See `json-schema.md` for type-to-control mapping
#### 4d. Threat Actors
- **Priority:** Use input `threat_actors` if provided; otherwise infer from system type + assets
- **IDs:** T01, T02, T03...
- **Categories:** `external` | `insider` | `third_party` | `automated`
- Associate with target assets (by ID) and entry points (external entities)
---
### Phase 5 — Validation & Orphan Resolution
**This phase is mandatory. Do NOT skip.**
#### Step 1: Orphan Detection
Scan all external entities, processes, and data stores. Any that don't appear in ANY data flow → orphan list.
#### Step 2: Orphan Resolution
Apply these rules systematically:
| Orphan Type | Resolution Strategy |
|-------------|---------------------|
| **Orphan Process** | Match to entity whose ROLE relates to the function. Inventory → Store Managers/Vendors. Payment → Payment entities. Admin → Admins. Then connect to appropriate data store. |
| **Orphan External Entity** | Match to process that needs that entity type. User-type → user-facing processes. Service-type → integration processes. |
| **Orphan Data Store** | Match to process that would read/write that data. User DB → Login. Order DB → Checkout. Product DB → Search/Inventory. |
**After adding orphan flows:** number them sequentially after the last existing flow.
#### Step 3: Cross-Validation Checklist
- [ ] Every external entity appears in at least one flow
- [ ] Every process appears in at least one flow
- [ ] Every data store appears in at least one flow
- [ ] No direct entity↔data store flows exist
- [ ] No direct entity↔entity flows exist
- [ ] All flows follow Source → Process → Target pattern
- [ ] Return flows exist for query/response patterns
- [ ] Trust boundary components match actual entity/process/store names exactly
- [ ] All asset `associatedNodes` reference real node names
- [ ] All control `associatedEdges` reference real flow numbers
- [ ] All threat actor `entryPoints` reference real external entities
- [ ] All threat actor `targetAssets` reference real asset IDs
- [ ] IDs are sequential with no gaps (A01-A0N, C01-C0N, T01-T0N)
---
## Output
Produce a single JSON object matching the schema in `json-schema.md`.
**Format rules:**
- No markdown code fences in output
- Proper capitalization on all names
- Empty arrays `[]` for categories with no items
- No placeholder text
- Arrow symbol `→` in data flows
---
## Supplementary Files
| File | When to Read |
|------|-------------|
| `image-analysis.md` | When input contains a DFD image or screenshot |
| `json-schema.md` | Always — contains the output schema, all mapping rules, and naming conventions |
| `examples.md` | When you need reference input→output pairs |
---
## Anti-Patterns
| ❌ Don't | ✅ Do |
|----------|-------|
| Skip orphan resolution | Always run Phase 5 |
| Connect entities directly to data stores | Route through processes |
| Use generic names ("Database 1") | Use descriptive names ("Product Database") |
| Guess at unclear image elements | Flag uncertainty, ask user |
| Copy input verbatim without normalization | Capitalize, normalize third-party names |
| Add unnecessary data stores | Derive only from processes |
| Omit return flows | Include bidirectional flows for request/response |