bmad-plus 0.8.0 → 0.9.1
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 +45 -1
- package/LICENSE +21 -21
- package/README.md +107 -85
- package/osint-agent-package/README.md +88 -88
- package/osint-agent-package/SETUP_KEYS.md +108 -108
- package/osint-agent-package/agents/osint-investigator.md +80 -80
- package/osint-agent-package/install.ps1 +87 -87
- package/osint-agent-package/install.sh +76 -76
- package/osint-agent-package/skills/bmad-osint-investigate/SKILL.md +147 -147
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/enrichment-databases-fr.md +148 -148
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/_http.py +101 -101
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/apify.py +266 -266
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/brightdata.py +101 -101
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/diagnose.py +141 -141
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/exa.py +79 -79
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/jina.py +71 -71
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/parallel.py +85 -85
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/perplexity.py +102 -102
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/tavily.py +72 -72
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/volley.py +208 -208
- package/osint-agent-package/skills/bmad-osint-investigator/SKILL.md +15 -15
- package/package.json +30 -3
- package/readme-international/README.de.md +18 -5
- package/readme-international/README.es.md +40 -12
- package/readme-international/README.fr.md +36 -8
- package/src/bmad-plus/agents/agent-architect-dev/SKILL.md +96 -96
- package/src/bmad-plus/agents/agent-architect-dev/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/agents/agent-maker/SKILL.md +201 -201
- package/src/bmad-plus/agents/agent-maker/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +137 -137
- package/src/bmad-plus/agents/agent-orchestrator/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/agents/agent-quality/SKILL.md +83 -83
- package/src/bmad-plus/agents/agent-quality/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/agents/agent-shadow/SKILL.md +71 -71
- package/src/bmad-plus/agents/agent-shadow/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/agents/agent-strategist/SKILL.md +80 -80
- package/src/bmad-plus/agents/agent-strategist/bmad-skill-manifest.yaml +13 -13
- package/src/bmad-plus/data/role-triggers.yaml +209 -209
- package/src/bmad-plus/module-help.csv +10 -10
- package/src/bmad-plus/packs/pack-memory/README.md +106 -106
- package/src/bmad-plus/packs/pack-memory/memory-orchestrator.md +79 -79
- package/src/bmad-plus/packs/pack-memory/shared/karpathy-guardrails.md +86 -86
- package/src/bmad-plus/packs/pack-memory/shared/memory-protocol.md +143 -143
- package/src/bmad-plus/packs/pack-memory/templates/context.md +39 -39
- package/src/bmad-plus/packs/pack-memory/templates/decisions.md +25 -25
- package/src/bmad-plus/packs/pack-memory/templates/identity.yaml +39 -39
- package/src/bmad-plus/packs/pack-memory/templates/lessons.md +31 -31
- package/src/bmad-plus/packs/pack-memory/templates/patterns.md +24 -24
- package/src/bmad-plus/packs/pack-memory/templates/session-handoff.md +25 -25
- package/src/bmad-plus/packs/pack-memory/zecher-agent.md +157 -157
- package/src/bmad-plus/packs/pack-seo/bmad-skill-manifest.yaml +13 -0
- package/src/bmad-plus/packs/pack-shield/README.md +110 -110
- package/src/bmad-plus/packs/pack-shield/SKILL.md +82 -0
- package/src/bmad-plus/packs/pack-shield/categories/accessibility-esg/csrd-agent.md +251 -251
- package/src/bmad-plus/packs/pack-shield/categories/accessibility-esg/section508-agent.md +168 -168
- package/src/bmad-plus/packs/pack-shield/categories/accessibility-esg/wcag-agent.md +190 -190
- package/src/bmad-plus/packs/pack-shield/categories/ai-governance/eu-ai-act-agent.md +86 -86
- package/src/bmad-plus/packs/pack-shield/categories/ai-governance/iso42001-agent.md +240 -240
- package/src/bmad-plus/packs/pack-shield/categories/ai-governance/nist-ai-rmf-agent.md +122 -122
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/cis-controls-agent.md +210 -210
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/ism-agent.md +139 -139
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/iso27001-agent.md +156 -156
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/nis2-agent.md +72 -72
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/nist-800-53-agent.md +239 -239
- package/src/bmad-plus/packs/pack-shield/categories/cybersecurity/nist-csf-agent.md +207 -207
- package/src/bmad-plus/packs/pack-shield/categories/data-privacy/ccpa-agent.md +94 -94
- package/src/bmad-plus/packs/pack-shield/categories/data-privacy/dpdpa-agent.md +136 -136
- package/src/bmad-plus/packs/pack-shield/categories/data-privacy/gdpr-agent.md +296 -296
- package/src/bmad-plus/packs/pack-shield/categories/data-privacy/iso27701-agent.md +134 -134
- package/src/bmad-plus/packs/pack-shield/categories/data-privacy/lgpd-agent.md +129 -129
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/cmmc-agent.md +116 -116
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/ear-agent.md +261 -261
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/itar-agent.md +191 -191
- package/src/bmad-plus/packs/pack-shield/categories/defense-export/tsa-agent.md +356 -356
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/dora-agent.md +499 -499
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/fedramp-agent.md +236 -236
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/hipaa-agent.md +162 -162
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/pci-dss-agent.md +228 -228
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/soc2-agent.md +255 -255
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/swift-csp-agent.md +153 -153
- package/src/bmad-plus/packs/pack-shield/categories/workflows/ai-act-classifier.md +131 -131
- package/src/bmad-plus/packs/pack-shield/categories/workflows/ai-act-fria.md +155 -155
- package/src/bmad-plus/packs/pack-shield/categories/workflows/ai-act-incidents.md +187 -187
- package/src/bmad-plus/packs/pack-shield/categories/workflows/ai-act-roles.md +113 -113
- package/src/bmad-plus/packs/pack-shield/categories/workflows/breach-sentinel.md +197 -197
- package/src/bmad-plus/packs/pack-shield/categories/workflows/cookie-policy-gen.md +180 -180
- package/src/bmad-plus/packs/pack-shield/categories/workflows/dpia-sentinel.md +235 -235
- package/src/bmad-plus/packs/pack-shield/categories/workflows/legitimate-interest.md +159 -159
- package/src/bmad-plus/packs/pack-shield/categories/workflows/privacy-advisor.md +133 -133
- package/src/bmad-plus/packs/pack-shield/categories/workflows/privacy-notice-gen.md +160 -160
- package/src/bmad-plus/packs/pack-shield/categories/workflows/privacy-policy-gen.md +135 -135
- package/src/bmad-plus/packs/pack-shield/references/ccpa/ccpa-gdpr-comparison.md +117 -117
- package/src/bmad-plus/packs/pack-shield/references/ccpa/consumer-rights-workflows.md +177 -177
- package/src/bmad-plus/packs/pack-shield/references/cis-controls/framework-mappings.md +162 -162
- package/src/bmad-plus/packs/pack-shield/references/cis-controls/implementation-guidance.md +235 -235
- package/src/bmad-plus/packs/pack-shield/references/cis-controls/safeguards-detail.md +252 -252
- package/src/bmad-plus/packs/pack-shield/references/cmmc/cmmc-assessment.md +170 -170
- package/src/bmad-plus/packs/pack-shield/references/cmmc/cmmc-levels.md +113 -113
- package/src/bmad-plus/packs/pack-shield/references/cmmc/cmmc-practices.md +211 -211
- package/src/bmad-plus/packs/pack-shield/references/csrd/compliance-program.md +281 -281
- package/src/bmad-plus/packs/pack-shield/references/csrd/double-materiality.md +253 -253
- package/src/bmad-plus/packs/pack-shield/references/csrd/esrs-standards.md +401 -401
- package/src/bmad-plus/packs/pack-shield/references/dora/article-reference.md +441 -441
- package/src/bmad-plus/packs/pack-shield/references/dora/incident-classification.md +297 -297
- package/src/bmad-plus/packs/pack-shield/references/dora/rts-its-guide.md +306 -306
- package/src/bmad-plus/packs/pack-shield/references/dora/third-party-risk.md +349 -349
- package/src/bmad-plus/packs/pack-shield/references/dpdpa/gdpr-comparison.md +173 -173
- package/src/bmad-plus/packs/pack-shield/references/dpdpa/rights-and-obligations.md +426 -426
- package/src/bmad-plus/packs/pack-shield/references/dpdpa/rules-2025.md +599 -599
- package/src/bmad-plus/packs/pack-shield/references/dpdpa/sections-reference.md +319 -319
- package/src/bmad-plus/packs/pack-shield/references/ear/ccl-eccn-guide.md +250 -250
- package/src/bmad-plus/packs/pack-shield/references/ear/compliance-program.md +280 -280
- package/src/bmad-plus/packs/pack-shield/references/ear/license-exceptions.md +207 -207
- package/src/bmad-plus/packs/pack-shield/references/eu-ai-act/gpai-governance.md +267 -267
- package/src/bmad-plus/packs/pack-shield/references/eu-ai-act/obligations-high-risk.md +287 -287
- package/src/bmad-plus/packs/pack-shield/references/eu-ai-act/risk-classification.md +182 -182
- package/src/bmad-plus/packs/pack-shield/references/fedramp/appendices-guide.md +209 -209
- package/src/bmad-plus/packs/pack-shield/references/fedramp/control-families.md +281 -281
- package/src/bmad-plus/packs/pack-shield/references/fedramp/poam-guide.md +93 -93
- package/src/bmad-plus/packs/pack-shield/references/fedramp/readiness-checklist.md +134 -134
- package/src/bmad-plus/packs/pack-shield/references/fedramp/sap-sar-guide.md +86 -86
- package/src/bmad-plus/packs/pack-shield/references/fedramp/ssp-guide.md +129 -129
- package/src/bmad-plus/packs/pack-shield/references/gdpr-compliance/documents.md +192 -192
- package/src/bmad-plus/packs/pack-shield/references/gdpr-compliance/dpa-template.md +121 -121
- package/src/bmad-plus/packs/pack-shield/references/gdpr-compliance/privacy-notice.md +87 -87
- package/src/bmad-plus/packs/pack-shield/references/hipaa-compliance/breach-notification.md +293 -293
- package/src/bmad-plus/packs/pack-shield/references/hipaa-compliance/privacy-rule.md +276 -276
- package/src/bmad-plus/packs/pack-shield/references/hipaa-compliance/security-rule.md +299 -299
- package/src/bmad-plus/packs/pack-shield/references/hipaa-compliance/templates.md +568 -568
- package/src/bmad-plus/packs/pack-shield/references/ism/control-applicability.md +181 -181
- package/src/bmad-plus/packs/pack-shield/references/ism/guidelines-overview.md +183 -183
- package/src/bmad-plus/packs/pack-shield/references/iso27001/annex-a-2013.md +203 -203
- package/src/bmad-plus/packs/pack-shield/references/iso27001/annex-a-2022.md +132 -132
- package/src/bmad-plus/packs/pack-shield/references/iso27001/control-mapping.md +153 -153
- package/src/bmad-plus/packs/pack-shield/references/iso27701/annex-a-controls.md +195 -195
- package/src/bmad-plus/packs/pack-shield/references/iso27701/regulatory-mapping.md +229 -229
- package/src/bmad-plus/packs/pack-shield/references/iso27701/transition-guide.md +219 -219
- package/src/bmad-plus/packs/pack-shield/references/iso42001/iso42001-ai-risk-assessment.md +258 -258
- package/src/bmad-plus/packs/pack-shield/references/iso42001/iso42001-clauses-requirements.md +279 -279
- package/src/bmad-plus/packs/pack-shield/references/iso42001/iso42001-controls-annex-a.md +155 -155
- package/src/bmad-plus/packs/pack-shield/references/itar/compliance-program.md +174 -174
- package/src/bmad-plus/packs/pack-shield/references/itar/licensing-guide.md +146 -146
- package/src/bmad-plus/packs/pack-shield/references/itar/usml-categories.md +93 -93
- package/src/bmad-plus/packs/pack-shield/references/lgpd/anpd-enforcement.md +147 -147
- package/src/bmad-plus/packs/pack-shield/references/lgpd/compliance-program.md +272 -272
- package/src/bmad-plus/packs/pack-shield/references/lgpd/lgpd-articles.md +271 -271
- package/src/bmad-plus/packs/pack-shield/references/nis2/article-21-measures.md +153 -153
- package/src/bmad-plus/packs/pack-shield/references/nis2/iso27001-nis2-mapping.md +68 -68
- package/src/bmad-plus/packs/pack-shield/references/nist-800-53/assessment-rmf.md +349 -349
- package/src/bmad-plus/packs/pack-shield/references/nist-800-53/baselines-tailoring.md +277 -277
- package/src/bmad-plus/packs/pack-shield/references/nist-800-53/control-families.md +450 -450
- package/src/bmad-plus/packs/pack-shield/references/nist-ai-rmf/rmf-core.md +361 -361
- package/src/bmad-plus/packs/pack-shield/references/nist-ai-rmf/rmf-profiles.md +192 -192
- package/src/bmad-plus/packs/pack-shield/references/nist-csf/csf-10-to-20-mapping.md +143 -143
- package/src/bmad-plus/packs/pack-shield/references/nist-csf/csf-20-functions-categories.md +278 -278
- package/src/bmad-plus/packs/pack-shield/references/nist-csf/csf-implementation-tiers.md +135 -135
- package/src/bmad-plus/packs/pack-shield/references/pci-compliance/pci-dss-requirements.md +366 -366
- package/src/bmad-plus/packs/pack-shield/references/pci-compliance/pci-dss-saq-guide.md +217 -217
- package/src/bmad-plus/packs/pack-shield/references/pci-compliance/pci-dss-v4-changes.md +190 -190
- package/src/bmad-plus/packs/pack-shield/references/section-508/wcag-mapping.md +160 -160
- package/src/bmad-plus/packs/pack-shield/references/soc2/controls.md +241 -241
- package/src/bmad-plus/packs/pack-shield/references/soc2/evidence.md +236 -236
- package/src/bmad-plus/packs/pack-shield/references/soc2/policies.md +254 -254
- package/src/bmad-plus/packs/pack-shield/references/soc2/vendor.md +276 -276
- package/src/bmad-plus/packs/pack-shield/references/swift-csp/swift-assessment.md +202 -202
- package/src/bmad-plus/packs/pack-shield/references/swift-csp/swift-controls.md +545 -545
- package/src/bmad-plus/packs/pack-shield/references/tsa-compliance/tsa-crmp-requirements.md +359 -359
- package/src/bmad-plus/packs/pack-shield/references/tsa-compliance/tsa-directives-overview.md +187 -187
- package/src/bmad-plus/packs/pack-shield/references/tsa-compliance/tsa-incident-reporting.md +187 -187
- package/src/bmad-plus/packs/pack-shield/references/wcag/criteria-detail.md +510 -510
- package/src/bmad-plus/packs/pack-shield/shared/audit-report-template.md +103 -103
- package/src/bmad-plus/packs/pack-shield/shared/cross-framework-mapper.md +103 -103
- package/src/bmad-plus/packs/pack-shield/shared/gap-analysis-template.md +83 -83
- package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +229 -229
- package/src/bmad-plus/packs/pack-shield/upstream-sync.yaml +68 -68
- package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +99 -99
- package/src/bmad-plus/skills/bmad-plus-parallel/SKILL.md +93 -93
- package/src/bmad-plus/skills/bmad-plus-sync/SKILL.md +69 -69
- package/tools/bmad-plus-npx.js +3 -5
- package/tools/cli/bmad-plus-cli.js +5 -3
- package/tools/cli/commands/autoconfig.js +18 -61
- package/tools/cli/commands/doctor.js +30 -31
- package/tools/cli/commands/install.js +33 -343
- package/tools/cli/commands/memory.js +1 -0
- package/tools/cli/commands/scan.js +61 -74
- package/tools/cli/commands/uninstall.js +7 -4
- package/tools/cli/commands/update.js +15 -72
- package/tools/cli/i18n.js +92 -10
- package/tools/cli/lib/ide-config.js +259 -0
- package/tools/cli/lib/memory-init.js +113 -0
- package/tools/cli/lib/pack-copy.js +84 -0
- package/tools/cli/lib/packs.js +114 -0
- package/tools/cli/lib/stack-detect.js +102 -0
- package/tools/cli/lib/validate.js +45 -0
- package/src/bmad-plus/agents/pack-animated/animated-website-agent.md +0 -325
- package/src/bmad-plus/agents/pack-animated/templates/animated-website-workflow.md +0 -55
- package/src/bmad-plus/agents/pack-backup/backup-agent.md +0 -71
- package/src/bmad-plus/agents/pack-backup/templates/backup-workflow.md +0 -51
- package/src/bmad-plus/agents/pack-seo/SKILL.md +0 -171
- package/src/bmad-plus/agents/pack-seo/checklist.md +0 -140
- package/src/bmad-plus/agents/pack-seo/pagespeed-playbook.md +0 -320
- package/src/bmad-plus/agents/pack-seo/ref/audit-schema.json +0 -187
- package/src/bmad-plus/agents/pack-seo/ref/cwv-thresholds.md +0 -87
- package/src/bmad-plus/agents/pack-seo/ref/eeat-criteria.md +0 -123
- package/src/bmad-plus/agents/pack-seo/ref/geo-signals.md +0 -167
- package/src/bmad-plus/agents/pack-seo/ref/hreflang-rules.md +0 -153
- package/src/bmad-plus/agents/pack-seo/ref/quality-gates.md +0 -133
- package/src/bmad-plus/agents/pack-seo/ref/schema-catalog.md +0 -91
- package/src/bmad-plus/agents/pack-seo/ref/schema-templates.json +0 -356
- package/src/bmad-plus/agents/pack-seo/seo-chief.md +0 -294
- package/src/bmad-plus/agents/pack-seo/seo-judge.md +0 -241
- package/src/bmad-plus/agents/pack-seo/seo-scout.md +0 -171
- package/src/bmad-plus/agents/pack-seo/templates/seo-audit-workflow.md +0 -241
|
@@ -1,208 +1,208 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""OSINT First Volley + Merge — parallel search across all engines, then deduplicate.
|
|
3
|
-
|
|
4
|
-
Replaces: first-volley.sh + merge-volley.sh
|
|
5
|
-
Uses concurrent.futures for parallel execution (stdlib).
|
|
6
|
-
|
|
7
|
-
Usage:
|
|
8
|
-
python volley.py search "Full Name" ["context keywords"]
|
|
9
|
-
python volley.py merge /tmp/osint-<timestamp>
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
import concurrent.futures
|
|
13
|
-
import json
|
|
14
|
-
import os
|
|
15
|
-
import re
|
|
16
|
-
import subprocess
|
|
17
|
-
import sys
|
|
18
|
-
import time
|
|
19
|
-
|
|
20
|
-
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
21
|
-
from _http import get_workspace
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def run_script(scripts_dir, script_name, cmd, query, output_file):
|
|
25
|
-
"""Run a Python OSINT script and save output to file."""
|
|
26
|
-
script_path = os.path.join(scripts_dir, script_name)
|
|
27
|
-
if not os.path.isfile(script_path):
|
|
28
|
-
return
|
|
29
|
-
try:
|
|
30
|
-
result = subprocess.run(
|
|
31
|
-
[sys.executable, script_path, cmd, query],
|
|
32
|
-
capture_output=True, text=True, timeout=60,
|
|
33
|
-
env=os.environ.copy()
|
|
34
|
-
)
|
|
35
|
-
with open(output_file, "w", encoding="utf-8") as f:
|
|
36
|
-
f.write(result.stdout or "")
|
|
37
|
-
if result.stderr:
|
|
38
|
-
print(f" ⚠️ {script_name}: {result.stderr[:200]}", file=sys.stderr)
|
|
39
|
-
except subprocess.TimeoutExpired:
|
|
40
|
-
print(f" ⏱️ {script_name}: timeout", file=sys.stderr)
|
|
41
|
-
except Exception as e:
|
|
42
|
-
print(f" ❌ {script_name}: {e}", file=sys.stderr)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def first_volley(name, context=""):
|
|
46
|
-
"""Launch parallel searches across all available engines."""
|
|
47
|
-
workspace, skill_dir, scripts_dir = get_workspace()
|
|
48
|
-
query = f"{name} {context}".strip()
|
|
49
|
-
timestamp = int(time.time())
|
|
50
|
-
outdir = os.path.join(os.environ.get("TEMP", "/tmp"), f"osint-{timestamp}")
|
|
51
|
-
os.makedirs(outdir, exist_ok=True)
|
|
52
|
-
|
|
53
|
-
print(f"🔍 First Volley: {query}")
|
|
54
|
-
print(f" Output: {outdir}")
|
|
55
|
-
print()
|
|
56
|
-
|
|
57
|
-
# Build list of searches to run
|
|
58
|
-
searches = []
|
|
59
|
-
|
|
60
|
-
# Jina — general + social
|
|
61
|
-
if os.environ.get("JINA_API_KEY") or os.path.isfile(
|
|
62
|
-
os.path.join(workspace, "scripts", "jina-api-key.txt")):
|
|
63
|
-
searches.append(("jina.py", "search", query,
|
|
64
|
-
os.path.join(outdir, "jina-general.json")))
|
|
65
|
-
searches.append(("jina.py", "search",
|
|
66
|
-
f"{name} instagram linkedin facebook telegram",
|
|
67
|
-
os.path.join(outdir, "jina-social.json")))
|
|
68
|
-
|
|
69
|
-
# Parallel — general + social
|
|
70
|
-
if os.environ.get("PARALLEL_API_KEY") or os.path.isfile(
|
|
71
|
-
os.path.join(workspace, "scripts", "parallel-api-key.txt")):
|
|
72
|
-
searches.append(("parallel.py", "search", query,
|
|
73
|
-
os.path.join(outdir, "parallel-general.json")))
|
|
74
|
-
searches.append(("parallel.py", "search",
|
|
75
|
-
f"{name} instagram linkedin telegram facebook profile",
|
|
76
|
-
os.path.join(outdir, "parallel-social.json")))
|
|
77
|
-
|
|
78
|
-
# Tavily
|
|
79
|
-
if os.environ.get("TAVILY_API_KEY"):
|
|
80
|
-
searches.append(("tavily.py", "search", query,
|
|
81
|
-
os.path.join(outdir, "tavily-general.json")))
|
|
82
|
-
|
|
83
|
-
# Exa
|
|
84
|
-
if os.environ.get("EXA_API_KEY"):
|
|
85
|
-
searches.append(("exa.py", "people", name,
|
|
86
|
-
os.path.join(outdir, "exa-people.json")))
|
|
87
|
-
|
|
88
|
-
# Perplexity
|
|
89
|
-
if os.environ.get("PERPLEXITY_API_KEY"):
|
|
90
|
-
searches.append(("perplexity.py", "sonar", query,
|
|
91
|
-
os.path.join(outdir, "perplexity-sonar.json")))
|
|
92
|
-
|
|
93
|
-
if not searches:
|
|
94
|
-
print("❌ No API keys found. Set at least one search API key.")
|
|
95
|
-
print(" Run: python diagnose.py")
|
|
96
|
-
sys.exit(1)
|
|
97
|
-
|
|
98
|
-
print(f"Launching {len(searches)} parallel searches...")
|
|
99
|
-
|
|
100
|
-
# Execute in parallel
|
|
101
|
-
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
|
|
102
|
-
futures = []
|
|
103
|
-
for script, cmd, q, outfile in searches:
|
|
104
|
-
print(f" → {script} {cmd}")
|
|
105
|
-
futures.append(executor.submit(run_script, scripts_dir, script, cmd, q, outfile))
|
|
106
|
-
concurrent.futures.wait(futures, timeout=90)
|
|
107
|
-
|
|
108
|
-
print()
|
|
109
|
-
print(f"✅ All searches complete. Results in {outdir}")
|
|
110
|
-
|
|
111
|
-
# List result files
|
|
112
|
-
for f in os.listdir(outdir):
|
|
113
|
-
fpath = os.path.join(outdir, f)
|
|
114
|
-
size = os.path.getsize(fpath)
|
|
115
|
-
print(f" {f} ({size:,} bytes)")
|
|
116
|
-
print()
|
|
117
|
-
print(f"Run: python volley.py merge {outdir}")
|
|
118
|
-
return outdir
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
def merge_volley(outdir):
|
|
122
|
-
"""Merge and deduplicate first-volley results."""
|
|
123
|
-
if not os.path.isdir(outdir):
|
|
124
|
-
print(f"Error: {outdir} not found")
|
|
125
|
-
sys.exit(1)
|
|
126
|
-
|
|
127
|
-
print(f"=== MERGE: {outdir} ===")
|
|
128
|
-
print()
|
|
129
|
-
|
|
130
|
-
# Extract all URLs from result files
|
|
131
|
-
all_urls = set()
|
|
132
|
-
for fname in os.listdir(outdir):
|
|
133
|
-
fpath = os.path.join(outdir, fname)
|
|
134
|
-
if not os.path.isfile(fpath):
|
|
135
|
-
continue
|
|
136
|
-
try:
|
|
137
|
-
with open(fpath, "r", encoding="utf-8") as f:
|
|
138
|
-
content = f.read()
|
|
139
|
-
urls = re.findall(r'https?://[^\s"\'<>]+', content)
|
|
140
|
-
all_urls.update(urls)
|
|
141
|
-
except Exception:
|
|
142
|
-
continue
|
|
143
|
-
|
|
144
|
-
if not all_urls:
|
|
145
|
-
print("⚠️ No URLs found in results.")
|
|
146
|
-
sys.exit(0)
|
|
147
|
-
|
|
148
|
-
print(f"📊 Total unique URLs: {len(all_urls)}")
|
|
149
|
-
print()
|
|
150
|
-
|
|
151
|
-
# Group by platform
|
|
152
|
-
platforms = {
|
|
153
|
-
"🔗 LinkedIn": lambda u: "linkedin.com" in u.lower(),
|
|
154
|
-
"📸 Instagram": lambda u: "instagram.com" in u.lower(),
|
|
155
|
-
"📘 Facebook": lambda u: "facebook.com" in u.lower(),
|
|
156
|
-
"✈️ Telegram": lambda u: "t.me" in u.lower(),
|
|
157
|
-
"🐦 Twitter/X": lambda u: "twitter.com" in u.lower() or "x.com" in u.lower(),
|
|
158
|
-
"📺 VK": lambda u: "vk.com" in u.lower(),
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
categorized = set()
|
|
162
|
-
for label, matcher in platforms.items():
|
|
163
|
-
matches = [u for u in all_urls if matcher(u)]
|
|
164
|
-
print(f"{label}:")
|
|
165
|
-
if matches:
|
|
166
|
-
for u in list(matches)[:10]:
|
|
167
|
-
print(f" {u}")
|
|
168
|
-
categorized.update(matches)
|
|
169
|
-
else:
|
|
170
|
-
print(" (none)")
|
|
171
|
-
print()
|
|
172
|
-
|
|
173
|
-
# Other
|
|
174
|
-
other = [u for u in all_urls if u not in categorized]
|
|
175
|
-
print("📰 Media/Other:")
|
|
176
|
-
for u in other[:20]:
|
|
177
|
-
print(f" {u}")
|
|
178
|
-
print()
|
|
179
|
-
|
|
180
|
-
# Save merged
|
|
181
|
-
merged_file = os.path.join(outdir, "merged-urls.txt")
|
|
182
|
-
with open(merged_file, "w", encoding="utf-8") as f:
|
|
183
|
-
f.write("\n".join(sorted(all_urls)))
|
|
184
|
-
print(f"✅ Saved to {merged_file}")
|
|
185
|
-
print("=== END MERGE ===")
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
def main():
|
|
189
|
-
if len(sys.argv) < 3:
|
|
190
|
-
print("Usage:")
|
|
191
|
-
print(' python volley.py search "Full Name" ["context"]')
|
|
192
|
-
print(" python volley.py merge /tmp/osint-<timestamp>")
|
|
193
|
-
sys.exit(1)
|
|
194
|
-
|
|
195
|
-
cmd = sys.argv[1]
|
|
196
|
-
if cmd == "search":
|
|
197
|
-
name = sys.argv[2]
|
|
198
|
-
context = sys.argv[3] if len(sys.argv) > 3 else ""
|
|
199
|
-
first_volley(name, context)
|
|
200
|
-
elif cmd == "merge":
|
|
201
|
-
merge_volley(sys.argv[2])
|
|
202
|
-
else:
|
|
203
|
-
print(f"Unknown: {cmd} (use search|merge)", file=sys.stderr)
|
|
204
|
-
sys.exit(1)
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
if __name__ == "__main__":
|
|
208
|
-
main()
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""OSINT First Volley + Merge — parallel search across all engines, then deduplicate.
|
|
3
|
+
|
|
4
|
+
Replaces: first-volley.sh + merge-volley.sh
|
|
5
|
+
Uses concurrent.futures for parallel execution (stdlib).
|
|
6
|
+
|
|
7
|
+
Usage:
|
|
8
|
+
python volley.py search "Full Name" ["context keywords"]
|
|
9
|
+
python volley.py merge /tmp/osint-<timestamp>
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import concurrent.futures
|
|
13
|
+
import json
|
|
14
|
+
import os
|
|
15
|
+
import re
|
|
16
|
+
import subprocess
|
|
17
|
+
import sys
|
|
18
|
+
import time
|
|
19
|
+
|
|
20
|
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
21
|
+
from _http import get_workspace
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def run_script(scripts_dir, script_name, cmd, query, output_file):
|
|
25
|
+
"""Run a Python OSINT script and save output to file."""
|
|
26
|
+
script_path = os.path.join(scripts_dir, script_name)
|
|
27
|
+
if not os.path.isfile(script_path):
|
|
28
|
+
return
|
|
29
|
+
try:
|
|
30
|
+
result = subprocess.run(
|
|
31
|
+
[sys.executable, script_path, cmd, query],
|
|
32
|
+
capture_output=True, text=True, timeout=60,
|
|
33
|
+
env=os.environ.copy()
|
|
34
|
+
)
|
|
35
|
+
with open(output_file, "w", encoding="utf-8") as f:
|
|
36
|
+
f.write(result.stdout or "")
|
|
37
|
+
if result.stderr:
|
|
38
|
+
print(f" ⚠️ {script_name}: {result.stderr[:200]}", file=sys.stderr)
|
|
39
|
+
except subprocess.TimeoutExpired:
|
|
40
|
+
print(f" ⏱️ {script_name}: timeout", file=sys.stderr)
|
|
41
|
+
except Exception as e:
|
|
42
|
+
print(f" ❌ {script_name}: {e}", file=sys.stderr)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def first_volley(name, context=""):
|
|
46
|
+
"""Launch parallel searches across all available engines."""
|
|
47
|
+
workspace, skill_dir, scripts_dir = get_workspace()
|
|
48
|
+
query = f"{name} {context}".strip()
|
|
49
|
+
timestamp = int(time.time())
|
|
50
|
+
outdir = os.path.join(os.environ.get("TEMP", "/tmp"), f"osint-{timestamp}")
|
|
51
|
+
os.makedirs(outdir, exist_ok=True)
|
|
52
|
+
|
|
53
|
+
print(f"🔍 First Volley: {query}")
|
|
54
|
+
print(f" Output: {outdir}")
|
|
55
|
+
print()
|
|
56
|
+
|
|
57
|
+
# Build list of searches to run
|
|
58
|
+
searches = []
|
|
59
|
+
|
|
60
|
+
# Jina — general + social
|
|
61
|
+
if os.environ.get("JINA_API_KEY") or os.path.isfile(
|
|
62
|
+
os.path.join(workspace, "scripts", "jina-api-key.txt")):
|
|
63
|
+
searches.append(("jina.py", "search", query,
|
|
64
|
+
os.path.join(outdir, "jina-general.json")))
|
|
65
|
+
searches.append(("jina.py", "search",
|
|
66
|
+
f"{name} instagram linkedin facebook telegram",
|
|
67
|
+
os.path.join(outdir, "jina-social.json")))
|
|
68
|
+
|
|
69
|
+
# Parallel — general + social
|
|
70
|
+
if os.environ.get("PARALLEL_API_KEY") or os.path.isfile(
|
|
71
|
+
os.path.join(workspace, "scripts", "parallel-api-key.txt")):
|
|
72
|
+
searches.append(("parallel.py", "search", query,
|
|
73
|
+
os.path.join(outdir, "parallel-general.json")))
|
|
74
|
+
searches.append(("parallel.py", "search",
|
|
75
|
+
f"{name} instagram linkedin telegram facebook profile",
|
|
76
|
+
os.path.join(outdir, "parallel-social.json")))
|
|
77
|
+
|
|
78
|
+
# Tavily
|
|
79
|
+
if os.environ.get("TAVILY_API_KEY"):
|
|
80
|
+
searches.append(("tavily.py", "search", query,
|
|
81
|
+
os.path.join(outdir, "tavily-general.json")))
|
|
82
|
+
|
|
83
|
+
# Exa
|
|
84
|
+
if os.environ.get("EXA_API_KEY"):
|
|
85
|
+
searches.append(("exa.py", "people", name,
|
|
86
|
+
os.path.join(outdir, "exa-people.json")))
|
|
87
|
+
|
|
88
|
+
# Perplexity
|
|
89
|
+
if os.environ.get("PERPLEXITY_API_KEY"):
|
|
90
|
+
searches.append(("perplexity.py", "sonar", query,
|
|
91
|
+
os.path.join(outdir, "perplexity-sonar.json")))
|
|
92
|
+
|
|
93
|
+
if not searches:
|
|
94
|
+
print("❌ No API keys found. Set at least one search API key.")
|
|
95
|
+
print(" Run: python diagnose.py")
|
|
96
|
+
sys.exit(1)
|
|
97
|
+
|
|
98
|
+
print(f"Launching {len(searches)} parallel searches...")
|
|
99
|
+
|
|
100
|
+
# Execute in parallel
|
|
101
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
|
|
102
|
+
futures = []
|
|
103
|
+
for script, cmd, q, outfile in searches:
|
|
104
|
+
print(f" → {script} {cmd}")
|
|
105
|
+
futures.append(executor.submit(run_script, scripts_dir, script, cmd, q, outfile))
|
|
106
|
+
concurrent.futures.wait(futures, timeout=90)
|
|
107
|
+
|
|
108
|
+
print()
|
|
109
|
+
print(f"✅ All searches complete. Results in {outdir}")
|
|
110
|
+
|
|
111
|
+
# List result files
|
|
112
|
+
for f in os.listdir(outdir):
|
|
113
|
+
fpath = os.path.join(outdir, f)
|
|
114
|
+
size = os.path.getsize(fpath)
|
|
115
|
+
print(f" {f} ({size:,} bytes)")
|
|
116
|
+
print()
|
|
117
|
+
print(f"Run: python volley.py merge {outdir}")
|
|
118
|
+
return outdir
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def merge_volley(outdir):
|
|
122
|
+
"""Merge and deduplicate first-volley results."""
|
|
123
|
+
if not os.path.isdir(outdir):
|
|
124
|
+
print(f"Error: {outdir} not found")
|
|
125
|
+
sys.exit(1)
|
|
126
|
+
|
|
127
|
+
print(f"=== MERGE: {outdir} ===")
|
|
128
|
+
print()
|
|
129
|
+
|
|
130
|
+
# Extract all URLs from result files
|
|
131
|
+
all_urls = set()
|
|
132
|
+
for fname in os.listdir(outdir):
|
|
133
|
+
fpath = os.path.join(outdir, fname)
|
|
134
|
+
if not os.path.isfile(fpath):
|
|
135
|
+
continue
|
|
136
|
+
try:
|
|
137
|
+
with open(fpath, "r", encoding="utf-8") as f:
|
|
138
|
+
content = f.read()
|
|
139
|
+
urls = re.findall(r'https?://[^\s"\'<>]+', content)
|
|
140
|
+
all_urls.update(urls)
|
|
141
|
+
except Exception:
|
|
142
|
+
continue
|
|
143
|
+
|
|
144
|
+
if not all_urls:
|
|
145
|
+
print("⚠️ No URLs found in results.")
|
|
146
|
+
sys.exit(0)
|
|
147
|
+
|
|
148
|
+
print(f"📊 Total unique URLs: {len(all_urls)}")
|
|
149
|
+
print()
|
|
150
|
+
|
|
151
|
+
# Group by platform
|
|
152
|
+
platforms = {
|
|
153
|
+
"🔗 LinkedIn": lambda u: "linkedin.com" in u.lower(),
|
|
154
|
+
"📸 Instagram": lambda u: "instagram.com" in u.lower(),
|
|
155
|
+
"📘 Facebook": lambda u: "facebook.com" in u.lower(),
|
|
156
|
+
"✈️ Telegram": lambda u: "t.me" in u.lower(),
|
|
157
|
+
"🐦 Twitter/X": lambda u: "twitter.com" in u.lower() or "x.com" in u.lower(),
|
|
158
|
+
"📺 VK": lambda u: "vk.com" in u.lower(),
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
categorized = set()
|
|
162
|
+
for label, matcher in platforms.items():
|
|
163
|
+
matches = [u for u in all_urls if matcher(u)]
|
|
164
|
+
print(f"{label}:")
|
|
165
|
+
if matches:
|
|
166
|
+
for u in list(matches)[:10]:
|
|
167
|
+
print(f" {u}")
|
|
168
|
+
categorized.update(matches)
|
|
169
|
+
else:
|
|
170
|
+
print(" (none)")
|
|
171
|
+
print()
|
|
172
|
+
|
|
173
|
+
# Other
|
|
174
|
+
other = [u for u in all_urls if u not in categorized]
|
|
175
|
+
print("📰 Media/Other:")
|
|
176
|
+
for u in other[:20]:
|
|
177
|
+
print(f" {u}")
|
|
178
|
+
print()
|
|
179
|
+
|
|
180
|
+
# Save merged
|
|
181
|
+
merged_file = os.path.join(outdir, "merged-urls.txt")
|
|
182
|
+
with open(merged_file, "w", encoding="utf-8") as f:
|
|
183
|
+
f.write("\n".join(sorted(all_urls)))
|
|
184
|
+
print(f"✅ Saved to {merged_file}")
|
|
185
|
+
print("=== END MERGE ===")
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def main():
|
|
189
|
+
if len(sys.argv) < 3:
|
|
190
|
+
print("Usage:")
|
|
191
|
+
print(' python volley.py search "Full Name" ["context"]')
|
|
192
|
+
print(" python volley.py merge /tmp/osint-<timestamp>")
|
|
193
|
+
sys.exit(1)
|
|
194
|
+
|
|
195
|
+
cmd = sys.argv[1]
|
|
196
|
+
if cmd == "search":
|
|
197
|
+
name = sys.argv[2]
|
|
198
|
+
context = sys.argv[3] if len(sys.argv) > 3 else ""
|
|
199
|
+
first_volley(name, context)
|
|
200
|
+
elif cmd == "merge":
|
|
201
|
+
merge_volley(sys.argv[2])
|
|
202
|
+
else:
|
|
203
|
+
print(f"Unknown: {cmd} (use search|merge)", file=sys.stderr)
|
|
204
|
+
sys.exit(1)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
if __name__ == "__main__":
|
|
208
|
+
main()
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: bmad-osint-investigator
|
|
3
|
-
description: "OSINT Intelligence Analyst agent — systematic intelligence gathering on individuals. From a name or handle to a scored dossier with psychoprofile, career map, and confidence grades. 55+ Apify actors, 7 search APIs."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
7
|
-
|
|
8
|
-
<agent-activation CRITICAL="TRUE">
|
|
9
|
-
1. LOAD the FULL agent file from {project-root}/_bmad/bmm/agents/osint-investigator.md
|
|
10
|
-
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
|
-
3. FOLLOW every step in the <activation> section precisely
|
|
12
|
-
4. DISPLAY the welcome/greeting as instructed
|
|
13
|
-
5. PRESENT the numbered menu
|
|
14
|
-
6. WAIT for user input before proceeding
|
|
15
|
-
</agent-activation>
|
|
1
|
+
---
|
|
2
|
+
name: bmad-osint-investigator
|
|
3
|
+
description: "OSINT Intelligence Analyst agent — systematic intelligence gathering on individuals. From a name or handle to a scored dossier with psychoprofile, career map, and confidence grades. 55+ Apify actors, 7 search APIs."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
7
|
+
|
|
8
|
+
<agent-activation CRITICAL="TRUE">
|
|
9
|
+
1. LOAD the FULL agent file from {project-root}/_bmad/bmm/agents/osint-investigator.md
|
|
10
|
+
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
|
+
3. FOLLOW every step in the <activation> section precisely
|
|
12
|
+
4. DISPLAY the welcome/greeting as instructed
|
|
13
|
+
5. PRESENT the numbered menu
|
|
14
|
+
6. WAIT for user input before proceeding
|
|
15
|
+
</agent-activation>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "bmad-plus",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.9.1",
|
|
5
5
|
"description": "BMAD+ — Augmented AI-Driven Development Framework with multi-role agents, autopilot, and parallel execution",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"bmad",
|
|
@@ -34,7 +34,11 @@
|
|
|
34
34
|
"install:bmad": "node tools/cli/bmad-plus-cli.js install",
|
|
35
35
|
"update:bmad": "node tools/cli/bmad-plus-cli.js update",
|
|
36
36
|
"doctor:bmad": "node tools/cli/bmad-plus-cli.js doctor",
|
|
37
|
-
"
|
|
37
|
+
"lint": "eslint tools/ tests/",
|
|
38
|
+
"format": "prettier --write \"tools/**/*.js\" \"tests/**/*.js\"",
|
|
39
|
+
"format:check": "prettier --check \"tools/**/*.js\" \"tests/**/*.js\"",
|
|
40
|
+
"test": "jest --coverage",
|
|
41
|
+
"prepare": "husky || true",
|
|
38
42
|
"uninstall:bmad": "node tools/cli/bmad-plus-cli.js uninstall"
|
|
39
43
|
},
|
|
40
44
|
"dependencies": {
|
|
@@ -56,7 +60,30 @@
|
|
|
56
60
|
"publishConfig": {
|
|
57
61
|
"access": "public"
|
|
58
62
|
},
|
|
63
|
+
"jest": {
|
|
64
|
+
"collectCoverage": true,
|
|
65
|
+
"coverageDirectory": "coverage",
|
|
66
|
+
"moduleNameMapper": {
|
|
67
|
+
"^@clack/prompts$": "<rootDir>/tests/__mocks__/clack-prompts.js"
|
|
68
|
+
},
|
|
69
|
+
"coverageThreshold": {
|
|
70
|
+
"global": {
|
|
71
|
+
"branches": 35,
|
|
72
|
+
"functions": 40,
|
|
73
|
+
"lines": 40,
|
|
74
|
+
"statements": 40
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"coverageReporters": [
|
|
78
|
+
"text",
|
|
79
|
+
"lcov"
|
|
80
|
+
],
|
|
81
|
+
"testEnvironment": "node"
|
|
82
|
+
},
|
|
59
83
|
"devDependencies": {
|
|
60
|
-
"
|
|
84
|
+
"eslint": "^9.0.0",
|
|
85
|
+
"husky": "^9.0.0",
|
|
86
|
+
"jest": "^30.4.2",
|
|
87
|
+
"prettier": "^3.4.0"
|
|
61
88
|
}
|
|
62
89
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 🚀 BMAD+ — Erweitertes Multi-Agent KI-Framework
|
|
2
2
|
|
|
3
|
-
[](../CHANGELOG.md)
|
|
4
4
|
[](https://github.com/bmad-code-org/BMAD-METHOD)
|
|
5
5
|
[](../LICENSE)
|
|
6
6
|
|
|
@@ -214,7 +214,7 @@ graph TB
|
|
|
214
214
|
MK["Maker 🧬"]
|
|
215
215
|
ZC["Zecher 🧠 Memory"]
|
|
216
216
|
SD["Shield 🛡️ GRC 38 agents"]
|
|
217
|
-
DS["Dev Studio 🏗️ SDLC
|
|
217
|
+
DS["Dev Studio 🏗️ SDLC 6 agents"]
|
|
218
218
|
SEO["SEO Engine 🔎 3 agents"]
|
|
219
219
|
BK["Backup 🗂️"]
|
|
220
220
|
AN["Animated 🎬"]
|
|
@@ -356,7 +356,12 @@ npx bmad-plus install
|
|
|
356
356
|
|
|
357
357
|
🔍 OSINT — Shadow (Untersuchung, Scraping, Psychoprofil)
|
|
358
358
|
🧬 Agent Creator — Maker (Design, Build, Package)
|
|
359
|
-
🛡️
|
|
359
|
+
🛡️ Shield GRC — 38 Compliance-Agenten (DSGVO, ISO 27001, SOC 2, HIPAA...)
|
|
360
|
+
🏗️ Dev Studio — 6 SDLC-Agenten (voller Lebenszyklus: Design bis Bereitstellung)
|
|
361
|
+
🔎 SEO — Scout, Chief, Judge (6-Phasen-Audit, PageSpeed)
|
|
362
|
+
🧠 Memory — Zecher (persistentes Gehirn, Session-Handoffs)
|
|
363
|
+
🗂️ Backup — Intelligentes Archiv mit Versionierung
|
|
364
|
+
🎬 Animated — Scroll-driven animierte Websites
|
|
360
365
|
🤖 Alles installieren
|
|
361
366
|
Keine — Nur Core
|
|
362
367
|
```
|
|
@@ -542,8 +547,16 @@ BMAD+/
|
|
|
542
547
|
| Version | Datum | Beschreibung |
|
|
543
548
|
|---------|------|-------------|
|
|
544
549
|
| **0.1.0** | 2026-03-17 | 🎉 Foundation — 6 Agenten (Atlas, Forge, Sentinel, Nexus, Shadow, Maker), 3 Skills, Pack-System, Monitoring, IDE Support |
|
|
545
|
-
| **0.
|
|
546
|
-
| **0.
|
|
550
|
+
| **0.2.0** | 2026-03-18 | 🔀 Oveanet Fusion — 3 neue Hilfspakete: SEO Audit 360, Universal Backup, Animated Website |
|
|
551
|
+
| **0.3.0** | 2026-03-19 | 🚀 SEO Engine v2.0 — 3 Multi-Rolle-Agenten, 4 Python-Skripte, 6-Phasen-Workflow, PageSpeed-Schleife, GEO-Analyse |
|
|
552
|
+
| **0.4.0** | 2026-03-19 | 🏢 SEO Engine v2.1 — SKILL.md-Orchestrator, Google APIs, HTML-Berichte, Wettbewerbsvergleich, 50 Tests, GSC + GA4-Erweiterungen |
|
|
553
|
+
| **0.4.1** | 2026-03-19 | 🌐 10-Sprachen CLI, CI/CD-Pipeline, `.npmignore`, Sicherheitshärtung |
|
|
554
|
+
| **0.4.2** | 2026-03-19 | 📦 Öffentliche Packs — SEO/Backup/Animated in npm |
|
|
555
|
+
| **0.4.3** | 2026-05-17 | 🔧 update + doctor Befehle, i18n komplett, Credits-Korrektur |
|
|
556
|
+
| **0.4.4** | 2026-05-17 | 🔧 UTF-8-Kodierungsfix, vollständige i18n 10 Sprachen, 62 Unit-Tests |
|
|
557
|
+
| **0.5.0** | 2026-05-17 | 🛡️ **Pack Shield** — 38 GRC-Compliance-Agenten, 7 Kategorien, 25+ Frameworks (DSGVO, ISO 27001, SOC 2, EU AI Act...) |
|
|
558
|
+
| **0.6.0** | 2026-05-17 | 🏗️ **Pack Dev Studio** — 6 SDLC-Agenten (Miriam, Yosef, Bezalel...) + 30 SDLC-Workflows, BWML DSL |
|
|
559
|
+
| **0.9.0** | 2026-06-24 | 🚀 **Erweitert & Sicher** — 3 neue Packs (animated, backup, seo), P0 Sicherheitsbehebung, 143/143 Tests |
|
|
547
560
|
| **0.8.0** | 2026-06-24 | 🚀 **Erweitert & Sicher** — 3 neue Packs (animated, backup, seo), P0 Sicherheitsbehebung, 143/143 Tests |
|
|
548
561
|
|
|
549
562
|
Siehe [CHANGELOG.md](../CHANGELOG.md) für vollständige Details.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 🚀 BMAD+ — Framework Multi-Agente IA Aumentado
|
|
2
2
|
|
|
3
|
-
[](../CHANGELOG.md)
|
|
4
4
|
[](https://github.com/bmad-code-org/BMAD-METHOD)
|
|
5
5
|
[](../LICENSE)
|
|
6
6
|
|
|
@@ -214,7 +214,7 @@ graph TB
|
|
|
214
214
|
MK["Maker 🧬"]
|
|
215
215
|
ZC["Zecher 🧠 Memory"]
|
|
216
216
|
SD["Shield 🛡️ GRC 38 agents"]
|
|
217
|
-
DS["Dev Studio 🏗️ SDLC
|
|
217
|
+
DS["Dev Studio 🏗️ SDLC 6 agents"]
|
|
218
218
|
SEO["SEO Engine 🔎 3 agents"]
|
|
219
219
|
BK["Backup 🗂️"]
|
|
220
220
|
AN["Animated 🎬"]
|
|
@@ -360,7 +360,12 @@ npx bmad-plus install
|
|
|
360
360
|
|
|
361
361
|
🔍 OSINT — Shadow (investigación, scraping, psicoperfil)
|
|
362
362
|
🧬 Agent Creator — Maker (diseño, desarrollo, empaque)
|
|
363
|
-
🛡️
|
|
363
|
+
🛡️ Shield GRC — 38 agentes de cumplimiento (GDPR, ISO 27001, SOC 2, HIPAA...)
|
|
364
|
+
🏗️ Dev Studio — 6 agentes SDLC (ciclo de vida completo: diseño a despliegue)
|
|
365
|
+
🔎 SEO — Scout, Chief, Judge (auditoría 6 fases, PageSpeed)
|
|
366
|
+
🧠 Memory — Zecher (cerebro persistente, handoff sessions)
|
|
367
|
+
🗂️ Backup — Archivo inteligente con versionado
|
|
368
|
+
🎬 Animated — Sitios web animados scroll-driven
|
|
364
369
|
🤖 Instalar todo
|
|
365
370
|
Ninguno — Solo Core
|
|
366
371
|
```
|
|
@@ -395,7 +400,7 @@ Cada agente puede **automáticamente** cambiar de rol según el contexto:
|
|
|
395
400
|
|--------|-----------|---------|
|
|
396
401
|
| 🔤 **Patrón** | Palabras clave en el pedido | "revisa" → QA activado |
|
|
397
402
|
| 🌐 **Contexto** | Detecta el tipo de tarea | Cálculos financieros detectados → QA auto-activado tras escribir código |
|
|
398
|
-
| 🧠 **Razonamiento** | Cadena lógica | Inconsistencia de arquitectura →
|
|
403
|
+
| 🧠 **Razonamiento** | Cadena lógica | Inconsistencia de arquitectura → Architect auto-activado |
|
|
399
404
|
|
|
400
405
|
El agente **anuncia** el cambio: *"💡 I'm switching to QA mode — financial calculations detected. Say 'skip' to stay in current mode."*
|
|
401
406
|
|
|
@@ -501,7 +506,7 @@ BMAD+/
|
|
|
501
506
|
│ ├── skills/
|
|
502
507
|
│ │ ├── bmad-plus-autopilot/ ← Orquestación completa
|
|
503
508
|
│ │ ├── bmad-plus-parallel/ ← Supervisión concurrente
|
|
504
|
-
│ │ └── bmad-plus-sync/ ←
|
|
509
|
+
│ │ └── bmad-plus-sync/ ← Sincronización automatizada código
|
|
505
510
|
│ └── data/
|
|
506
511
|
│ └── role-triggers.yaml ← Lógica de variables y keywords
|
|
507
512
|
│
|
|
@@ -534,7 +539,7 @@ BMAD+/
|
|
|
534
539
|
|
|
535
540
|
| Variable | Descripción | Valores Disponibles |
|
|
536
541
|
|----------|-------------|---------|
|
|
537
|
-
| `project_name` | Nombre
|
|
542
|
+
| `project_name` | Nombre del proyecto | Autodetectado |
|
|
538
543
|
| `user_skill_level` | Nivel del equipo/persona | beginner, intermediate, expert |
|
|
539
544
|
| `execution_mode` | Modo de uso general | manual, autopilot, hybrid |
|
|
540
545
|
| `auto_role_activation` | Cambio al predecir contexto | true, false |
|
|
@@ -557,8 +562,16 @@ BMAD+/
|
|
|
557
562
|
| Versión | Fecha | Descripción |
|
|
558
563
|
|---------|------|-------------|
|
|
559
564
|
| **0.1.0** | 2026-03-17 | 🎉 Fundación base de proyecto (6 agentes / 3 entornos de skills / Auto-detección IDEs locales). Se incorporó el Maker y paquete OSINT |
|
|
560
|
-
| **0.
|
|
561
|
-
| **0.
|
|
565
|
+
| **0.2.0** | 2026-03-18 | 🔀 Fusión Oveanet — 3 nuevos packs utilitarios: SEO Audit 360, Universal Backup, Animated Website |
|
|
566
|
+
| **0.3.0** | 2026-03-19 | 🚀 SEO Engine v2.0 — 3 agentes multirrol, 4 scripts Python, flujo 6 fases, bucle PageSpeed, análisis GEO |
|
|
567
|
+
| **0.4.0** | 2026-03-19 | 🏢 SEO Engine v2.1 — Orquestador SKILL.md, APIs Google, informes HTML, benchmark competitivo, 50 tests, extensiones GSC + GA4 |
|
|
568
|
+
| **0.4.1** | 2026-03-19 | 🌐 CLI 10 idiomas, pipeline CI/CD, `.npmignore`, endurecimiento de seguridad |
|
|
569
|
+
| **0.4.2** | 2026-03-19 | 📦 Packs públicos — SEO/Backup/Animated en npm |
|
|
570
|
+
| **0.4.3** | 2026-05-17 | 🔧 Comandos update + doctor, i18n completa, corrección de créditos |
|
|
571
|
+
| **0.4.4** | 2026-05-17 | 🔧 Corrección codificación UTF-8, i18n completa 10 idiomas, 62 tests unitarios |
|
|
572
|
+
| **0.5.0** | 2026-05-17 | 🛡️ **Pack Shield** — 38 agentes de cumplimiento GRC, 7 categorías, 25+ frameworks (GDPR, ISO 27001, SOC 2, EU AI Act...) |
|
|
573
|
+
| **0.6.0** | 2026-05-17 | 🏗️ **Pack Dev Studio** — 6 agentes SDLC (Miriam, Yosef, Bezalel...) + 30 flujos de trabajo SDLC, BWML DSL |
|
|
574
|
+
| **0.9.0** | 2026-06-24 | 🚀 **Aumentado & Seguro** — 3 nuevos packs (animated, backup, seo), corrección P0 seguridad, 143/143 tests |
|
|
562
575
|
| **0.8.0** | 2026-06-24 | 🚀 **Aumentado & Seguro** — 3 nuevos packs (animated, backup, seo), corrección P0 seguridad, 143/143 tests |
|
|
563
576
|
|
|
564
577
|
Más descripciones a fondo en el archivo: [CHANGELOG.md](../CHANGELOG.md).
|
|
@@ -571,8 +584,23 @@ Proyecto BMAD+ (Adaptación: MIT)
|
|
|
571
584
|
|
|
572
585
|
Basado nativamente en el repositorio: [BMAD-METHOD](https://github.com/bmad-code-org/BMAD-METHOD) (MIT LIC)
|
|
573
586
|
|
|
574
|
-
### Reconocimientos
|
|
587
|
+
### Reconocimientos
|
|
575
588
|
|
|
576
|
-
|
|
577
|
-
- **
|
|
578
|
-
|
|
589
|
+
**Creador**
|
|
590
|
+
- **BMAD+** Creado por [Laurent Rochetta](https://github.com/lrochetta) ([LinkedIn](https://www.linkedin.com/in/laurentrochetta/))
|
|
591
|
+
|
|
592
|
+
**Packs Originales** (creados por Laurent Rochetta)
|
|
593
|
+
- **Dev Studio** — 6 agentes SDLC especializados: Miriam (analista de negocios), Huldah (redactora técnica), Yosef (gerente de producto), Rachel (diseñadora UX), Bezalel (arquitecto de sistemas), Oholiab (ingeniero senior) — 44 workflows que cubren todo el ciclo de vida desde la lluvia de ideas hasta el despliegue
|
|
594
|
+
- **SEO Engine** — 3 agentes (Scout, Chief, Judge), pipeline de auditoría de 6 fases, bucle PageSpeed, integraciones con Google Search Console y GA4
|
|
595
|
+
- **Memory Pack** — Agente Zecher para cerebro persistente cross-session con escáner de proyectos
|
|
596
|
+
|
|
597
|
+
**Fuentes Externas e Inspiraciones**
|
|
598
|
+
- **BMAD-METHOD** por [bmad-code-org](https://github.com/bmad-code-org/BMAD-METHOD) — Metodología multi-agente original (MIT)
|
|
599
|
+
- **Shield GRC** — 38 agentes de cumplimiento basados en textos regulatorios públicos (GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIST, CMMC, etc.)
|
|
600
|
+
- **OSINT Pipeline** basado en [smixs/osint-skill](https://github.com/smixs/osint-skill) (MIT)
|
|
601
|
+
- **Apify Actor Runner** integrado desde [apify/agent-skills](https://github.com/apify/agent-skills) (MIT)
|
|
602
|
+
- **Karpathy Guardrails** adaptado de [Andrej Karpathy](https://github.com/multica-ai/andrej-karpathy-skills) (MIT) — Reglas de comportamiento para Memory Pack
|
|
603
|
+
|
|
604
|
+
**Herramientas e Infraestructura**
|
|
605
|
+
- [Evolution API](https://github.com/EvolutionAPI/evolution-api) — Notificaciones WhatsApp para monitoreo upstream
|
|
606
|
+
- [Gemini API](https://ai.google.dev/) — Análisis IA para clasificación de cambios upstream
|