bmad-plus 0.12.1 → 0.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +612 -580
- package/README.md +90 -115
- package/osint-agent-package/agents/osint-investigator.md +12 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/SKILL.md +491 -482
- package/osint-agent-package/skills/bmad-osint-investigate/osint/assets/dossier-template.md +126 -126
- package/osint-agent-package/skills/bmad-osint-investigate/osint/assets/lawful-basis-record.md +48 -48
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/content-extraction.md +100 -100
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/gdpr-osint.md +48 -48
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/platforms.md +130 -130
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/psychoprofile.md +69 -69
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/tools.md +281 -281
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/mcp-client.py +136 -136
- package/package.json +104 -91
- package/readme-international/README.de.md +596 -594
- package/readme-international/README.es.md +613 -611
- package/readme-international/README.fr.md +611 -609
- package/src/bmad-plus/agents/agent-shadow/SKILL.md +18 -0
- package/src/bmad-plus/data/role-triggers.yaml +52 -0
- package/src/bmad-plus/module.yaml +283 -283
- package/src/bmad-plus/packs/pack-animated/animated-website-agent.md +325 -325
- package/src/bmad-plus/packs/pack-animated/templates/animated-website-workflow.md +55 -55
- package/src/bmad-plus/packs/pack-backup/backup-agent.md +71 -71
- package/src/bmad-plus/packs/pack-backup/templates/backup-workflow.md +51 -51
- package/src/bmad-plus/packs/pack-dev-studio/README.md +162 -162
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/analyst-agent.md +73 -73
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/document-project.md +61 -61
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/domain-research.md +95 -95
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/market-research.md +95 -95
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/prfaq.md +134 -134
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/product-brief.md +80 -80
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/tech-writer-agent.md +73 -73
- package/src/bmad-plus/packs/pack-dev-studio/categories/analysis/technical-research.md +95 -95
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/architect-agent.md +73 -73
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/create-architecture.md +73 -73
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/create-epics-stories.md +92 -92
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/generate-project-context.md +80 -80
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/implementation-readiness.md +90 -90
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-01-init.md +153 -153
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-01b-continue.md +173 -173
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-02-context.md +224 -224
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-03-starter.md +329 -329
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-04-decisions.md +318 -318
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-05-patterns.md +359 -359
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-06-structure.md +379 -379
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-07-validation.md +361 -361
- package/src/bmad-plus/packs/pack-dev-studio/categories/architecture/steps/step-08-complete.md +81 -81
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/checkpoint-preview.md +67 -67
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-01-gather-context.md +85 -85
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-02-review.md +35 -35
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-03-triage.md +49 -49
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review-steps/step-04-present.md +131 -131
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/code-review.md +89 -89
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/correct-course.md +300 -300
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/create-story.md +428 -428
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-agent.md +73 -73
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-story-checklist.md +80 -80
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/dev-story.md +484 -484
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/investigate.md +193 -193
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/qa-e2e-tests.md +175 -175
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/quick-dev.md +110 -110
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/retrospective.md +1511 -1511
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/sprint-planning.md +298 -298
- package/src/bmad-plus/packs/pack-dev-studio/categories/implementation/sprint-status.md +296 -296
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/create-prd.md +29 -29
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/create-ux-design.md +74 -74
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/edit-prd.md +29 -29
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/pm-agent.md +73 -73
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/prd.md +89 -89
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/ux-designer-agent.md +73 -73
- package/src/bmad-plus/packs/pack-dev-studio/categories/planning/validate-prd.md +29 -29
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/advanced-elicitation.md +141 -141
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/adversarial-review.md +37 -37
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/bmad-help.md +75 -75
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/brainstorming.md +6 -6
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/customize.md +110 -110
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/distillator.md +176 -176
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/edge-case-hunter.md +67 -67
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/editorial-review-prose.md +86 -86
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/editorial-review-structure.md +179 -179
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/index-docs.md +66 -66
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/party-mode.md +127 -127
- package/src/bmad-plus/packs/pack-dev-studio/categories/utilities/shard-doc.md +105 -105
- package/src/bmad-plus/packs/pack-dev-studio/dev-studio-orchestrator.md +120 -120
- package/src/bmad-plus/packs/pack-dev-studio/shared/architecture-decision-template.md +12 -12
- package/src/bmad-plus/packs/pack-dev-studio/shared/bwml-spec.md +328 -328
- package/src/bmad-plus/packs/pack-dev-studio/shared/module-help.csv +32 -32
- package/src/bmad-plus/packs/pack-dev-studio/upstream-sync.yaml +81 -81
- package/src/bmad-plus/packs/pack-seo/SKILL.md +171 -171
- package/src/bmad-plus/packs/pack-seo/checklist.md +140 -140
- package/src/bmad-plus/packs/pack-seo/pagespeed-playbook.md +320 -320
- package/src/bmad-plus/packs/pack-seo/ref/audit-schema.json +187 -187
- package/src/bmad-plus/packs/pack-seo/ref/cwv-thresholds.md +87 -87
- package/src/bmad-plus/packs/pack-seo/ref/eeat-criteria.md +123 -123
- package/src/bmad-plus/packs/pack-seo/ref/geo-signals.md +167 -167
- package/src/bmad-plus/packs/pack-seo/ref/hreflang-rules.md +153 -153
- package/src/bmad-plus/packs/pack-seo/ref/quality-gates.md +133 -133
- package/src/bmad-plus/packs/pack-seo/ref/schema-catalog.md +91 -91
- package/src/bmad-plus/packs/pack-seo/ref/schema-templates.json +356 -356
- package/src/bmad-plus/packs/pack-seo/requirements.txt +17 -0
- package/src/bmad-plus/packs/pack-seo/scripts/seo_apis.py +456 -0
- package/src/bmad-plus/packs/pack-seo/scripts/seo_crawl.py +359 -0
- package/src/bmad-plus/packs/pack-seo/scripts/seo_fetch.py +304 -0
- package/src/bmad-plus/packs/pack-seo/scripts/seo_parse.py +255 -0
- package/src/bmad-plus/packs/pack-seo/scripts/seo_report.py +410 -0
- package/src/bmad-plus/packs/pack-seo/scripts/seo_screenshot.py +202 -0
- package/src/bmad-plus/packs/pack-seo/seo-chief.md +294 -294
- package/src/bmad-plus/packs/pack-seo/seo-judge.md +241 -241
- package/src/bmad-plus/packs/pack-seo/seo-scout.md +171 -171
- package/src/bmad-plus/packs/pack-seo/templates/seo-audit-workflow.md +241 -241
- package/src/bmad-plus/packs/pack-shield/README.md +6 -6
- package/src/bmad-plus/packs/pack-shield/SKILL.md +2 -2
- package/src/bmad-plus/packs/pack-shield/categories/accessibility-esg/csrd-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/accessibility-esg/section508-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/accessibility-esg/wcag-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/ai-governance/eu-ai-act-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/ai-governance/iso42001-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/ai-governance/nist-ai-rmf-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/cis-controls-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/ism-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/iso27001-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/nis2-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/nist-800-53-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/nist-csf-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/cmmc-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/ear-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/itar-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/tsa-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/dora-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/fedramp-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/hipaa-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/pci-dss-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/soc2-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/swift-csp-agent.md +11 -11
- package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +1 -1
- package/tools/build/check-counts.js +628 -0
- package/tools/build/generated-adapters/.codex/AGENTS.md +1 -1
- package/tools/build/generated-adapters/.cursor/rules/bmad-plus.mdc +1 -1
- package/tools/build/generated-adapters/.opencode/AGENTS.md +1 -1
- package/tools/build/generated-adapters/AGENTS.md +1 -1
- package/tools/build/generated-adapters/CLAUDE.md +1 -1
- package/tools/build/generated-adapters/CONVENTIONS.md +1 -1
- package/tools/build/generated-adapters/GEMINI.md +1 -1
- package/tools/cli/commands/autoconfig.js +470 -470
- package/tools/cli/commands/doctor.js +233 -233
- package/tools/cli/commands/install.js +598 -501
- package/tools/cli/commands/memory-journal-cmd.js +311 -311
- package/tools/cli/commands/memory.js +195 -195
- package/tools/cli/commands/scan.js +348 -348
- package/tools/cli/commands/uninstall.js +101 -101
- package/tools/cli/commands/update.js +134 -134
- package/tools/cli/i18n.js +845 -845
- package/tools/cli/lib/README-memory-journal.md +125 -125
- package/tools/cli/lib/ide-config.js +267 -259
- package/tools/cli/lib/python-provision.js +508 -508
- package/tools/cli/lib/stack-detect.js +102 -102
- package/tools/cli/lib/validate.js +50 -50
|
@@ -1,126 +1,126 @@
|
|
|
1
|
-
🔍 **OSINT: {FULL_NAME}**
|
|
2
|
-
*{one_line_summary}*
|
|
3
|
-
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
**⚖️ governance / lawful basis** *(Phase −1 gate — required before this dossier exists)*
|
|
7
|
-
- controller: {controller_name}
|
|
8
|
-
- lawful basis (Art. 6): {basis} {legitimate_interest_balancing_ref_if_LI}
|
|
9
|
-
- special-category condition (Art. 9, if psychoprofile): {art9_condition_or_NA}
|
|
10
|
-
- purpose: {specific_purpose}
|
|
11
|
-
- retention: {retention_period} · DSAR/erasure contact: {dsar_contact}
|
|
12
|
-
- recorded: {date} · see `assets/lawful-basis-record.md`
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
**контакты и соцсети**
|
|
17
|
-
- telegram: {handle} {status}
|
|
18
|
-
- linkedin: {url} {status}
|
|
19
|
-
- instagram: {handle} {status}
|
|
20
|
-
- facebook: {url} {status}
|
|
21
|
-
- email: {email} {status}
|
|
22
|
-
- телефон: {phone} {status}
|
|
23
|
-
- другое: {any_other}
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
**биография**
|
|
28
|
-
|
|
29
|
-
- дата рождения: {dob_only_if_confirmed_A_or_B}
|
|
30
|
-
- возраст: {age}
|
|
31
|
-
- место рождения: {birthplace}
|
|
32
|
-
- образование: {education}
|
|
33
|
-
|
|
34
|
-
**карьера:**
|
|
35
|
-
- **{year}** — {role}, {company} ({age_at_time})
|
|
36
|
-
- **{year}** — {role}, {company}
|
|
37
|
-
- ...
|
|
38
|
-
- **сейчас** — {current_role}, {current_company}
|
|
39
|
-
|
|
40
|
-
паттерн карьеры: {career_pattern_description}
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
**текущая ситуация**
|
|
45
|
-
- роль: {current_role}
|
|
46
|
-
- компания: {current_company} — {company_description}
|
|
47
|
-
- локация: {current_location}
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
**из переписки** 🔒
|
|
52
|
-
*секция на основе Telegram/email — не для внешнего использования*
|
|
53
|
-
|
|
54
|
-
- характер общения: {formal_informal_emoji_patterns}
|
|
55
|
-
- темы: {what_they_discuss_ask_about}
|
|
56
|
-
- стиль: {response_speed_active_hours_language}
|
|
57
|
-
- контекст отношений: {cold_warm_hot_business_personal}
|
|
58
|
-
- упомянутые люди: {colleagues_partners_from_conversations}
|
|
59
|
-
- {any_deal_terms_pricing_discussed}
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
**психопрофиль**
|
|
64
|
-
|
|
65
|
-
**MBTI: {type} ({confidence})**
|
|
66
|
-
- E/I: {assessment} — {evidence}
|
|
67
|
-
- S/N: {assessment} — {evidence}
|
|
68
|
-
- T/F: {assessment} — {evidence}
|
|
69
|
-
- J/P: {assessment} — {evidence}
|
|
70
|
-
|
|
71
|
-
**стиль коммуникации:**
|
|
72
|
-
- голос: {voice_description}
|
|
73
|
-
- ритм: {rhythm_description}
|
|
74
|
-
- эмодзи: {emoji_pattern}
|
|
75
|
-
- формальный vs неформальный: {delta_between_linkedin_and_telegram}
|
|
76
|
-
- ключевые маркеры: {markers}
|
|
77
|
-
|
|
78
|
-
**ценности (по действиям):**
|
|
79
|
-
- {value_1}
|
|
80
|
-
- {value_2}
|
|
81
|
-
- {value_3}
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
**личное**
|
|
86
|
-
- семья: {family_only_confirmed}
|
|
87
|
-
- питомцы: {pets_only_confirmed}
|
|
88
|
-
- увлечения: {hobbies}
|
|
89
|
-
- стиль жизни: {lifestyle}
|
|
90
|
-
|
|
91
|
-
---
|
|
92
|
-
|
|
93
|
-
**наблюдения**
|
|
94
|
-
- {observation_1_contradictions_or_patterns}
|
|
95
|
-
- {observation_2}
|
|
96
|
-
- {observation_3}
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
**карта достоверности**
|
|
101
|
-
- A (подтверждено, 2+ источника): {list_of_A_facts}
|
|
102
|
-
- B (вероятно, 1 надёжный источник): {list_of_B_facts}
|
|
103
|
-
- C (выведено, косвенные данные): {list_of_C_facts}
|
|
104
|
-
- D (не подтверждено): {list_of_D_facts}
|
|
105
|
-
|
|
106
|
-
---
|
|
107
|
-
|
|
108
|
-
**точки входа**
|
|
109
|
-
- {approach_1_shared_connections_or_topics}
|
|
110
|
-
- {approach_2}
|
|
111
|
-
- {approach_3}
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
**пробелы**
|
|
116
|
-
- {gap_1_what_not_found}
|
|
117
|
-
- {gap_2}
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
**метрики**
|
|
122
|
-
- depth score: {score}/10
|
|
123
|
-
- coverage: {passed}/{total} checks
|
|
124
|
-
- источников: {source_count} ({source_types_list})
|
|
125
|
-
- внутренняя разведка: {yes_no_what_checked}
|
|
126
|
-
- потрачено: ${total_cost}
|
|
1
|
+
🔍 **OSINT: {FULL_NAME}**
|
|
2
|
+
*{one_line_summary}*
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
**⚖️ governance / lawful basis** *(Phase −1 gate — required before this dossier exists)*
|
|
7
|
+
- controller: {controller_name}
|
|
8
|
+
- lawful basis (Art. 6): {basis} {legitimate_interest_balancing_ref_if_LI}
|
|
9
|
+
- special-category condition (Art. 9, if psychoprofile): {art9_condition_or_NA}
|
|
10
|
+
- purpose: {specific_purpose}
|
|
11
|
+
- retention: {retention_period} · DSAR/erasure contact: {dsar_contact}
|
|
12
|
+
- recorded: {date} · see `assets/lawful-basis-record.md`
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
**контакты и соцсети**
|
|
17
|
+
- telegram: {handle} {status}
|
|
18
|
+
- linkedin: {url} {status}
|
|
19
|
+
- instagram: {handle} {status}
|
|
20
|
+
- facebook: {url} {status}
|
|
21
|
+
- email: {email} {status}
|
|
22
|
+
- телефон: {phone} {status}
|
|
23
|
+
- другое: {any_other}
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
**биография**
|
|
28
|
+
|
|
29
|
+
- дата рождения: {dob_only_if_confirmed_A_or_B}
|
|
30
|
+
- возраст: {age}
|
|
31
|
+
- место рождения: {birthplace}
|
|
32
|
+
- образование: {education}
|
|
33
|
+
|
|
34
|
+
**карьера:**
|
|
35
|
+
- **{year}** — {role}, {company} ({age_at_time})
|
|
36
|
+
- **{year}** — {role}, {company}
|
|
37
|
+
- ...
|
|
38
|
+
- **сейчас** — {current_role}, {current_company}
|
|
39
|
+
|
|
40
|
+
паттерн карьеры: {career_pattern_description}
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
**текущая ситуация**
|
|
45
|
+
- роль: {current_role}
|
|
46
|
+
- компания: {current_company} — {company_description}
|
|
47
|
+
- локация: {current_location}
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
**из переписки** 🔒
|
|
52
|
+
*секция на основе Telegram/email — не для внешнего использования*
|
|
53
|
+
|
|
54
|
+
- характер общения: {formal_informal_emoji_patterns}
|
|
55
|
+
- темы: {what_they_discuss_ask_about}
|
|
56
|
+
- стиль: {response_speed_active_hours_language}
|
|
57
|
+
- контекст отношений: {cold_warm_hot_business_personal}
|
|
58
|
+
- упомянутые люди: {colleagues_partners_from_conversations}
|
|
59
|
+
- {any_deal_terms_pricing_discussed}
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
**психопрофиль**
|
|
64
|
+
|
|
65
|
+
**MBTI: {type} ({confidence})**
|
|
66
|
+
- E/I: {assessment} — {evidence}
|
|
67
|
+
- S/N: {assessment} — {evidence}
|
|
68
|
+
- T/F: {assessment} — {evidence}
|
|
69
|
+
- J/P: {assessment} — {evidence}
|
|
70
|
+
|
|
71
|
+
**стиль коммуникации:**
|
|
72
|
+
- голос: {voice_description}
|
|
73
|
+
- ритм: {rhythm_description}
|
|
74
|
+
- эмодзи: {emoji_pattern}
|
|
75
|
+
- формальный vs неформальный: {delta_between_linkedin_and_telegram}
|
|
76
|
+
- ключевые маркеры: {markers}
|
|
77
|
+
|
|
78
|
+
**ценности (по действиям):**
|
|
79
|
+
- {value_1}
|
|
80
|
+
- {value_2}
|
|
81
|
+
- {value_3}
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
**личное**
|
|
86
|
+
- семья: {family_only_confirmed}
|
|
87
|
+
- питомцы: {pets_only_confirmed}
|
|
88
|
+
- увлечения: {hobbies}
|
|
89
|
+
- стиль жизни: {lifestyle}
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
**наблюдения**
|
|
94
|
+
- {observation_1_contradictions_or_patterns}
|
|
95
|
+
- {observation_2}
|
|
96
|
+
- {observation_3}
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
**карта достоверности**
|
|
101
|
+
- A (подтверждено, 2+ источника): {list_of_A_facts}
|
|
102
|
+
- B (вероятно, 1 надёжный источник): {list_of_B_facts}
|
|
103
|
+
- C (выведено, косвенные данные): {list_of_C_facts}
|
|
104
|
+
- D (не подтверждено): {list_of_D_facts}
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
**точки входа**
|
|
109
|
+
- {approach_1_shared_connections_or_topics}
|
|
110
|
+
- {approach_2}
|
|
111
|
+
- {approach_3}
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
**пробелы**
|
|
116
|
+
- {gap_1_what_not_found}
|
|
117
|
+
- {gap_2}
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
**метрики**
|
|
122
|
+
- depth score: {score}/10
|
|
123
|
+
- coverage: {passed}/{total} checks
|
|
124
|
+
- источников: {source_count} ({source_types_list})
|
|
125
|
+
- внутренняя разведка: {yes_no_what_checked}
|
|
126
|
+
- потрачено: ${total_cost}
|
package/osint-agent-package/skills/bmad-osint-investigate/osint/assets/lawful-basis-record.md
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
# Lawful Basis Record — OSINT investigation (GDPR Phase −1 gate)
|
|
2
|
-
|
|
3
|
-
Complete this BEFORE profiling a named natural person. It doubles as the ROPA
|
|
4
|
-
(Record of Processing Activities) entry for this investigation. Governed by Shield (GRC).
|
|
5
|
-
|
|
6
|
-
## 1. Parties
|
|
7
|
-
- **Controller:** {who decides why/how — org or person}
|
|
8
|
-
- **Operator / analyst:** {who runs the investigation}
|
|
9
|
-
- **Data subject:** {named person} — category: {public figure | employee | counterparty | other}
|
|
10
|
-
|
|
11
|
-
## 2. Purpose (purpose limitation — GDPR Art. 5(1)(b))
|
|
12
|
-
- **Specific purpose:** {e.g. pre-contract due diligence on a supplier director; NOT "find everything"}
|
|
13
|
-
- **Why OSINT is necessary & proportionate for this purpose:** {justification}
|
|
14
|
-
|
|
15
|
-
## 3. Lawful basis — GDPR Art. 6(1)
|
|
16
|
-
Select ONE and justify:
|
|
17
|
-
- [ ] (a) Consent — attach/reference the consent record
|
|
18
|
-
- [ ] (b) Contract — necessary for a contract with the data subject
|
|
19
|
-
- [ ] (c) Legal obligation — cite the obligation
|
|
20
|
-
- [ ] (d) Vital interests
|
|
21
|
-
- [ ] (e) Public task
|
|
22
|
-
- [ ] (f) **Legitimate interest** — complete the 3-part balancing test below
|
|
23
|
-
|
|
24
|
-
**Legitimate Interest Assessment (if (f)):**
|
|
25
|
-
- Purpose test (is there a legitimate interest?): {…}
|
|
26
|
-
- Necessity test (is OSINT necessary, or is there a less intrusive way?): {…}
|
|
27
|
-
- Balancing test (do the person's rights/freedoms override?): {…}
|
|
28
|
-
|
|
29
|
-
## 4. Special-category data — GDPR Art. 9 (REQUIRED if building a psychoprofile)
|
|
30
|
-
Inferring personality (MBTI/Big Five), health, political opinions, religion, sexual
|
|
31
|
-
orientation, etc. is special-category processing. Select an Art. 9(2) condition:
|
|
32
|
-
- [ ] (a) Explicit consent
|
|
33
|
-
- [ ] (e) Data manifestly made public by the data subject (document how)
|
|
34
|
-
- [ ] (f) Legal claims
|
|
35
|
-
- [ ] other: {cite}
|
|
36
|
-
- **If none applies → do NOT build the psychoprofile.** Keep the factual dossier only.
|
|
37
|
-
|
|
38
|
-
## 5. Data-subject rights & retention
|
|
39
|
-
- **Retention period:** {e.g. 90 days after purpose fulfilled, then delete}
|
|
40
|
-
- **DSAR / erasure contact:** {email/process to honor access, rectification, erasure, objection}
|
|
41
|
-
- **Transparency:** how/whether the data subject is or will be informed (Art. 14), or the exemption relied on.
|
|
42
|
-
|
|
43
|
-
## 6. Sign-off
|
|
44
|
-
- Basis confirmed by: {name} · date: {date}
|
|
45
|
-
- Shield review (if enterprise/high-risk): {ref or N/A}
|
|
46
|
-
|
|
47
|
-
> If sections 2–4 cannot be completed, the Phase −1 gate FAILS: decline the
|
|
48
|
-
> named-person profiling and use the non-personal research paths instead.
|
|
1
|
+
# Lawful Basis Record — OSINT investigation (GDPR Phase −1 gate)
|
|
2
|
+
|
|
3
|
+
Complete this BEFORE profiling a named natural person. It doubles as the ROPA
|
|
4
|
+
(Record of Processing Activities) entry for this investigation. Governed by Shield (GRC).
|
|
5
|
+
|
|
6
|
+
## 1. Parties
|
|
7
|
+
- **Controller:** {who decides why/how — org or person}
|
|
8
|
+
- **Operator / analyst:** {who runs the investigation}
|
|
9
|
+
- **Data subject:** {named person} — category: {public figure | employee | counterparty | other}
|
|
10
|
+
|
|
11
|
+
## 2. Purpose (purpose limitation — GDPR Art. 5(1)(b))
|
|
12
|
+
- **Specific purpose:** {e.g. pre-contract due diligence on a supplier director; NOT "find everything"}
|
|
13
|
+
- **Why OSINT is necessary & proportionate for this purpose:** {justification}
|
|
14
|
+
|
|
15
|
+
## 3. Lawful basis — GDPR Art. 6(1)
|
|
16
|
+
Select ONE and justify:
|
|
17
|
+
- [ ] (a) Consent — attach/reference the consent record
|
|
18
|
+
- [ ] (b) Contract — necessary for a contract with the data subject
|
|
19
|
+
- [ ] (c) Legal obligation — cite the obligation
|
|
20
|
+
- [ ] (d) Vital interests
|
|
21
|
+
- [ ] (e) Public task
|
|
22
|
+
- [ ] (f) **Legitimate interest** — complete the 3-part balancing test below
|
|
23
|
+
|
|
24
|
+
**Legitimate Interest Assessment (if (f)):**
|
|
25
|
+
- Purpose test (is there a legitimate interest?): {…}
|
|
26
|
+
- Necessity test (is OSINT necessary, or is there a less intrusive way?): {…}
|
|
27
|
+
- Balancing test (do the person's rights/freedoms override?): {…}
|
|
28
|
+
|
|
29
|
+
## 4. Special-category data — GDPR Art. 9 (REQUIRED if building a psychoprofile)
|
|
30
|
+
Inferring personality (MBTI/Big Five), health, political opinions, religion, sexual
|
|
31
|
+
orientation, etc. is special-category processing. Select an Art. 9(2) condition:
|
|
32
|
+
- [ ] (a) Explicit consent
|
|
33
|
+
- [ ] (e) Data manifestly made public by the data subject (document how)
|
|
34
|
+
- [ ] (f) Legal claims
|
|
35
|
+
- [ ] other: {cite}
|
|
36
|
+
- **If none applies → do NOT build the psychoprofile.** Keep the factual dossier only.
|
|
37
|
+
|
|
38
|
+
## 5. Data-subject rights & retention
|
|
39
|
+
- **Retention period:** {e.g. 90 days after purpose fulfilled, then delete}
|
|
40
|
+
- **DSAR / erasure contact:** {email/process to honor access, rectification, erasure, objection}
|
|
41
|
+
- **Transparency:** how/whether the data subject is or will be informed (Art. 14), or the exemption relied on.
|
|
42
|
+
|
|
43
|
+
## 6. Sign-off
|
|
44
|
+
- Basis confirmed by: {name} · date: {date}
|
|
45
|
+
- Shield review (if enterprise/high-risk): {ref or N/A}
|
|
46
|
+
|
|
47
|
+
> If sections 2–4 cannot be completed, the Phase −1 gate FAILS: decline the
|
|
48
|
+
> named-person profiling and use the non-personal research paths instead.
|
package/osint-agent-package/skills/bmad-osint-investigate/osint/references/content-extraction.md
CHANGED
|
@@ -1,100 +1,100 @@
|
|
|
1
|
-
# Content Extraction Guide
|
|
2
|
-
|
|
3
|
-
When you find a content platform (YouTube, podcast, blog, conference talks) -
|
|
4
|
-
**extract everything immediately.** Don't just note the URL and move on.
|
|
5
|
-
|
|
6
|
-
## Principle
|
|
7
|
-
|
|
8
|
-
Content platforms are the richest source for psychoprofile and real personality.
|
|
9
|
-
LinkedIn is a resume. Instagram is a highlight reel. YouTube/podcasts are unfiltered.
|
|
10
|
-
|
|
11
|
-
A person talking for 20 minutes on camera reveals more than 100 LinkedIn posts.
|
|
12
|
-
|
|
13
|
-
## YouTube
|
|
14
|
-
|
|
15
|
-
### Discovery
|
|
16
|
-
```bash
|
|
17
|
-
# Search for channel
|
|
18
|
-
web_search "site:youtube.com <Name> <context>"
|
|
19
|
-
bash skills/osint/scripts/exa.sh search "<Name> youtube channel"
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### Channel metadata
|
|
23
|
-
```bash
|
|
24
|
-
# Fetch channel page - subscriber count, video count, about
|
|
25
|
-
web_fetch "https://www.youtube.com/@<handle>"
|
|
26
|
-
# Or channel page
|
|
27
|
-
bash skills/osint/scripts/jina.sh read "https://www.youtube.com/@<handle>/about"
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### Transcript extraction (CRITICAL)
|
|
31
|
-
Pick 3-5 most viewed or most recent videos. Extract transcripts:
|
|
32
|
-
```bash
|
|
33
|
-
# Fetch video page - title, description, comments
|
|
34
|
-
web_fetch "https://www.youtube.com/watch?v=<id>"
|
|
35
|
-
# Get auto-generated transcript via Jina
|
|
36
|
-
bash skills/osint/scripts/jina.sh read "https://www.youtube.com/watch?v=<id>"
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
If transcripts unavailable via fetch, try:
|
|
40
|
-
```bash
|
|
41
|
-
bash skills/osint/scripts/brightdata.sh scrape "https://www.youtube.com/watch?v=<id>"
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### What to extract from YouTube:
|
|
45
|
-
- **Topics** - what they talk about = what they care about
|
|
46
|
-
- **Speaking style** - formal/casual, speed, filler words, humor
|
|
47
|
-
- **Vocabulary** - jargon level, code-switching between languages
|
|
48
|
-
- **Self-presentation** - humble/confident/arrogant, claims vs evidence
|
|
49
|
-
- **Recurring themes** - across videos, what keeps coming back
|
|
50
|
-
- **Guest interactions** - how they treat guests, who they invite
|
|
51
|
-
- **Comment section** - audience demographics, sentiment
|
|
52
|
-
- **Upload frequency** - consistency = discipline trait
|
|
53
|
-
- **Video titles** - clickbait vs informative = marketing approach
|
|
54
|
-
- **Playlists** - how they organize knowledge = thinking structure
|
|
55
|
-
|
|
56
|
-
### Budget: 3-5 video transcripts via Jina = ~$0.02-0.05
|
|
57
|
-
|
|
58
|
-
## Podcasts / Audio Appearances
|
|
59
|
-
|
|
60
|
-
Search for podcast appearances:
|
|
61
|
-
```bash
|
|
62
|
-
web_search "<Name> podcast interview"
|
|
63
|
-
bash skills/osint/scripts/exa.sh search "<Name> podcast episode guest"
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
Podcast interviews are gold - the host asks personal questions.
|
|
67
|
-
Look for: origin story, career pivots, failures mentioned, mentors named.
|
|
68
|
-
|
|
69
|
-
## Blog / Personal Website
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
web_fetch "<personal-site>"
|
|
73
|
-
bash skills/osint/scripts/jina.sh read "<blog-url>"
|
|
74
|
-
# Crawl multiple pages
|
|
75
|
-
bash skills/osint/scripts/exa.sh crawl "<blog-url>"
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Extract: writing style, topics, frequency, tone evolution over time.
|
|
79
|
-
|
|
80
|
-
## Conference Talks / Speaker Bios
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
web_search "<Name> speaker conference talk"
|
|
84
|
-
web_search "site:youtube.com <Name> conference keynote"
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
Speaker bios at conferences are often more honest than LinkedIn -
|
|
88
|
-
written for specific audience, include unique details.
|
|
89
|
-
|
|
90
|
-
## Rule: Immediate Deep Extraction
|
|
91
|
-
|
|
92
|
-
When you discover ANY content platform during Phase 1-2:
|
|
93
|
-
|
|
94
|
-
1. **STOP** current task
|
|
95
|
-
2. **Extract** 3-5 pieces of content immediately
|
|
96
|
-
3. **Analyze** for psychoprofile signals
|
|
97
|
-
4. **Resume** original task with enriched data
|
|
98
|
-
|
|
99
|
-
Do NOT bookmark for later. Later = never.
|
|
100
|
-
The insight from 3 YouTube transcripts outweighs 10 LinkedIn connections.
|
|
1
|
+
# Content Extraction Guide
|
|
2
|
+
|
|
3
|
+
When you find a content platform (YouTube, podcast, blog, conference talks) -
|
|
4
|
+
**extract everything immediately.** Don't just note the URL and move on.
|
|
5
|
+
|
|
6
|
+
## Principle
|
|
7
|
+
|
|
8
|
+
Content platforms are the richest source for psychoprofile and real personality.
|
|
9
|
+
LinkedIn is a resume. Instagram is a highlight reel. YouTube/podcasts are unfiltered.
|
|
10
|
+
|
|
11
|
+
A person talking for 20 minutes on camera reveals more than 100 LinkedIn posts.
|
|
12
|
+
|
|
13
|
+
## YouTube
|
|
14
|
+
|
|
15
|
+
### Discovery
|
|
16
|
+
```bash
|
|
17
|
+
# Search for channel
|
|
18
|
+
web_search "site:youtube.com <Name> <context>"
|
|
19
|
+
bash skills/osint/scripts/exa.sh search "<Name> youtube channel"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Channel metadata
|
|
23
|
+
```bash
|
|
24
|
+
# Fetch channel page - subscriber count, video count, about
|
|
25
|
+
web_fetch "https://www.youtube.com/@<handle>"
|
|
26
|
+
# Or channel page
|
|
27
|
+
bash skills/osint/scripts/jina.sh read "https://www.youtube.com/@<handle>/about"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Transcript extraction (CRITICAL)
|
|
31
|
+
Pick 3-5 most viewed or most recent videos. Extract transcripts:
|
|
32
|
+
```bash
|
|
33
|
+
# Fetch video page - title, description, comments
|
|
34
|
+
web_fetch "https://www.youtube.com/watch?v=<id>"
|
|
35
|
+
# Get auto-generated transcript via Jina
|
|
36
|
+
bash skills/osint/scripts/jina.sh read "https://www.youtube.com/watch?v=<id>"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If transcripts unavailable via fetch, try:
|
|
40
|
+
```bash
|
|
41
|
+
bash skills/osint/scripts/brightdata.sh scrape "https://www.youtube.com/watch?v=<id>"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### What to extract from YouTube:
|
|
45
|
+
- **Topics** - what they talk about = what they care about
|
|
46
|
+
- **Speaking style** - formal/casual, speed, filler words, humor
|
|
47
|
+
- **Vocabulary** - jargon level, code-switching between languages
|
|
48
|
+
- **Self-presentation** - humble/confident/arrogant, claims vs evidence
|
|
49
|
+
- **Recurring themes** - across videos, what keeps coming back
|
|
50
|
+
- **Guest interactions** - how they treat guests, who they invite
|
|
51
|
+
- **Comment section** - audience demographics, sentiment
|
|
52
|
+
- **Upload frequency** - consistency = discipline trait
|
|
53
|
+
- **Video titles** - clickbait vs informative = marketing approach
|
|
54
|
+
- **Playlists** - how they organize knowledge = thinking structure
|
|
55
|
+
|
|
56
|
+
### Budget: 3-5 video transcripts via Jina = ~$0.02-0.05
|
|
57
|
+
|
|
58
|
+
## Podcasts / Audio Appearances
|
|
59
|
+
|
|
60
|
+
Search for podcast appearances:
|
|
61
|
+
```bash
|
|
62
|
+
web_search "<Name> podcast interview"
|
|
63
|
+
bash skills/osint/scripts/exa.sh search "<Name> podcast episode guest"
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Podcast interviews are gold - the host asks personal questions.
|
|
67
|
+
Look for: origin story, career pivots, failures mentioned, mentors named.
|
|
68
|
+
|
|
69
|
+
## Blog / Personal Website
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
web_fetch "<personal-site>"
|
|
73
|
+
bash skills/osint/scripts/jina.sh read "<blog-url>"
|
|
74
|
+
# Crawl multiple pages
|
|
75
|
+
bash skills/osint/scripts/exa.sh crawl "<blog-url>"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Extract: writing style, topics, frequency, tone evolution over time.
|
|
79
|
+
|
|
80
|
+
## Conference Talks / Speaker Bios
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
web_search "<Name> speaker conference talk"
|
|
84
|
+
web_search "site:youtube.com <Name> conference keynote"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Speaker bios at conferences are often more honest than LinkedIn -
|
|
88
|
+
written for specific audience, include unique details.
|
|
89
|
+
|
|
90
|
+
## Rule: Immediate Deep Extraction
|
|
91
|
+
|
|
92
|
+
When you discover ANY content platform during Phase 1-2:
|
|
93
|
+
|
|
94
|
+
1. **STOP** current task
|
|
95
|
+
2. **Extract** 3-5 pieces of content immediately
|
|
96
|
+
3. **Analyze** for psychoprofile signals
|
|
97
|
+
4. **Resume** original task with enriched data
|
|
98
|
+
|
|
99
|
+
Do NOT bookmark for later. Later = never.
|
|
100
|
+
The insight from 3 YouTube transcripts outweighs 10 LinkedIn connections.
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
# GDPR & OSINT — governance for the investigate skill
|
|
2
|
-
|
|
3
|
-
This pack performs OSINT on named individuals, including psychoprofiling. That is
|
|
4
|
-
personal-data processing (GDPR + analogous laws such as UK GDPR, LGPD, CCPA/CPRA).
|
|
5
|
-
BMAD+ **keeps** this capability and **governs** it — the Phase −1 lawful-basis gate
|
|
6
|
-
in `SKILL.md` makes lawful use explicit and auditable rather than removing the pack.
|
|
7
|
-
(Decision: keep + govern, 2026-07-02.)
|
|
8
|
-
|
|
9
|
-
## Why this matters
|
|
10
|
-
- Profiling and evaluating personal aspects is regulated (GDPR Art. 4(4), Art. 22, Recital 71).
|
|
11
|
-
- Inferring personality, health, political/religious views, or sexual orientation is
|
|
12
|
-
**special-category** processing (Art. 9) — a higher bar than ordinary personal data.
|
|
13
|
-
- "Publicly available" ≠ "no rules apply." Scraping public profiles is still processing;
|
|
14
|
-
you still need a lawful basis and must respect purpose limitation and data-subject rights.
|
|
15
|
-
|
|
16
|
-
## The gate, in one line
|
|
17
|
-
No lawful basis + specific purpose recorded (`assets/lawful-basis-record.md`) → no
|
|
18
|
-
named-person profiling. Non-personal research (company/product/market, public entities)
|
|
19
|
-
is unaffected.
|
|
20
|
-
|
|
21
|
-
## Legitimate interest (the common basis)
|
|
22
|
-
When relying on Art. 6(1)(f), complete the 3-part LIA in the record:
|
|
23
|
-
1. **Purpose** — a real, specific legitimate interest (due diligence, fraud/security, journalism).
|
|
24
|
-
2. **Necessity** — OSINT is necessary and proportionate; no less-intrusive route.
|
|
25
|
-
3. **Balancing** — the person's rights/freedoms do not override; consider their reasonable
|
|
26
|
-
expectations, the sensitivity of the data, and any special-category inference (which
|
|
27
|
-
usually tips the balance and requires an Art. 9 condition instead).
|
|
28
|
-
|
|
29
|
-
## Special-category / psychoprofile
|
|
30
|
-
Only build the psychoprofile (MBTI/Big Five, etc.) with a valid **Art. 9(2)** condition
|
|
31
|
-
(typically explicit consent, or data manifestly made public by the subject). Otherwise
|
|
32
|
-
keep the factual dossier and skip the personality inference.
|
|
33
|
-
|
|
34
|
-
## Data-subject rights & retention
|
|
35
|
-
- Define a **retention period**; delete when the purpose is met.
|
|
36
|
-
- Provide a **DSAR/erasure** path (access, rectification, erasure, objection).
|
|
37
|
-
- Consider **transparency** (Art. 14) or a documented exemption.
|
|
38
|
-
|
|
39
|
-
## Prohibited / out of scope
|
|
40
|
-
- No profiling without a recorded basis + purpose.
|
|
41
|
-
- No use for unlawful discrimination, harassment, stalking, or unauthorized surveillance.
|
|
42
|
-
- No special-category inference without an Art. 9 condition.
|
|
43
|
-
|
|
44
|
-
## Related BMAD+ assets
|
|
45
|
-
- `SKILL.md` → Phase −1 gate.
|
|
46
|
-
- `assets/lawful-basis-record.md` → gate record + ROPA entry.
|
|
47
|
-
- Shield (GRC) pack → `gdpr-agent`, `legitimate-interest`, `dpia-sentinel`, `privacy-notice-gen`
|
|
48
|
-
for DPIA, LIA, ROPA, and privacy-notice generation at scale.
|
|
1
|
+
# GDPR & OSINT — governance for the investigate skill
|
|
2
|
+
|
|
3
|
+
This pack performs OSINT on named individuals, including psychoprofiling. That is
|
|
4
|
+
personal-data processing (GDPR + analogous laws such as UK GDPR, LGPD, CCPA/CPRA).
|
|
5
|
+
BMAD+ **keeps** this capability and **governs** it — the Phase −1 lawful-basis gate
|
|
6
|
+
in `SKILL.md` makes lawful use explicit and auditable rather than removing the pack.
|
|
7
|
+
(Decision: keep + govern, 2026-07-02.)
|
|
8
|
+
|
|
9
|
+
## Why this matters
|
|
10
|
+
- Profiling and evaluating personal aspects is regulated (GDPR Art. 4(4), Art. 22, Recital 71).
|
|
11
|
+
- Inferring personality, health, political/religious views, or sexual orientation is
|
|
12
|
+
**special-category** processing (Art. 9) — a higher bar than ordinary personal data.
|
|
13
|
+
- "Publicly available" ≠ "no rules apply." Scraping public profiles is still processing;
|
|
14
|
+
you still need a lawful basis and must respect purpose limitation and data-subject rights.
|
|
15
|
+
|
|
16
|
+
## The gate, in one line
|
|
17
|
+
No lawful basis + specific purpose recorded (`assets/lawful-basis-record.md`) → no
|
|
18
|
+
named-person profiling. Non-personal research (company/product/market, public entities)
|
|
19
|
+
is unaffected.
|
|
20
|
+
|
|
21
|
+
## Legitimate interest (the common basis)
|
|
22
|
+
When relying on Art. 6(1)(f), complete the 3-part LIA in the record:
|
|
23
|
+
1. **Purpose** — a real, specific legitimate interest (due diligence, fraud/security, journalism).
|
|
24
|
+
2. **Necessity** — OSINT is necessary and proportionate; no less-intrusive route.
|
|
25
|
+
3. **Balancing** — the person's rights/freedoms do not override; consider their reasonable
|
|
26
|
+
expectations, the sensitivity of the data, and any special-category inference (which
|
|
27
|
+
usually tips the balance and requires an Art. 9 condition instead).
|
|
28
|
+
|
|
29
|
+
## Special-category / psychoprofile
|
|
30
|
+
Only build the psychoprofile (MBTI/Big Five, etc.) with a valid **Art. 9(2)** condition
|
|
31
|
+
(typically explicit consent, or data manifestly made public by the subject). Otherwise
|
|
32
|
+
keep the factual dossier and skip the personality inference.
|
|
33
|
+
|
|
34
|
+
## Data-subject rights & retention
|
|
35
|
+
- Define a **retention period**; delete when the purpose is met.
|
|
36
|
+
- Provide a **DSAR/erasure** path (access, rectification, erasure, objection).
|
|
37
|
+
- Consider **transparency** (Art. 14) or a documented exemption.
|
|
38
|
+
|
|
39
|
+
## Prohibited / out of scope
|
|
40
|
+
- No profiling without a recorded basis + purpose.
|
|
41
|
+
- No use for unlawful discrimination, harassment, stalking, or unauthorized surveillance.
|
|
42
|
+
- No special-category inference without an Art. 9 condition.
|
|
43
|
+
|
|
44
|
+
## Related BMAD+ assets
|
|
45
|
+
- `SKILL.md` → Phase −1 gate.
|
|
46
|
+
- `assets/lawful-basis-record.md` → gate record + ROPA entry.
|
|
47
|
+
- Shield (GRC) pack → `gdpr-agent`, `legitimate-interest`, `dpia-sentinel`, `privacy-notice-gen`
|
|
48
|
+
for DPIA, LIA, ROPA, and privacy-notice generation at scale.
|