bmad-plus 0.1.0
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 +75 -0
- package/README.md +482 -0
- package/osint-agent-package/README.md +88 -0
- package/osint-agent-package/SETUP_KEYS.md +108 -0
- package/osint-agent-package/agents/osint-investigator.md +80 -0
- package/osint-agent-package/install.ps1 +87 -0
- package/osint-agent-package/install.sh +76 -0
- package/osint-agent-package/skills/bmad-osint-investigate/SKILL.md +147 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/SKILL.md +452 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/assets/dossier-template.md +116 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/content-extraction.md +100 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/enrichment-databases-fr.md +148 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/platforms.md +130 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/psychoprofile.md +69 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/tools.md +281 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/_http.py +101 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/apify.py +260 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/brightdata.py +101 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/diagnose.py +141 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/exa.py +79 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/jina.py +71 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/mcp-client.py +136 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/parallel.py +85 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/perplexity.py +102 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/tavily.py +72 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/scripts/volley.py +208 -0
- package/osint-agent-package/skills/bmad-osint-investigator/SKILL.md +15 -0
- package/package.json +51 -0
- package/readme-international/README.de.md +392 -0
- package/readme-international/README.es.md +484 -0
- package/readme-international/README.fr.md +482 -0
- package/src/bmad-plus/agents/agent-architect-dev/SKILL.md +96 -0
- package/src/bmad-plus/agents/agent-architect-dev/bmad-skill-manifest.yaml +13 -0
- package/src/bmad-plus/agents/agent-maker/SKILL.md +201 -0
- package/src/bmad-plus/agents/agent-maker/bmad-skill-manifest.yaml +13 -0
- package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +137 -0
- package/src/bmad-plus/agents/agent-orchestrator/bmad-skill-manifest.yaml +13 -0
- package/src/bmad-plus/agents/agent-quality/SKILL.md +83 -0
- package/src/bmad-plus/agents/agent-quality/bmad-skill-manifest.yaml +13 -0
- package/src/bmad-plus/agents/agent-shadow/SKILL.md +71 -0
- package/src/bmad-plus/agents/agent-shadow/bmad-skill-manifest.yaml +13 -0
- package/src/bmad-plus/agents/agent-strategist/SKILL.md +80 -0
- package/src/bmad-plus/agents/agent-strategist/bmad-skill-manifest.yaml +13 -0
- package/src/bmad-plus/data/role-triggers.yaml +209 -0
- package/src/bmad-plus/module-help.csv +10 -0
- package/src/bmad-plus/module.yaml +174 -0
- package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +99 -0
- package/src/bmad-plus/skills/bmad-plus-parallel/SKILL.md +93 -0
- package/src/bmad-plus/skills/bmad-plus-sync/SKILL.md +69 -0
- package/tools/bmad-plus-npx.js +33 -0
- package/tools/cli/bmad-plus-cli.js +50 -0
- package/tools/cli/commands/install.js +437 -0
- package/tools/cli/commands/uninstall.js +70 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# đ Configuration des ClĂ©s API
|
|
2
|
+
|
|
3
|
+
Ce guide explique comment configurer les clés API pour l'agent OSINT.
|
|
4
|
+
**Tu n'as besoin que d'UNE SEULE clé pour démarrer.** Plus tu en configures, plus l'agent est puissant.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Clés API par priorité
|
|
9
|
+
|
|
10
|
+
### đ„ Essentielles (au moins 1 requise)
|
|
11
|
+
|
|
12
|
+
#### JINA_API_KEY â RecommandĂ©e pour commencer
|
|
13
|
+
- **Gratuit** : 1 million de tokens Ă l'inscription
|
|
14
|
+
- **CoĂ»t** : ~$0.005/requĂȘte (search), ~$0.05 (deep)
|
|
15
|
+
- **Fonctions** : Recherche web, lecture d'URLs, deep search
|
|
16
|
+
- **Inscription** : https://jina.ai/api-key
|
|
17
|
+
```powershell
|
|
18
|
+
# Windows (permanent)
|
|
19
|
+
[System.Environment]::SetEnvironmentVariable("JINA_API_KEY", "jina_xxxx", "User")
|
|
20
|
+
# Session uniquement
|
|
21
|
+
$env:JINA_API_KEY = "jina_xxxx"
|
|
22
|
+
```
|
|
23
|
+
```bash
|
|
24
|
+
# macOS/Linux
|
|
25
|
+
echo 'export JINA_API_KEY="jina_xxxx"' >> ~/.bashrc
|
|
26
|
+
source ~/.bashrc
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
#### APIFY_API_TOKEN â Pour le scraping social
|
|
30
|
+
- **Gratuit** : $5/mois de crédits offerts
|
|
31
|
+
- **Fonctions** : LinkedIn, Instagram, Facebook, TikTok, YouTube, Google Maps (55+ scrapers)
|
|
32
|
+
- **Inscription** : https://console.apify.com/account/integrations
|
|
33
|
+
```powershell
|
|
34
|
+
[System.Environment]::SetEnvironmentVariable("APIFY_API_TOKEN", "apify_api_xxxx", "User")
|
|
35
|
+
```
|
|
36
|
+
```bash
|
|
37
|
+
echo 'export APIFY_API_TOKEN="apify_api_xxxx"' >> ~/.bashrc
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
### đ„ RecommandĂ©es (amĂ©liorent les rĂ©sultats)
|
|
43
|
+
|
|
44
|
+
#### PERPLEXITY_API_KEY
|
|
45
|
+
- **CoĂ»t** : $0.005/requĂȘte (sonar), $0.05 (deep research)
|
|
46
|
+
- **Fonctions** : Recherche IA avec citations, deep research
|
|
47
|
+
- **Inscription** : https://perplexity.ai/settings/api
|
|
48
|
+
```powershell
|
|
49
|
+
[System.Environment]::SetEnvironmentVariable("PERPLEXITY_API_KEY", "pplx-xxxx", "User")
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
#### TAVILY_API_KEY
|
|
53
|
+
- **Gratuit** : 1000 requĂȘtes/mois
|
|
54
|
+
- **Fonctions** : Recherche optimisée pour agents IA, extraction de contenu
|
|
55
|
+
- **Inscription** : https://app.tavily.com/home
|
|
56
|
+
```powershell
|
|
57
|
+
[System.Environment]::SetEnvironmentVariable("TAVILY_API_KEY", "tvly-xxxx", "User")
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
#### EXA_API_KEY
|
|
61
|
+
- **Gratuit** : 1000 requĂȘtes/mois
|
|
62
|
+
- **Fonctions** : Recherche sémantique, recherche de personnes/entreprises
|
|
63
|
+
- **Inscription** : https://dashboard.exa.ai
|
|
64
|
+
```powershell
|
|
65
|
+
[System.Environment]::SetEnvironmentVariable("EXA_API_KEY", "exa-xxxx", "User")
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### đ„ Optionnelles (pour aller plus loin)
|
|
71
|
+
|
|
72
|
+
#### PARALLEL_API_KEY
|
|
73
|
+
- **Gratuit** : Offre de lancement
|
|
74
|
+
- **Fonctions** : Recherche IA, extraction de pages complexes (JS, PDF)
|
|
75
|
+
- **Inscription** : https://platform.parallel.ai
|
|
76
|
+
```powershell
|
|
77
|
+
[System.Environment]::SetEnvironmentVariable("PARALLEL_API_KEY", "xxxx", "User")
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### BRIGHTDATA_MCP_URL
|
|
81
|
+
- **Payant** : ~$0.01/requĂȘte
|
|
82
|
+
- **Fonctions** : Scraping avec bypass CAPTCHA, Yandex, recherche géolocalisée
|
|
83
|
+
- **Inscription** : https://brightdata.com/products/web-scraper/mcp
|
|
84
|
+
```powershell
|
|
85
|
+
[System.Environment]::SetEnvironmentVariable("BRIGHTDATA_MCP_URL", "https://mcp.brightdata.com/xxxx", "User")
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Résumé des coûts
|
|
91
|
+
|
|
92
|
+
| API | Plan gratuit | Coût par investigation |
|
|
93
|
+
|-----|-------------|----------------------|
|
|
94
|
+
| Jina | 1M tokens | ~$0.03-0.05 |
|
|
95
|
+
| Apify | $5/mois | ~$0.01-0.10 |
|
|
96
|
+
| Tavily | 1000 req/mois | ~$0.005-0.01 |
|
|
97
|
+
| Exa | 1000 req/mois | ~$0.01-0.03 |
|
|
98
|
+
| Perplexity | Pay-as-you-go | ~$0.01-0.05 |
|
|
99
|
+
| **Total par investigation** | | **~$0.05-0.30** |
|
|
100
|
+
|
|
101
|
+
## Vérification
|
|
102
|
+
|
|
103
|
+
AprÚs avoir configuré tes clés, **redémarre ton terminal** puis lance le diagnostic :
|
|
104
|
+
```
|
|
105
|
+
python skills/bmad-osint-investigate/osint/scripts/diagnose.py
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Tu devrais voir tes clĂ©s avec un â
dans la section "API Tokens".
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "osint-investigator"
|
|
3
|
+
description: "OSINT Intelligence Analyst Agent"
|
|
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
|
+
```xml
|
|
9
|
+
<agent id="osint-investigator.agent.yaml" name="Shadow" title="OSINT Intelligence Analyst" icon="đ" capabilities="OSINT investigation, person research, social media intelligence, psychoprofiling, contact discovery">
|
|
10
|
+
<activation critical="MANDATORY">
|
|
11
|
+
<step n="1">Load persona from this current agent file (already in context)</step>
|
|
12
|
+
<step n="2">đš IMMEDIATE ACTION REQUIRED - BEFORE ANY OUTPUT:
|
|
13
|
+
- Load and read {project-root}/_bmad/bmm/config.yaml NOW
|
|
14
|
+
- Store ALL fields as session variables: {user_name}, {communication_language}, {output_folder}
|
|
15
|
+
- VERIFY: If config not loaded, STOP and report error to user
|
|
16
|
+
- DO NOT PROCEED to step 3 until config is successfully loaded and variables stored
|
|
17
|
+
</step>
|
|
18
|
+
<step n="3">Remember: user's name is {user_name}</step>
|
|
19
|
+
<step n="4">READ the OSINT skill file at {project-root}/.agents/skills/bmad-osint-investigate/osint/SKILL.md to understand the full investigation pipeline</step>
|
|
20
|
+
<step n="5">Run the diagnostic script first if possible: bash {project-root}/.agents/skills/bmad-osint-investigate/osint/scripts/diagnose.sh â report available tools to the user</step>
|
|
21
|
+
<step n="6">Show greeting using {user_name} from config, communicate in {communication_language}, then display numbered list of ALL menu items from menu section</step>
|
|
22
|
+
<step n="7">Let {user_name} know they can invoke the `bmad-help` skill at any time to get advice on what to do next</step>
|
|
23
|
+
<step n="8">STOP and WAIT for user input - do NOT execute menu items automatically - accept number or cmd trigger or fuzzy command match</step>
|
|
24
|
+
<step n="9">On user input: Number â process menu item[n] | Text â case-insensitive substring match | Multiple matches â ask user to clarify | No match â show "Not recognized"</step>
|
|
25
|
+
<step n="10">When processing a menu item: Check menu-handlers section below - extract any attributes from the selected menu item (exec, tmpl, data, action, multi) and follow the corresponding handler instructions</step>
|
|
26
|
+
|
|
27
|
+
<menu-handlers>
|
|
28
|
+
<handlers>
|
|
29
|
+
<handler type="exec">
|
|
30
|
+
When menu item or handler has: exec="path/to/file.md":
|
|
31
|
+
1. Read fully and follow the file at that path
|
|
32
|
+
2. Process the complete file and follow all instructions within it
|
|
33
|
+
3. If there is data="some/path/data-foo.md" with the same item, pass that data path to the executed file as context.
|
|
34
|
+
</handler>
|
|
35
|
+
</handlers>
|
|
36
|
+
</menu-handlers>
|
|
37
|
+
|
|
38
|
+
<rules>
|
|
39
|
+
<r>ALWAYS communicate in {communication_language} UNLESS contradicted by communication_style.</r>
|
|
40
|
+
<r>Stay in character until exit selected</r>
|
|
41
|
+
<r>Display Menu items as the item dictates and in the order given.</r>
|
|
42
|
+
<r>Load files ONLY when executing a user chosen workflow or a command requires it, EXCEPTION: agent activation step 2 config.yaml</r>
|
|
43
|
+
<r>ALL investigation output files should be saved to {output_folder}/osint-reports/ with the target name and date as filename</r>
|
|
44
|
+
<r>ALWAYS run diagnose.sh BEFORE any investigation to know which tools/APIs are available</r>
|
|
45
|
+
<r>FOLLOW the budget rules: spend â€$0.50 without asking, ASK permission above that</r>
|
|
46
|
+
<r>NEVER hardcode API tokens â always load from environment variables</r>
|
|
47
|
+
<r>For each fact discovered, assign a confidence grade: A (3+ sources), B (2 sources), C (1 source), D (unverified)</r>
|
|
48
|
+
</rules>
|
|
49
|
+
</activation>
|
|
50
|
+
|
|
51
|
+
<persona>
|
|
52
|
+
<role>Senior OSINT Intelligence Analyst</role>
|
|
53
|
+
<identity>Shadow is a systematic intelligence specialist who conducts deep research on individuals. From a name or handle to a scored dossier with psychoprofile, career map, and entry points. Shadow follows a phased pipeline from quick search to deep research, always escalating from cheap to expensive, from fast to thorough.</identity>
|
|
54
|
+
<communication_style>Professional but approachable. Uses intelligence terminology. Reports findings in structured, confidence-graded format. Always states source quality and limitations. Speaks in data points and cross-references.</communication_style>
|
|
55
|
+
<principles>
|
|
56
|
+
- Every fact must be cross-referenced and confidence-graded (A/B/C/D)
|
|
57
|
+
- Always check internal intelligence BEFORE going external
|
|
58
|
+
- Escalate from free/fast to paid/deep only when needed
|
|
59
|
+
- Budget transparency: report costs as you go
|
|
60
|
+
- Never fabricate or assume data â only report verified findings
|
|
61
|
+
- Respect privacy boundaries â this tool is for legitimate business intelligence
|
|
62
|
+
</principles>
|
|
63
|
+
</persona>
|
|
64
|
+
|
|
65
|
+
<menu>
|
|
66
|
+
<item cmd="MH or fuzzy match on menu or help">[MH] Redisplay Menu Help</item>
|
|
67
|
+
<item cmd="CH or fuzzy match on chat">[CH] Chat with the Agent about anything</item>
|
|
68
|
+
<item cmd="INV or fuzzy match on investigate or research or dossier" exec="skill:bmad-osint-investigate">[INV] đ Full Investigation: Run the complete OSINT pipeline (Phase 0â6) on a person. Produces a scored dossier with psychoprofile.</item>
|
|
69
|
+
<item cmd="QS or fuzzy match on quick search or find">[QS] ⥠Quick Search: Fast multi-engine search on a name/handle. Uses free APIs first (Jina, Parallel, Tavily). Returns links and summaries.</item>
|
|
70
|
+
<item cmd="LI or fuzzy match on linkedin">[LI] đŒ LinkedIn Scrape: Extract LinkedIn profile data via Apify (requires APIFY_API_TOKEN).</item>
|
|
71
|
+
<item cmd="IG or fuzzy match on instagram">[IG] đž Instagram Scrape: Extract Instagram profile data via Apify (requires APIFY_API_TOKEN).</item>
|
|
72
|
+
<item cmd="FB or fuzzy match on facebook">[FB] đ Facebook Scrape: Extract Facebook profile data via Bright Data MCP (requires BRIGHTDATA_MCP_URL).</item>
|
|
73
|
+
<item cmd="PP or fuzzy match on psychoprofile or personality">[PP] đ§ Psychoprofile: Build MBTI/Big Five personality analysis from existing content (YouTube, blogs, posts).</item>
|
|
74
|
+
<item cmd="CE or fuzzy match on contact or email or phone">[CE] đ Contact Enrichment: Find email, phone, and other contact info for a person using Apify enrichment actors.</item>
|
|
75
|
+
<item cmd="DG or fuzzy match on diagnose or diagnostic or tools">[DG] đ§ Diagnose Tools: Run diagnose.sh to check which APIs and tools are available.</item>
|
|
76
|
+
<item cmd="PM or fuzzy match on party-mode" exec="skill:bmad-party-mode">[PM] Start Party Mode</item>
|
|
77
|
+
<item cmd="DA or fuzzy match on exit, leave, goodbye or dismiss agent">[DA] Dismiss Agent</item>
|
|
78
|
+
</menu>
|
|
79
|
+
</agent>
|
|
80
|
+
```
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# OSINT Agent â Installation Script (Windows PowerShell)
|
|
2
|
+
# Usage: .\install.ps1 [-ProjectRoot "path\to\bmad\project"]
|
|
3
|
+
|
|
4
|
+
param(
|
|
5
|
+
[string]$ProjectRoot = "."
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
$ErrorActionPreference = "Stop"
|
|
9
|
+
$PackageDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
10
|
+
|
|
11
|
+
Write-Host "========================================" -ForegroundColor Cyan
|
|
12
|
+
Write-Host " OSINT Agent Installer for BMAD" -ForegroundColor Cyan
|
|
13
|
+
Write-Host "========================================" -ForegroundColor Cyan
|
|
14
|
+
Write-Host ""
|
|
15
|
+
|
|
16
|
+
# Resolve project root
|
|
17
|
+
$ProjectRoot = Resolve-Path $ProjectRoot
|
|
18
|
+
Write-Host "Project root: $ProjectRoot" -ForegroundColor Yellow
|
|
19
|
+
|
|
20
|
+
# Verify BMAD is installed
|
|
21
|
+
$bmadDir = Join-Path $ProjectRoot "_bmad\bmm\agents"
|
|
22
|
+
if (-not (Test-Path $bmadDir)) {
|
|
23
|
+
Write-Host "ERROR: BMAD not found at $bmadDir" -ForegroundColor Red
|
|
24
|
+
Write-Host "Make sure BMAD Method is installed in the target project." -ForegroundColor Red
|
|
25
|
+
Write-Host "Run: npx bmad-method install" -ForegroundColor Yellow
|
|
26
|
+
exit 1
|
|
27
|
+
}
|
|
28
|
+
Write-Host " BMAD found" -ForegroundColor Green
|
|
29
|
+
|
|
30
|
+
# Verify Python
|
|
31
|
+
$python = Get-Command python -ErrorAction SilentlyContinue
|
|
32
|
+
if (-not $python) {
|
|
33
|
+
Write-Host "ERROR: Python not found. Install Python 3.10+" -ForegroundColor Red
|
|
34
|
+
exit 1
|
|
35
|
+
}
|
|
36
|
+
Write-Host " Python found: $($python.Source)" -ForegroundColor Green
|
|
37
|
+
|
|
38
|
+
# 1. Copy agent definition
|
|
39
|
+
Write-Host ""
|
|
40
|
+
Write-Host "1. Installing agent definition..." -ForegroundColor Cyan
|
|
41
|
+
$agentSrc = Join-Path $PackageDir "agents\osint-investigator.md"
|
|
42
|
+
$agentDst = Join-Path $ProjectRoot "_bmad\bmm\agents\osint-investigator.md"
|
|
43
|
+
Copy-Item $agentSrc $agentDst -Force
|
|
44
|
+
Write-Host " -> $agentDst" -ForegroundColor Green
|
|
45
|
+
|
|
46
|
+
# 2. Copy skills
|
|
47
|
+
Write-Host ""
|
|
48
|
+
Write-Host "2. Installing skills..." -ForegroundColor Cyan
|
|
49
|
+
|
|
50
|
+
$skillsDir = Join-Path $ProjectRoot ".agents\skills"
|
|
51
|
+
|
|
52
|
+
# Skill 1: Agent entry point
|
|
53
|
+
$skill1Dst = Join-Path $skillsDir "bmad-osint-investigator"
|
|
54
|
+
New-Item -ItemType Directory -Force -Path $skill1Dst | Out-Null
|
|
55
|
+
Copy-Item (Join-Path $PackageDir "skills\bmad-osint-investigator\SKILL.md") $skill1Dst -Force
|
|
56
|
+
Write-Host " -> bmad-osint-investigator/SKILL.md" -ForegroundColor Green
|
|
57
|
+
|
|
58
|
+
# Skill 2: Investigation pipeline + scripts
|
|
59
|
+
$skill2Dst = Join-Path $skillsDir "bmad-osint-investigate"
|
|
60
|
+
New-Item -ItemType Directory -Force -Path $skill2Dst | Out-Null
|
|
61
|
+
Copy-Item (Join-Path $PackageDir "skills\bmad-osint-investigate\SKILL.md") $skill2Dst -Force
|
|
62
|
+
|
|
63
|
+
$osintDst = Join-Path $skill2Dst "osint"
|
|
64
|
+
New-Item -ItemType Directory -Force -Path "$osintDst\scripts", "$osintDst\references", "$osintDst\assets" | Out-Null
|
|
65
|
+
|
|
66
|
+
Copy-Item (Join-Path $PackageDir "skills\bmad-osint-investigate\osint\SKILL.md") $osintDst -Force
|
|
67
|
+
Copy-Item (Join-Path $PackageDir "skills\bmad-osint-investigate\osint\scripts\*") "$osintDst\scripts\" -Force
|
|
68
|
+
Copy-Item (Join-Path $PackageDir "skills\bmad-osint-investigate\osint\references\*") "$osintDst\references\" -Force
|
|
69
|
+
Copy-Item (Join-Path $PackageDir "skills\bmad-osint-investigate\osint\assets\*") "$osintDst\assets\" -Force
|
|
70
|
+
Write-Host " -> bmad-osint-investigate/ (full pipeline + scripts)" -ForegroundColor Green
|
|
71
|
+
|
|
72
|
+
# 3. Run diagnostic
|
|
73
|
+
Write-Host ""
|
|
74
|
+
Write-Host "3. Running diagnostic..." -ForegroundColor Cyan
|
|
75
|
+
$diagScript = Join-Path $osintDst "scripts\diagnose.py"
|
|
76
|
+
& python $diagScript
|
|
77
|
+
|
|
78
|
+
# 4. Summary
|
|
79
|
+
Write-Host ""
|
|
80
|
+
Write-Host "========================================" -ForegroundColor Cyan
|
|
81
|
+
Write-Host " Installation complete!" -ForegroundColor Green
|
|
82
|
+
Write-Host "========================================" -ForegroundColor Cyan
|
|
83
|
+
Write-Host ""
|
|
84
|
+
Write-Host "Next steps:" -ForegroundColor Yellow
|
|
85
|
+
Write-Host " 1. Configure API keys - see SETUP_KEYS.md"
|
|
86
|
+
Write-Host " 2. Invoke 'bmad-osint-investigator' skill in your AI agent"
|
|
87
|
+
Write-Host ""
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# OSINT Agent â Installation Script (macOS/Linux)
|
|
3
|
+
# Usage: ./install.sh [project_root]
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
PROJECT_ROOT="${1:-.}"
|
|
8
|
+
PACKAGE_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
9
|
+
|
|
10
|
+
echo "========================================"
|
|
11
|
+
echo " OSINT Agent Installer for BMAD"
|
|
12
|
+
echo "========================================"
|
|
13
|
+
echo ""
|
|
14
|
+
|
|
15
|
+
# Resolve project root
|
|
16
|
+
PROJECT_ROOT="$(cd "$PROJECT_ROOT" && pwd)"
|
|
17
|
+
echo "Project root: $PROJECT_ROOT"
|
|
18
|
+
|
|
19
|
+
# Verify BMAD
|
|
20
|
+
BMAD_DIR="$PROJECT_ROOT/_bmad/bmm/agents"
|
|
21
|
+
if [ ! -d "$BMAD_DIR" ]; then
|
|
22
|
+
echo "ERROR: BMAD not found at $BMAD_DIR"
|
|
23
|
+
echo "Run: npx bmad-method install"
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
echo " â
BMAD found"
|
|
27
|
+
|
|
28
|
+
# Verify Python
|
|
29
|
+
if ! command -v python3 &>/dev/null; then
|
|
30
|
+
echo "ERROR: Python3 not found. Install Python 3.10+"
|
|
31
|
+
exit 1
|
|
32
|
+
fi
|
|
33
|
+
echo " â
Python found: $(python3 --version)"
|
|
34
|
+
|
|
35
|
+
# 1. Copy agent definition
|
|
36
|
+
echo ""
|
|
37
|
+
echo "1. Installing agent definition..."
|
|
38
|
+
cp "$PACKAGE_DIR/agents/osint-investigator.md" "$BMAD_DIR/"
|
|
39
|
+
echo " â osint-investigator.md"
|
|
40
|
+
|
|
41
|
+
# 2. Copy skills
|
|
42
|
+
echo ""
|
|
43
|
+
echo "2. Installing skills..."
|
|
44
|
+
SKILLS_DIR="$PROJECT_ROOT/.agents/skills"
|
|
45
|
+
|
|
46
|
+
mkdir -p "$SKILLS_DIR/bmad-osint-investigator"
|
|
47
|
+
cp "$PACKAGE_DIR/skills/bmad-osint-investigator/SKILL.md" "$SKILLS_DIR/bmad-osint-investigator/"
|
|
48
|
+
echo " â bmad-osint-investigator/"
|
|
49
|
+
|
|
50
|
+
mkdir -p "$SKILLS_DIR/bmad-osint-investigate/osint/scripts"
|
|
51
|
+
mkdir -p "$SKILLS_DIR/bmad-osint-investigate/osint/references"
|
|
52
|
+
mkdir -p "$SKILLS_DIR/bmad-osint-investigate/osint/assets"
|
|
53
|
+
cp "$PACKAGE_DIR/skills/bmad-osint-investigate/SKILL.md" "$SKILLS_DIR/bmad-osint-investigate/"
|
|
54
|
+
cp "$PACKAGE_DIR/skills/bmad-osint-investigate/osint/SKILL.md" "$SKILLS_DIR/bmad-osint-investigate/osint/"
|
|
55
|
+
cp "$PACKAGE_DIR/skills/bmad-osint-investigate/osint/scripts/"*.py "$SKILLS_DIR/bmad-osint-investigate/osint/scripts/"
|
|
56
|
+
cp "$PACKAGE_DIR/skills/bmad-osint-investigate/osint/references/"* "$SKILLS_DIR/bmad-osint-investigate/osint/references/"
|
|
57
|
+
cp "$PACKAGE_DIR/skills/bmad-osint-investigate/osint/assets/"* "$SKILLS_DIR/bmad-osint-investigate/osint/assets/"
|
|
58
|
+
echo " â bmad-osint-investigate/ (full pipeline + scripts)"
|
|
59
|
+
|
|
60
|
+
# 3. Make scripts executable
|
|
61
|
+
chmod +x "$SKILLS_DIR/bmad-osint-investigate/osint/scripts/"*.py
|
|
62
|
+
|
|
63
|
+
# 4. Run diagnostic
|
|
64
|
+
echo ""
|
|
65
|
+
echo "3. Running diagnostic..."
|
|
66
|
+
python3 "$SKILLS_DIR/bmad-osint-investigate/osint/scripts/diagnose.py"
|
|
67
|
+
|
|
68
|
+
# 5. Summary
|
|
69
|
+
echo ""
|
|
70
|
+
echo "========================================"
|
|
71
|
+
echo " â
Installation complete!"
|
|
72
|
+
echo "========================================"
|
|
73
|
+
echo ""
|
|
74
|
+
echo "Next steps:"
|
|
75
|
+
echo " 1. Configure API keys - see SETUP_KEYS.md"
|
|
76
|
+
echo " 2. Invoke 'bmad-osint-investigator' skill in your AI agent"
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bmad-osint-investigate
|
|
3
|
+
description: "Run the full OSINT investigation pipeline on a person or company. From a name or handle to a scored dossier with psychoprofile, career map, and confidence grades. Google dorks, French registries, enrichment databases, 55+ Apify actors, 7 search APIs."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# OSINT Investigation Skill
|
|
7
|
+
|
|
8
|
+
This skill executes a systematic OSINT intelligence gathering pipeline on an individual or company.
|
|
9
|
+
|
|
10
|
+
## Activation Instructions
|
|
11
|
+
|
|
12
|
+
<investigation-activation CRITICAL="TRUE">
|
|
13
|
+
|
|
14
|
+
### Step 1: Load the Full Pipeline
|
|
15
|
+
1. READ the complete OSINT pipeline file at: `{skill-dir}/osint/SKILL.md`
|
|
16
|
+
2. READ the enrichment databases reference: `{skill-dir}/osint/references/enrichment-databases-fr.md`
|
|
17
|
+
3. FOLLOW every phase precisely as documented
|
|
18
|
+
|
|
19
|
+
### Step 2: Get Target Information
|
|
20
|
+
Ask the user for:
|
|
21
|
+
- **Target name** or handle/URL
|
|
22
|
+
- **Type**: Personne physique or Personne morale
|
|
23
|
+
- **Context** (optional): company, city, industry, any known details
|
|
24
|
+
- **Scope**: Full investigation (Phase 0â6) or specific phase only
|
|
25
|
+
- **Budget limit**: Default â€$0.50, ask for permission above that
|
|
26
|
+
|
|
27
|
+
### Step 3: Execute the Pipeline
|
|
28
|
+
Follow ALL phases from the OSINT pipeline:
|
|
29
|
+
|
|
30
|
+
**Phase 0**: Tooling Self-Check
|
|
31
|
+
- Run `python {skill-dir}/osint/scripts/diagnose.py`
|
|
32
|
+
- Report available tools to user
|
|
33
|
+
|
|
34
|
+
**Phase 1**: Seed Collection (API search)
|
|
35
|
+
- Run parallel search across all available engines
|
|
36
|
+
- Use `python {skill-dir}/osint/scripts/volley.py search "Name" "context"`
|
|
37
|
+
- Merge results with `python {skill-dir}/osint/scripts/volley.py merge <outdir>`
|
|
38
|
+
|
|
39
|
+
**Phase 1.3**: Google Dorks (FREE â always do this)
|
|
40
|
+
- Search for documents: `"Name" filetype:pdf`, `filetype:pptx`, `filetype:doc`
|
|
41
|
+
- Search for phone: `"Name" ("06" OR "07" OR "+33 6" OR "+33 7")`
|
|
42
|
+
- Search for CV: `"Name" (CV OR resume OR curriculum)`
|
|
43
|
+
- Search for statuts: `"Name" "demeurant" site:pappers.fr`
|
|
44
|
+
- Search for presentations: `"Name" filetype:pptx OR filetype:ppt`
|
|
45
|
+
- Use the browser tool to run these Google searches directly
|
|
46
|
+
- Refer to `{skill-dir}/osint/references/enrichment-databases-fr.md` for all dork templates
|
|
47
|
+
|
|
48
|
+
**Phase 1.5**: Internal Intelligence
|
|
49
|
+
- Check Telegram history, email, vault contacts BEFORE going external
|
|
50
|
+
|
|
51
|
+
**Phase 1.7**: French Business Registries (FREE â always do this for FR targets)
|
|
52
|
+
- **Pappers.fr** â SIREN/SIRET, dirigeants, statuts PDF (contain personal addresses!)
|
|
53
|
+
- **Societe.com** â Company fiches, dirigeants, CA
|
|
54
|
+
- **Datalegal.fr** â ALL companies where person is a dirigeant
|
|
55
|
+
- **BODACC** â Official announcements (creation, modification, radiation)
|
|
56
|
+
- **INPI** â Trademarks and patents filed by the person
|
|
57
|
+
- Scrape these pages with: `python {skill-dir}/osint/scripts/jina.py read <url>`
|
|
58
|
+
|
|
59
|
+
**Phase 2**: Platform Extraction
|
|
60
|
+
- Extract data from LinkedIn, Instagram, Facebook, TikTok, YouTube
|
|
61
|
+
- Use `python {skill-dir}/osint/scripts/apify.py linkedin <url>` or `instagram <handle>`
|
|
62
|
+
- Use `python {skill-dir}/osint/scripts/apify.py run <actor_id> '<json>'` for 55+ Apify actors
|
|
63
|
+
- Refer to `{skill-dir}/osint/references/platforms.md` for platform-specific guide
|
|
64
|
+
- Refer to `{skill-dir}/osint/references/tools.md` for full actor catalog
|
|
65
|
+
|
|
66
|
+
**Phase 2.5**: Contact Enrichment (for phone numbers and emails)
|
|
67
|
+
- **RocketReach** (rocketreach.co) â Search for target, check visible data (partial phone/email)
|
|
68
|
+
- **ContactOut** (contactout.com) â Check if profile exists with data preview
|
|
69
|
+
- **Kaspr** (kaspr.io) â Best for French mobile numbers via LinkedIn
|
|
70
|
+
- **Apollo.io** â 50 free credits/month, great for B2B enrichment
|
|
71
|
+
- **Hunter.io** â Email patterns for companies
|
|
72
|
+
- Use browser tool to visit these sites and extract visible information
|
|
73
|
+
- Refer to `{skill-dir}/osint/references/enrichment-databases-fr.md` for full list
|
|
74
|
+
|
|
75
|
+
**Phase 3**: Cross-Reference & Confidence Scoring
|
|
76
|
+
- Build fact table, cross-check key facts, resolve contradictions
|
|
77
|
+
- Assign confidence grades: A (3+ sources), B (2 sources), C (1 source), D (unverified)
|
|
78
|
+
|
|
79
|
+
**Phase 4**: Psychoprofile
|
|
80
|
+
- Build MBTI/Big Five analysis from content
|
|
81
|
+
- Refer to `{skill-dir}/osint/references/psychoprofile.md` for methodology
|
|
82
|
+
- Refer to `{skill-dir}/osint/references/content-extraction.md` for YouTube/podcast/blog extraction
|
|
83
|
+
|
|
84
|
+
**Phase 5**: Completeness Evaluation
|
|
85
|
+
- 9 mandatory checks + Depth Score 1-10
|
|
86
|
+
- Gap analysis and stopping criteria
|
|
87
|
+
|
|
88
|
+
**Phase 6**: Dossier Output
|
|
89
|
+
- For **personnes physiques**: Save to `{project-root}/recherches/personnes-physiques/<nom-prenom>.md`
|
|
90
|
+
- For **personnes morales**: Save to `{project-root}/recherches/personnes-morales/<nom-societe>.md`
|
|
91
|
+
|
|
92
|
+
### Step 4: Research Escalation
|
|
93
|
+
Always escalate from cheap to expensive:
|
|
94
|
+
- **Level 0** (FREE): Google dorks, Pappers, Societe.com, BODACC, INPI, Datalegal
|
|
95
|
+
- **Level 0.5** (FREE): RocketReach (5/mois), Kaspr (gratuit), Apollo (50/mois), ContactOut
|
|
96
|
+
- **Level 1** (~$0.01): Perplexity Sonar, Tavily, Exa, Jina search
|
|
97
|
+
- **Level 2** (~$0.01): Jina read, Parallel extract
|
|
98
|
+
- **Level 3** (~$0.01-0.10): Apify scrapers, Bright Data
|
|
99
|
+
- **Level 4** (~$0.05-0.50): Perplexity Deep, Exa Deep, Jina Deep
|
|
100
|
+
|
|
101
|
+
### Available Scripts (Python â stdlib only, zero dependencies)
|
|
102
|
+
All scripts in `{skill-dir}/osint/scripts/`, run with `python <script>`:
|
|
103
|
+
|
|
104
|
+
| Script | Usage |
|
|
105
|
+
|--------|-------|
|
|
106
|
+
| `diagnose.py` | Self-check of all available tools and API keys |
|
|
107
|
+
| `perplexity.py` | `search <q>`, `sonar <q>`, `deep <q>` |
|
|
108
|
+
| `tavily.py` | `search <q>`, `extract <url>`, `deep <q>` |
|
|
109
|
+
| `exa.py` | `search <q>`, `company <name>`, `people <name>`, `crawl <url>` |
|
|
110
|
+
| `jina.py` | `read <url>`, `search <query>`, `deepsearch <q>` |
|
|
111
|
+
| `parallel.py` | `search <q>`, `extract <url>`, `task <q>` |
|
|
112
|
+
| `apify.py` | `run <actor> <json>`, `linkedin <url>`, `instagram <handle>`, `results`, `store-search` |
|
|
113
|
+
| `brightdata.py` | `scrape <url>`, `search <q>`, `search-yandex <q>` |
|
|
114
|
+
| `volley.py` | `search "Name" "context"` (parallel) / `merge <outdir>` (dedup) |
|
|
115
|
+
| `mcp-client.py` | Lightweight MCP client for Bright Data |
|
|
116
|
+
|
|
117
|
+
### References
|
|
118
|
+
| File | Content |
|
|
119
|
+
|------|---------|
|
|
120
|
+
| `enrichment-databases-fr.md` | đ«đ· French registries, enrichment tools, Google dork templates |
|
|
121
|
+
| `platforms.md` | Social media extraction guides |
|
|
122
|
+
| `tools.md` | 55+ Apify actor catalog |
|
|
123
|
+
| `psychoprofile.md` | MBTI/Big Five methodology |
|
|
124
|
+
| `content-extraction.md` | YouTube/podcast/blog extraction |
|
|
125
|
+
|
|
126
|
+
### Environment Variables Required
|
|
127
|
+
```
|
|
128
|
+
JINA_API_KEY â Jina reader/search (recommended first)
|
|
129
|
+
APIFY_API_TOKEN â Apify scraping (55+ actors)
|
|
130
|
+
PERPLEXITY_API_KEY â Perplexity Sonar
|
|
131
|
+
TAVILY_API_KEY â Tavily search
|
|
132
|
+
EXA_API_KEY â Exa AI
|
|
133
|
+
PARALLEL_API_KEY â Parallel AI
|
|
134
|
+
BRIGHTDATA_MCP_URL â Bright Data MCP
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
</investigation-activation>
|
|
138
|
+
|
|
139
|
+
## Rules
|
|
140
|
+
- ALWAYS run diagnose.py first to know what tools are available
|
|
141
|
+
- ALWAYS run Google dorks and French registries (Pappers, Societe.com) â they are FREE
|
|
142
|
+
- ALWAYS check enrichment databases (RocketReach, ContactOut) for phone numbers
|
|
143
|
+
- Spend â€$0.50 without asking â ASK user permission above that
|
|
144
|
+
- Assign confidence grades to EVERY fact (A/B/C/D)
|
|
145
|
+
- Never fabricate data â only report verified findings
|
|
146
|
+
- Escalate from freeâpaid, fastâdeep
|
|
147
|
+
- Save dossiers to `{project-root}/recherches/personnes-physiques/` or `personnes-morales/`
|