bmad-plus 0.22.0 → 0.23.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.
Files changed (60) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +46 -26
  3. package/SECURITY.md +1 -1
  4. package/osint-agent-package/agents/osint-investigator.md +3 -3
  5. package/osint-agent-package/skills/bmad-osint-investigate/osint/SKILL.md +51 -51
  6. package/osint-agent-package/skills/bmad-osint-investigate/osint/references/content-extraction.md +7 -7
  7. package/osint-agent-package/skills/bmad-osint-investigate/osint/references/platforms.md +2 -2
  8. package/osint-agent-package/skills/bmad-osint-investigate/osint/references/tools.md +31 -41
  9. package/package.json +24 -5
  10. package/readme-international/README.de.md +46 -26
  11. package/readme-international/README.es.md +47 -27
  12. package/readme-international/README.fr.md +46 -26
  13. package/src/bmad-plus/agents/agent-maker/SKILL.md +39 -14
  14. package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +5 -1
  15. package/src/bmad-plus/data/role-triggers.yaml +34 -0
  16. package/src/bmad-plus/module-help.csv +2 -0
  17. package/src/bmad-plus/module.yaml +26 -4
  18. package/src/bmad-plus/packs/pack-animated/animated-website-agent.md +40 -14
  19. package/src/bmad-plus/packs/pack-animated/templates/animated-website-workflow.md +15 -12
  20. package/src/bmad-plus/packs/pack-backup/backup-agent.md +2 -1
  21. package/src/bmad-plus/packs/pack-backup/templates/backup-workflow.md +2 -0
  22. package/src/bmad-plus/packs/pack-design/SKILL.md +72 -0
  23. package/src/bmad-plus/packs/pack-design/bmad-skill-manifest.yaml +13 -0
  24. package/src/bmad-plus/packs/pack-design/design-engine.md +126 -0
  25. package/src/bmad-plus/packs/pack-design/intake.yaml +105 -0
  26. package/src/bmad-plus/packs/pack-memory/zecher-agent.md +1 -1
  27. package/src/bmad-plus/packs/pack-shield/README.md +1 -1
  28. package/src/bmad-plus/packs/pack-shield/SKILL.md +3 -3
  29. package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/pci-dss-agent.md +1 -1
  30. package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +2 -2
  31. package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +7 -0
  32. package/src/bmad-plus/skills/bmad-plus-intake/SKILL.md +87 -0
  33. package/src/bmad-plus/skills/bmad-plus-intake/ref/intake-format.md +112 -0
  34. package/src/bmad-plus/skills/bmad-plus-parallel/SKILL.md +18 -0
  35. package/src/bmad-plus/skills/bmad-plus-swarm/SKILL.md +115 -0
  36. package/src/bmad-plus/skills/bmad-plus-swarm/ref/definition.md +188 -0
  37. package/tools/build/adapters.config.js +3 -1
  38. package/tools/build/generate-adapters.js +26 -2
  39. package/tools/build/generate.js +269 -7
  40. package/tools/build/intake-contract.js +522 -0
  41. package/tools/cli/bmad-plus-cli.js +2 -0
  42. package/tools/cli/commands/install.js +45 -11
  43. package/tools/cli/commands/intake.js +124 -0
  44. package/tools/cli/commands/nexus.js +2 -1
  45. package/tools/cli/commands/review.js +1 -1
  46. package/tools/cli/commands/swarm.js +119 -0
  47. package/tools/cli/commands/uninstall.js +17 -0
  48. package/tools/cli/commands/update.js +30 -1
  49. package/tools/cli/i18n.js +50 -30
  50. package/tools/cli/lib/intake.js +202 -0
  51. package/tools/cli/lib/pack-copy.js +95 -5
  52. package/tools/cli/lib/packs.js +102 -12
  53. package/tools/cli/lib/review.js +2 -1
  54. package/tools/cli/lib/swarm-deal.js +116 -0
  55. package/tools/cli/lib/swarm-defaults.js +6 -0
  56. package/tools/cli/lib/swarm-tally.js +195 -0
  57. package/tools/cli/lib/swarm-validate.js +589 -0
  58. package/tools/cli/lib/swarm.js +712 -0
  59. package/tools/cli/lib/update-dispatch.js +10 -2
  60. package/tools/cli/lib/update-transaction.js +9 -6
package/CHANGELOG.md CHANGED
@@ -5,6 +5,65 @@ All notable changes to BMAD+ will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.23.1] - 2026-10-19
9
+
10
+ ### Added
11
+
12
+ - **Documentation, in four languages.** The website now carries 52 reference and guide pages for each of English, French, Spanish and German (`/docs/<section>/<page>/`, with a Markdown mirror per page): the ten packs and their agents, every CLI command with its flags, exit codes and errors, `config.yaml`, the project layout, the adapters, the install, update and uninstall lifecycle, intake, swarms, Nexus, memory, review and acceptance, data handling, trust and ownership, a glossary, a FAQ and troubleshooting. Pages are data (`website/docs-pages/<id>.js`), checked by a validator (blocks, links, anchors, example ids), rendered with a sidebar, breadcrumbs, previous and next links, an on-this-page list, search and a copy button on every command, and indexed in the sitemap, `llms.txt`, `llms-full.txt` and per-language search files. The earlier single guide at `/docs/` is unchanged.
13
+ - **A rebuilt landing page** (all four languages): the story in five moves, the ten packs, a searchable roster of the 48 agents, ask-first intake and swarms, the CLI, supported tools, trust and data handling, and a video player that appears only when a presentation video is published. Counts come from the registry at build time (`website/registry-facts.js`), not from typed numbers; the page respects `prefers-reduced-motion` and `prefers-color-scheme`.
14
+ - **Six presentation videos** (`overview`, `ask-then-swarm`, `ten-packs`, `atelier-design`, `install-and-keep-memory`, `nexus-parallel`; between 51 and 83 seconds each) with English and French narration, captions and transcripts in English, French, Spanish and German, shown on the landing and on the documentation pages that cover the same topic. `website/media/manifest.json` describes them; a video is rendered only when its poster and a source file exist, and only manifest-referenced files are deployed. The terminal footage in them is replayed from real command transcripts (19 silent clips in `website/media/screencasts/`, renderer `tools/media/screencast/`); the swarm tallies on screen are demo data and say so. Assembly notes: `website/media/BUILD.md`.
15
+ - Website checks: `check-docs.js` (the registry and every page), `check-browser-docs.js` (Playwright and axe on the documentation) and unit suites for the docs framework and the landing; `check-browser.js --bundled` runs the Chromium that ships with Playwright.
16
+ - **A seventh video, the case study** ("AI said done. Was it?", English and French voice, four caption languages, described transcripts): kinetic typography, three generated 3D clips with a moving camera, four terminal clips recorded from the published 0.23.0 package, a synthesised sound design and a 9:16 cut for social networks (not shipped). The assembler gains per-shot hard cuts, ASS animation presets, a progress bar and sound events (`website/media/tools/fx.js`, `scripts/<id>.fx.json`).
17
+
18
+ ### Changed
19
+
20
+ - **npm description and keywords.** The description now names the ten packs, intake, swarms under a budget, safe updates and the seven AI coding tools; keywords cover the supported tools and the main capabilities.
21
+ - **README credits.** The credits ledger separates what Laurent Rochetta wrote (Core extensions, Dev Studio, Maker, Design, Memory, SEO, Backup, Animated), what derives from BMAD-METHOD (Core personas) and what is adapted from other open-source projects (Shield, OSINT, Karpathy guardrails). Dev Studio is credited as original BMAD+ instructions with a lineage clause. The README and its French, Spanish and German mirrors move together; the measured test count is 1896.
22
+ - **Mobile performance of the landing, after the rebuild had cost it.** The described transcripts (44 KB of the page) are published as their own small pages and fetched on first open, with a link as the no-script fallback; every media URL is content-hashed and served `immutable`; the six gallery posters load as their player nears the viewport and all posters are 800 px wide instead of 1280 px (94 KB to 46 KB); the landing loads one stylesheet instead of two. Measured with Lighthouse (Moto G Power, slow 4G): the landing HTML drops from 200 KB to 158 KB and the first load from 313 KB to 181 KB. The documentation search form no longer shifts the layout when script reveals it (layout shift 0.06 to 0.08 on every documentation page, now 0).
23
+ - **HTML is served compressible.** The `no-transform` directive is gone from the HTML routes: it kept Cloudflare from compressing the pages (the 200 KB landing reached phones raw) and cost the mobile performance score. The email-address protection it also gave is now enforced by construction: `check-search` fails the build on any `@` in page text outside `<!--email_off-->`, and `check-search --live` accepts Cloudflare dropping the markers but fails on an HTML page that arrives uncompressed.
24
+ - **`review scope --workspace` defaults its base to `HEAD`** (it was `HEAD~1`, which failed on a one-commit repository and pulled the last commit into a review of uncommitted work). An explicit `--base` still wins; without `--workspace` the default is unchanged.
25
+ - The publication candidate check now carries the documentation framework and every page module (`CANDIDATE_WEBSITE_FILES`, `website/docs-pages/`), and its Node tests include the docs suites.
26
+
27
+ ### Fixed
28
+
29
+ - **Shipped instructions that named things that do not exist.** The Animated pack extracts frames with the documented FFmpeg commands instead of a `scripts/extract_frames.py` the npm package never contained, and Google Fonts is an explicit, disclosed choice for a generated site (system fonts by default). Shield documents the installer flag `--packs`. The installer's getting-started guide names commands that exist (`/seo full`, `/backup`, the Animated activation phrase) in every language. The Maker integration guide is registry-first (`registry.yaml`, `npm run build`, `generate-adapters --adopt`).
30
+ - **OSINT instructions call the scripts the pack ships** (`apify.py run`, `volley.py search|merge`, `status`) instead of `.sh` wrappers that do not exist, and the Twitter script that was never shipped is dropped. No OSINT key is required: each script checks only its own key, one key from any provider is enough, and `optional_keys` lists every key the scripts read.
31
+ - **Zecher scan depth** is 4, as `bmad-plus scan` declares.
32
+ - **A plain `npx bmad-plus update` no longer installs an older release in silence.** `npx` runs a cached or project-local copy before it asks the registry, so the update installed that copy's version (a 0.22.0 cache installed 0.22.0 while 0.23.0 was published). `update` now asks the registry through the existing update check (cached, off when the project policy is `off`) and, when the copy it runs is older than the published release, warns and names `npx bmad-plus@latest update` and `update --latest`. The README, the installer's closing guide, the generated adapter notes and the `update` reference page give `npx bmad-plus@latest update`. A copy that is already old cannot learn this: run `npx bmad-plus@latest update` once.
33
+ - **One refusal for an `--auto` update the policy does not allow.** `update --auto` and `update --latest --auto` both fail with `Update refused: automatic-updates-not-authorized.`; the legacy-inventory and local-conflict refusals use the same `Update refused:` form instead of `Automatic update refused:`.
34
+ - **`_bmad/config.yaml` is plain YAML under every supported js-yaml.** The installer no longer passes `forceQuotes`, which js-yaml 5.2.x answers with tagged scalars (`!!bool 'true'`, `!!int '3'`); 5.5 wrote plain values, so the file differed with the parser that happened to be installed.
35
+ - **Nexus errors carry the `Nexus:` prefix once**, not `Nexus: Nexus:`.
36
+ - **The generated instruction files say what to do without a local CLI**: when npx cannot find `bmad-plus`, skip the version check without mentioning it (never install a CLI for it).
37
+ - **Shield names PCI DSS v4.0.1** in the pack README, the orchestrator table, the skill list, the agent header and the website listings, as the agent itself defaults to.
38
+ - **The swarm skills say three kinds** (`panel`, `jury`, `fanout`), as their tables list; a test keeps the number and the table together.
39
+ - **The Backup pack's Bash variants print the archive size**, as its rule and its PowerShell variants already did.
40
+ - **Shield counts 27 frameworks**, matching its 27 specialist agents (DPDPA joins the compliance tags); the pack list of the installer, the generated instruction files and the README now agree.
41
+ - **Content truth, after an independent review of the documentation.** Pages for packs, agents, concepts, reference, guides, security and the FAQ were re-checked against the source: replayed terminals and inline fixtures instead of invented output, real menu collisions, the registry-first Maker template, a plain `config.yaml`, one glossary applied in French, Spanish and German, and no duplicated example prompts. Commands run right after the first install use `npx bmad-plus`; the `--no-install` form is explained where it appears and states its prerequisite (`npm install --save-dev bmad-plus`).
42
+ - **Described transcripts for the six videos** (WCAG 1.2.3 and 1.2.5): beside the transcript, a second disclosure lists every shot with its start time, what the picture shows (commands, captions and burned-in titles quoted exactly, written from the extracted frames and the screencasts) and the narration heard from there, in English, French, Spanish and German. The files are generated by `website/media/tools/descriptions.js`, checked for drift by `descriptions.test.js`, rendered inline on the landing and in the documentation (and in the Markdown mirrors of the docs), and covered by the keyboard checks of `check-browser.js`. The Spanish and German narration scripts now match the corrected captions they sit beside.
43
+ - **Accessibility fixes** found by the same review: a skip link that lands on the page's `h1`, row headers on tables, named headings and landmarks, container-query layouts that hold at narrow widths, caption policy in `media.js`, and a dedicated browser check (`check-browser-a11y.js`) beside the axe runs.
44
+ - **French typography.** French pages (HTML, JSON-LD and Markdown mirrors) are typeset at build time: no-break space before `:`, narrow no-break space before `;`, `!`, `?` and around guillemets, and typographic apostrophes; code, URLs and English passages are left alone.
45
+ - **Captions re-cut.** All 24 VTT files are cut to at most 2 lines of 42 characters and 6 seconds per cue at phrase boundaries; the French captions are verbatim with the spoken narration (WCAG 1.2.2), and the manifest transcripts follow them. A site test compares captions with the narration scripts.
46
+ - **Re-recorded installer clips.** The pack picker in the `ten-packs` and `install-and-keep-memory` videos now shows Shield with 27 frameworks; the storyboards say the swarm tallies are demo data.
47
+
48
+ ## [0.23.0] - 2026-10-17
49
+
50
+ ### Added
51
+
52
+ - **Pack intake** (`bmad-plus intake check|plan|record|render`, skill `bmad-plus-intake`). A pack declares the questions it needs answered before it acts (`intake.yaml`: sections, kinds, must-haves with the risk of not knowing, defaults, the artifact each answer feeds). `plan` says what is still missing and the next batch to ask, must-haves first and a few at a time; `record` writes only what the user gave, marks what they do not know, and never invents; `render` writes the brief that becomes the contract for everything the pack does next. The build validates every declared intake with the same contract the CLI uses.
53
+ - **Swarm runtime** (`bmad-plus swarm init|briefs|check|save|tally|inspect|plan`, skill `bmad-plus-swarm`). A pack declares a swarm (a panel dealt deterministically from a profile, a jury of listed lenses, or a fanout of units with disjoint write scopes); the CLI deals the cards under a seed, renders one brief per unit, validates each sub-agent's answer file, tallies rates, counts, verbatim quotes and numbers over valid answers only, and exports a fanout as a durable Nexus plan. A new `swarm` block in `_bmad/config.yaml` sets the budget of sub-agents a run may use before the host asks (26 by default) and keeps paid media generation out of any budget. The host spawns the sub-agents; the CLI never calls a model and never answers for a unit.
54
+ - **Skill packs in the registry.** `uses_skills` names the skills an agent drives (rendered on its roster line as `drives:`); `external_module` takes a pack's skills from a pinned npm package the installer copies into `.agents/skills/` with a version check; `pipelines` declares ordered workflow or agent steps with a checkpoint gate each, rendered step by step in the generated instructions; `intake` names the pack's intake file. All four are validated at build time.
55
+ - **Design pack (Atelier).** The design engine published as `design-skill` (three skills: `design`, `design-review`, `redesign`, with their reference modules) joins every installation as a referenced package, driven by the Atelier persona through an intake first. The pack ships a sealed evaluation, a shipping test and its trigger block; `pack-animated` stays until the brand-site pack supersedes it.
56
+ - **Trigger gate** (`npm run check:triggers`, Platform workflow). `role-triggers.yaml` may only name Core agents, pack personas and declared pipelines; a role needs patterns, and a pattern repeated within one agent is refused.
57
+
58
+ ### Changed
59
+
60
+ - Nexus runs a pack's declared pipeline after its intake and runs swarms through `bmad-plus swarm` within the configured budget; autopilot's Discovery starts with the intake of every pack involved. The generated instructions tell an agent to read the `SKILL.md` of every skill it drives before acting.
61
+ - `bmad-plus install` lists every selected pack's files before writing any, so an unresolvable external module leaves the project untouched.
62
+
63
+ ### Fixed
64
+
65
+ - `bmad-plus uninstall` removes the skills copied from an external module (found by the 0.23.0 acceptance run: the three Atelier skills stayed in `.agents/skills/` after uninstall). Edited copies stay, as for every other managed file, and nothing is removed when the package can no longer be compared.
66
+
8
67
  ## [0.22.0] - 2026-09-29
9
68
 
10
69
  ### Added
package/README.md CHANGED
@@ -1,15 +1,17 @@
1
1
  # BMAD+
2
2
 
3
- [![Version](https://img.shields.io/badge/version-0.22.0-blue)](https://www.npmjs.com/package/bmad-plus)
3
+ [![Version](https://img.shields.io/badge/version-0.23.1-blue)](https://www.npmjs.com/package/bmad-plus)
4
4
 
5
- **Version 0.22.0** · Node.js `>=20.0.0` · MIT
5
+ **Version 0.23.1** · Node.js `>=20.0.0` · MIT
6
6
 
7
- Project-local AI development workflows with clear roles, shared context, safe updates and coding-tool adapters
7
+ Ten packs of project-local AI roles and workflows (design, SEO, GRC, OSINT, memory) with ask-first intake, swarms under a budget, safe updates and adapters for seven AI coding tools
8
8
 
9
9
  [Website](https://bmad-plus.rochetta.fr/) · [Get started](https://bmad-plus.rochetta.fr/docs/#start) · [Examples](https://bmad-plus.rochetta.fr/docs/#examples) · [What’s new](https://bmad-plus.rochetta.fr/docs/#news)
10
10
 
11
11
  BMAD+ installs project instructions, roles and workflows for your existing AI coding tool. Default execution is host-managed: your tool supplies the model, permissions, command execution and any parallel-agent capability. Nexus can also launch an explicitly planned local command or Codex CLI process under a foreground supervisor, record its result and require independent checks before acceptance. Host permissions still apply; there is no background scheduler or universal host lifecycle integration. Model subscriptions and API access are separate.
12
12
 
13
+ BMAD+ ships ten packs. Ask first: `bmad-plus intake` asks a pack’s questions a few at a time, proposes defaults, records what you do not know and renders the brief the pack then works from. Swarms: `bmad-plus swarm` deals simulated units, briefs one sub-agent each, validates every answer and counts only the valid ones, within a budget you set. Atelier, the design engine of the Design pack, builds, audits and redesigns interfaces under checkable rules.
14
+
13
15
  Adapters: Claude Code, Gemini CLI, Antigravity, Cursor, Codex CLI, OpenCode, Aider.
14
16
 
15
17
  ## Get started
@@ -35,7 +37,7 @@ Run the installer. Select the adapters for the AI tools you use and the packs yo
35
37
  **In your project terminal:**
36
38
 
37
39
  ```sh
38
- npx bmad-plus@0.22.0 install
40
+ npx bmad-plus@0.23.1 install
39
41
  ```
40
42
 
41
43
  The installer creates the agent instructions, shared project spine and selected tool adapters. Optional packs may need additional runtimes or API access.
@@ -93,11 +95,12 @@ Read the changes and test results. The assistant follows the permissions and cap
93
95
  | OSINT | Investigation workflows for gathering public information and assessing sources. |
94
96
  | Maker | A workflow to design, validate and package your own BMAD+ agents. |
95
97
  | Shield | Specialized compliance and governance workflows, including GDPR and ISO 27001. |
96
- | SEO | Technical scanning, content analysis and search optimization workflows with supporting tools. |
98
+ | SEO | Classic SEO and GEO, visibility in AI-generated answers: technical inspection and performance (Scout), content quality, structured data and AI-search readiness (Judge), scoring, strategy and reporting (Chief). |
97
99
  | Memory | Project notes, decision records and session handoffs that preserve useful context. |
98
100
  | Dev Studio | Specialized roles and workflows for product planning, design, engineering and documentation. |
99
101
  | Backup | Instructions and utilities for timestamped backups, restoration and rotation. |
100
102
  | Animated | A focused workflow for creating video-driven scrolling websites. |
103
+ | Design | Atelier, the design engine: build, audit and redesign interfaces under checkable rules, with an intake first. |
101
104
 
102
105
  ## Examples
103
106
 
@@ -151,6 +154,16 @@ Zecher, update this project’s memory from the changes and checks we actually c
151
154
 
152
155
  Expected result: a concise current context, a dated session handoff and a restart prompt that identifies the next unfinished task.
153
156
 
157
+ ### Design a screen with Atelier
158
+
159
+ Use with the optional Design pack installed. Atelier asks its questions first, then follows checkable rules.
160
+
161
+ ```text
162
+ Atelier, run the design read for the invoice list of my app, build the screen, and end with the pre-flight verdict.
163
+ ```
164
+
165
+ Expected result: the recorded design read, the screen with every state covered, and the pre-flight verdict quoted as the last line.
166
+
154
167
  ### Read a test run without guessing
155
168
 
156
169
  Use when a person has completed or stopped an acceptance run.
@@ -171,18 +184,18 @@ Read AGENTS.md and the available project memory. Summarize the last verified sta
171
184
 
172
185
  Expected result: a short, evidence-based restart. Project notes are useful context and still need to be checked against the current work.
173
186
 
174
- ## What’s new in 0.22.0
187
+ ## What’s new in 0.23.1
175
188
 
176
- What leaves your machine, declared and checked
189
+ A truer site, steadier commands
177
190
 
178
- BMAD+ now declares every way it sends data or starts a process, and its CI refuses anything undeclared. The recipe page and the SEO report load nothing from other sites, OSINT calls are HTTPS-only, and Shield gains an evidence-bound assurance case and an AI processing register. Nothing changes in how you install or update.
191
+ The documentation site is rebuilt in four languages with seven videos. Several commands now behave exactly as their pages say: refusals read the same everywhere, a workspace review starts from HEAD, and the config file is plain YAML. Installing and updating work as before.
179
192
 
180
- - The registry states what BMAD+ sends, to whom, when and with which consent; SECURITY.md shows it and the installed agent instructions summarise it. A build check fails when a network call or a started process is not declared. BMAD+ has no telemetry, and the update check can be turned off.
181
- - The acceptance page no longer loads Google Fonts or anything from another site, so opening it tells no one you did. The build refuses a page that would, and a real browser checks every request of a run. The SEO HTML report opens offline too.
182
- - The Google API key of the SEO pack travels in a request header, never in a URL, and is hidden from error messages. OSINT provider calls refuse anything but HTTPS and never follow a redirect to another host.
183
- - SEO screenshots reach only the address that was checked: Chromium resolves nothing else, and redirects or resources pointing elsewhere are blocked and listed.
184
- - Shield: bmad-plus assurance builds a security case whose evidence can only be a check that actually ran, recorded in a tamper-evident ledger; bmad-plus ai-register keeps a register of the AI tools a project uses and warns about any it has not recorded; six review rules name the compliance controls a change touches.
185
- - The MCP server closes SSE streams cleanly when a client leaves or the server stops, and accepts token dates with a time-zone offset.
193
+ - The website now carries 52 documentation pages, each in English, French, Spanish and German, a rebuilt landing page and seven presentation videos with captions and described transcripts, including a case study of how the site itself was rebuilt with a swarm of agents.
194
+ - An --auto update that the policy does not allow is refused with the same message everywhere: Update refused: automatic-updates-not-authorized. The refusals for a legacy ownership inventory and for local conflicts use the same Update refused: form.
195
+ - bmad-plus review scope --workspace starts from HEAD when you give no --base, so reviewing uncommitted work no longer fails or drags in the last commit.
196
+ - _bmad/config.yaml is written as plain YAML (auto_role_activation: true, not a tagged !!bool 'true') whichever supported js-yaml version wrote it.
197
+ - The generated instruction files tell the assistant to skip the version check, without mentioning it, when npx finds no local copy of bmad-plus; Nexus errors carry the Nexus: prefix once instead of twice.
198
+ - Shield names PCI DSS v4.0.1 everywhere, the swarm skills say there are three kinds, the Backup pack’s Bash variant prints the archive size like its PowerShell variant, and the npm description, keywords and README credits are refreshed.
186
199
 
187
200
  ## Version History
188
201
 
@@ -190,9 +203,9 @@ These dates identify reviewed CHANGELOG notes, not npm publication dates. The we
190
203
 
191
204
  | Version | Release-notes date | Reviewed summary |
192
205
  | --- | --- | --- |
206
+ | 0.23.1 | 2026-10-19 | The documentation site is rebuilt in four languages with seven videos. Several commands now behave exactly as their pages say: refusals read the same everywhere, a workspace review starts from HEAD, and the config file is plain YAML. Installing and updating work as before. |
207
+ | 0.23.0 | 2026-10-17 | A pack now declares the questions it needs answered before it acts, and Nexus can run a swarm of sub-agents, a simulated panel or a jury, within a budget you set. Atelier, the design engine, joins as the tenth pack. Installing and updating work as before. |
193
208
  | 0.22.0 | 2026-09-29 | BMAD+ now declares every way it sends data or starts a process, and its CI refuses anything undeclared. The recipe page and the SEO report load nothing from other sites, OSINT calls are HTTPS-only, and Shield gains an evidence-bound assurance case and an AI processing register. Nothing changes in how you install or update. |
194
- | 0.21.0 | 2026-09-28 | A review now records why it stopped and what it used, writes a check a CI step can read, and resumes on the scope it sealed. The SEO fetcher connects only to addresses it has validated, and the MCP server moves to the official SDK on Python 3.12. Nothing changes in how you install or update. |
195
- | 0.20.0 | 2026-09-28 | bmad-plus review now hands the reviewer the rules that apply to the changed files, fixes the depth of a review before it starts, compares a review with an earlier one without calling an unchecked finding fixed, and masks credentials in what it writes. Nothing changes in how you install or update. |
196
209
 
197
210
  [Release history and update guide](https://bmad-plus.rochetta.fr/docs/#changelog) · [All published npm versions](https://www.npmjs.com/package/bmad-plus?activeTab=versions)
198
211
 
@@ -214,14 +227,21 @@ Translations: [Français](readme-international/README.fr.md) · [Español](readm
214
227
  **Creator**
215
228
  - **BMAD+** Created by [Laurent Rochetta](https://github.com/lrochetta) ([LinkedIn](https://www.linkedin.com/in/laurentrochetta/))
216
229
 
217
- **Original Packs** (created by Laurent Rochetta)
218
- - **Dev Studio** — 6 specialized SDLC agents: Miriam (business analyst), Huldah (tech writer), Yosef (product manager), Rachel (UX designer), Bezalel (system architect), Oholiab (senior engineer) — 38 workflows covering the full lifecycle from brainstorming to deployment
219
- - **SEO Engine** — 3 agents (Scout, Chief, Judge), 6-phase audit pipeline, PageSpeed perfection loop, Google Search Console & GA4 integrations
220
- - **Memory Pack** — Zecher agent for persistent cross-session brain with project scanner
221
-
222
- **External Sources & Inspirations**
223
- - **BMAD-METHOD** by [bmad-code-org](https://github.com/bmad-code-org/BMAD-METHOD) — Original multi-agent methodology (MIT)
224
- - **Shield GRC** — 27 compliance agents + 11 workflows adapted from [Hemant Naik's GRC skills](https://github.com/Sushegaad/Claude-Skills-Governance-Risk-and-Compliance) (MIT)
225
- - **OSINT Pipeline** based on [smixs/osint-skill](https://github.com/smixs/osint-skill) (MIT)
230
+ **Written by Laurent Rochetta**
231
+ - **Core extensions** — Autopilot, Parallel and Sync (0.1.0), the Nexus durable execution (0.15.0), human acceptance recipes (`uat`, 0.16.0), checkable reviews (0.19.0), and in 0.23.0 the pack intake (`bmad-plus intake`) and the swarm runtime (`bmad-plus swarm`) with the registry fields and the trigger gate that feed them
232
+ - **Dev Studio** — 6 specialized SDLC agents: Miriam (business analyst), Huldah (tech writer), Yosef (product manager), Rachel (UX designer), Bezalel (system architect), Oholiab (senior engineer) — 38 workflows, written as original BMAD+ instructions; the persona names and workflow lineage acknowledge BMAD-METHOD 6.6.0 (MIT). The pack ledger is `src/bmad-plus/packs/pack-dev-studio/upstream-sync.yaml`
233
+ - **Maker** — design, build, validate and package your own BMAD+ agents (2026-03-17)
234
+ - **Design** — Atelier, built on the author’s own public npm package [design-skill](https://github.com/lrochetta/design-skill) (MIT): the package supplies the three skills and their rules, BMAD+ adds the persona, the intake and the routing
235
+ - **Memory** — Zecher agent for persistent cross-session memory, with a project scanner and brain detection; the Karpathy guardrails it carries are adapted, see below
236
+ - **SEO** — 3 agents (Scout, Chief, Judge), 6-phase audit pipeline, PageSpeed perfection loop, Google Search Console & GA4 integrations; version 2.0 rebuilt the first SEO audit agent, written under Oveanet, and kept its PageSpeed playbook
237
+ - **Backup** and **Animated** — timestamped project backups, and video-driven scrolling websites; written under Oveanet, Laurent Rochetta’s company, and merged into BMAD+ in 0.2.0 (2026-03-18) together with the first SEO agent
238
+
239
+ **Derived from BMAD-METHOD** (MIT)
240
+ - **BMAD-METHOD** by [bmad-code-org](https://github.com/bmad-code-org/BMAD-METHOD) — original multi-agent methodology (MIT); BMAD+ is an independent derivative, not an official release
241
+ - **Core** — Atlas, Forge, Sentinel and Nexus: BMAD+ began as a fork of BMAD-METHOD 6.2.0 and was extended by Laurent Rochetta (see Core extensions above). The four personas follow its persona format and keep part of the wording of its analyst (Atlas), architect (Forge), QA (Sentinel) and scrum master (Nexus) personas; merging roles into one switchable persona and auto-activation are BMAD+ additions
242
+
243
+ **Adapted from other open-source projects**
244
+ - **Shield** — 27 compliance agents + 11 workflows adapted from [Hemant Naik's GRC skills](https://github.com/Sushegaad/Claude-Skills-Governance-Risk-and-Compliance) (MIT), with their 79 reference files; the GDPR and EU AI Act workflows also draw on the architecture of the [Lawve.ai](https://lawve.ai) skills catalog (Oliver Schmidt-Prietz). The orchestrator, cross-framework mapping, report templates, assurance case, AI processing register and compliance review rules are BMAD+ additions
245
+ - **OSINT** — pipeline and Python helpers adapted from [smixs/osint-skill](https://github.com/smixs/osint-skill) (MIT); the lawful-basis gate and the legal notice are BMAD+ additions
226
246
  - **Apify integration** — OSINT helper and inspiration from [Apify agent skills](https://github.com/apify/agent-skills) (upstream declares Apache-2.0; see notices)
227
- - **Karpathy Guardrails** — Memory Pack adaptation of [community guidelines by forrestchang](https://github.com/multica-ai/andrej-karpathy-skills), inspired by Andrej Karpathy (MIT declared upstream)
247
+ - **Karpathy Guardrails** — Memory adaptation of [community guidelines by forrestchang](https://github.com/multica-ai/andrej-karpathy-skills), inspired by Andrej Karpathy (MIT declared upstream)
package/SECURITY.md CHANGED
@@ -65,7 +65,7 @@ Security researchers who report valid vulnerabilities will be credited in the CH
65
65
  - Production npm dependencies are audited before each release; high and critical findings block publication
66
66
  - Maintained Python requirements are audited in CI and block publication on known findings
67
67
  - The private legacy MCP ML stack has a separate, visible advisory audit and migration backlog; its findings do not describe the npm runtime
68
- - Minimal dependency footprint (6 runtime dependencies)
68
+ - Minimal dependency footprint (7 runtime dependencies; `design-skill` contributes the skill files BMAD+ copies at install and a linker CLI that BMAD+ never runs)
69
69
  - Bundled source notices are included in [THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md); npm runtime dependency licenses are recorded in the release SBOM
70
70
 
71
71
  ### Distribution Security
@@ -17,7 +17,7 @@ You must fully embody this agent's persona and follow all activation instruction
17
17
  </step>
18
18
  <step n="3">Remember: user's name is {user_name}</step>
19
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>
20
+ <step n="5">Run the diagnostic script first if possible: python3 {project-root}/.agents/skills/bmad-osint-investigate/osint/scripts/diagnose.py — report available tools to the user</step>
21
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
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
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>
@@ -41,7 +41,7 @@ You must fully embody this agent's persona and follow all activation instruction
41
41
  <r>Display Menu items as the item dictates and in the order given.</r>
42
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
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>
44
+ <r>ALWAYS run diagnose.py BEFORE any investigation to know which tools/APIs are available</r>
45
45
  <r>FOLLOW the budget rules: spend ≤$0.50 without asking, ASK permission above that</r>
46
46
  <r>NEVER hardcode API tokens — always load from environment variables</r>
47
47
  <r>For each fact discovered, assign a confidence grade: A (3+ sources), B (2 sources), C (1 source), D (unverified)</r>
@@ -84,7 +84,7 @@ You must fully embody this agent's persona and follow all activation instruction
84
84
  <item cmd="FB or fuzzy match on facebook">[FB] 📘 Facebook Scrape: Extract Facebook profile data via Bright Data MCP (requires BRIGHTDATA_MCP_URL).</item>
85
85
  <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>
86
86
  <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>
87
- <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>
87
+ <item cmd="DG or fuzzy match on diagnose or diagnostic or tools">[DG] 🔧 Diagnose Tools: Run diagnose.py to check which APIs and tools are available.</item>
88
88
  <item cmd="PM or fuzzy match on party-mode" exec="skill:bmad-party-mode">[PM] Start Party Mode</item>
89
89
  <item cmd="DA or fuzzy match on exit, leave, goodbye or dismiss agent">[DA] Dismiss Agent</item>
90
90
  </menu>
@@ -83,25 +83,25 @@ All API keys via environment variables. Never hardcode tokens.
83
83
 
84
84
  ## Scripts
85
85
 
86
- Run from skill dir: `bash scripts/<name>.sh`.
86
+ Run from the skill directory (`.agents/skills/bmad-osint-investigate/osint/` once installed): `python3 scripts/<name>.py` (`python` on Windows).
87
87
  Each validates env vars, exits with descriptive error + URL to get the key.
88
88
 
89
89
  **Search & Research:**
90
- - `diagnose.sh` — run FIRST. Capability map of all tools.
91
- - `perplexity.sh` — `search <query>` | `sonar <query>` (AI answer) | `deep <query>` (deep research)
92
- - `tavily.sh` — `search <query>` (basic $0.005) | `deep <query>` (advanced) | `extract <url>`
93
- - `exa.sh` — `search <query>` | `company <name>` | `people <name>` | `crawl <url>` | `deep <prompt>`
94
- - `first-volley.sh "Name" "context"` — parallel search, all engines at once.
95
- - `merge-volley.sh <outdir>` — deduplicate and merge first-volley results.
90
+ - `diagnose.py` — run FIRST. Capability map of all tools.
91
+ - `perplexity.py` — `search <query>` | `sonar <query>` (AI answer) | `deep <query>` (deep research)
92
+ - `tavily.py` — `search <query>` (basic $0.005) | `deep <query>` (advanced) | `extract <url>`
93
+ - `exa.py` — `search <query>` | `company <name>` | `people <name>` | `crawl <url>` | `deep <prompt>`
94
+ - `volley.py search "Name" "context"` — parallel search, all engines at once.
95
+ - `volley.py merge <outdir>` — deduplicate and merge first-volley results.
96
96
 
97
97
  **Scraping:**
98
- - `apify.sh` — `linkedin <url>` | `instagram <handle>` | `run` | `results` | `store-search`
99
- - `run-actor.sh` — **universal Apify runner (55+ actors).** Embedded from [apify/agent-skills](https://github.com/apify/agent-skills).
100
- Quick answer: `bash scripts/run-actor.sh "actor/id" '{"input":"json"}'`
101
- Export: `bash scripts/run-actor.sh "actor/id" '{"input":"json"}' --output /tmp/out.csv`
102
- - `jina.sh` — `read <url>` | `search <query>` | `deepsearch <query>`
103
- - `parallel.sh` — `search <query>` | `extract <url>`
104
- - `brightdata.sh` — `scrape <url>` | `scrape-batch` | `search` | `search-geo <cc>` | `search-yandex`
98
+ - `apify.py` — `linkedin <url>` | `instagram <handle>` | `run` | `results` | `status` | `store-search`
99
+ - `apify.py run` — **universal Apify actor runner (55+ actors).**
100
+ Quick answer: `python3 scripts/apify.py run "actor/id" '{"input":"json"}'`
101
+ Export: `python3 scripts/apify.py run "actor/id" '{"input":"json"}' --output /tmp/out.csv`
102
+ - `jina.py` — `read <url>` | `search <query>` | `deepsearch <query>`
103
+ - `parallel.py` — `search <query>` | `extract <url>`
104
+ - `brightdata.py` — `scrape <url>` | `scrape-batch` | `search` | `search-geo <cc>` | `search-yandex`
105
105
 
106
106
  ## Research Escalation Flow
107
107
 
@@ -112,14 +112,14 @@ Each validates env vars, exits with descriptive error + URL to get the key.
112
112
  Запускай ВСЕ параллельно:
113
113
  ```bash
114
114
  # Perplexity Sonar — AI ответ с цитатами
115
- bash skills/osint/scripts/perplexity.sh sonar "Who is <Name>, <context>"
115
+ python3 scripts/perplexity.py sonar "Who is <Name>, <context>"
116
116
  # Brave Search — классический поиск
117
117
  web_search "<Name> <company> <role>"
118
118
  # Tavily — agent-optimized search с AI answer
119
- bash skills/osint/scripts/tavily.sh search "<Name> <context>"
119
+ python3 scripts/tavily.py search "<Name> <context>"
120
120
  # Exa — семантический поиск + company/people research
121
- bash skills/osint/scripts/exa.sh search "<Name> <context>"
122
- bash skills/osint/scripts/exa.sh people "<Name>"
121
+ python3 scripts/exa.py search "<Name> <context>"
122
+ python3 scripts/exa.py people "<Name>"
123
123
  ```
124
124
  → Получаешь: быстрые факты, ссылки, контекст.
125
125
  → Решение: достаточно? → Phase 6. Нужно больше? → Level 2.
@@ -129,8 +129,8 @@ bash skills/osint/scripts/exa.sh people "<Name>"
129
129
  ```bash
130
130
  # Читай найденные URL
131
131
  web_fetch "<url_from_perplexity>"
132
- bash skills/osint/scripts/jina.sh read "<url>"
133
- bash skills/osint/scripts/parallel.sh extract "<url>"
132
+ python3 scripts/jina.py read "<url>"
133
+ python3 scripts/parallel.py extract "<url>"
134
134
  ```
135
135
  → Получаешь: подтверждённые факты, cross-reference.
136
136
  → Совпадает? → дополняй досье. Нужно глубже? → Level 3.
@@ -139,11 +139,11 @@ bash skills/osint/scripts/parallel.sh extract "<url>"
139
139
  Подключай scraping для соцсетей:
140
140
  ```bash
141
141
  # LinkedIn
142
- bash skills/osint/scripts/apify.sh linkedin "<url>"
142
+ python3 scripts/apify.py linkedin "<url>"
143
143
  # Instagram
144
- bash skills/osint/scripts/apify.sh instagram "<handle>"
144
+ python3 scripts/apify.py instagram "<handle>"
145
145
  # Facebook, заблокированные сайты
146
- bash skills/osint/scripts/brightdata.sh scrape "<url>"
146
+ python3 scripts/brightdata.py scrape "<url>"
147
147
  ```
148
148
  → Получаешь: структурированные профили, фото, связи.
149
149
 
@@ -152,13 +152,13 @@ bash skills/osint/scripts/brightdata.sh scrape "<url>"
152
152
  Запускай ВСЕ параллельно (30-60 сек каждый):
153
153
  ```bash
154
154
  # Perplexity Deep Research
155
- bash skills/osint/scripts/perplexity.sh deep "<detailed research prompt about Name>"
155
+ python3 scripts/perplexity.py deep "<detailed research prompt about Name>"
156
156
  # Exa Deep Research
157
- bash skills/osint/scripts/exa.sh deep "<detailed prompt>"
157
+ python3 scripts/exa.py deep "<detailed prompt>"
158
158
  # Parallel AI Deep Search
159
- bash skills/osint/scripts/parallel.sh search "<detailed query>"
159
+ python3 scripts/parallel.py search "<detailed query>"
160
160
  # Jina DeepSearch
161
- bash skills/osint/scripts/jina.sh deepsearch "<query>"
161
+ python3 scripts/jina.py deepsearch "<query>"
162
162
  ```
163
163
 
164
164
  **Правило:** Level 4 промпт должен быть РАЗВЁРНУТЫМ — включай всё что уже знаешь
@@ -198,7 +198,7 @@ The main agent is the coordinator — it does NOT scrape itself.
198
198
 
199
199
  ## Phase 0: Tooling Self-Check
200
200
 
201
- 1. Execute `bash skills/osint/scripts/diagnose.sh`.
201
+ 1. Execute `python3 scripts/diagnose.py`.
202
202
  2. Log available vs missing tools.
203
203
  3. Check internal tools: `tg.py` (Telegram history), `himalaya` (email), vault contacts.
204
204
  4. If Bright Data unavailable → Facebook and LinkedIn deep scrape limited. Inform user.
@@ -212,19 +212,19 @@ The main agent is the coordinator — it does NOT scrape itself.
212
212
  1. Parse user input. Extract identifiers: names, handles, URLs, companies, locations.
213
213
  2. **Perplexity fast pass:**
214
214
  ```bash
215
- bash skills/osint/scripts/perplexity.sh search "Who is <Name>, <context>"
215
+ python3 scripts/perplexity.py search "Who is <Name>, <context>"
216
216
  ```
217
217
  3. **Brave + Parallel in parallel:**
218
218
  ```bash
219
219
  web_search "<Name> <company>"
220
- bash skills/osint/scripts/first-volley.sh "Full Name" "context"
220
+ python3 scripts/volley.py search "Full Name" "context"
221
221
  ```
222
222
  4. **Review Perplexity citations** — fetch and verify top sources:
223
223
  ```bash
224
224
  web_fetch "<citation_url_1>"
225
225
  web_fetch "<citation_url_2>"
226
226
  ```
227
- 5. Parse & merge: `bash skills/osint/scripts/merge-volley.sh /tmp/osint-<timestamp>`.
227
+ 5. Parse & merge: `python3 scripts/volley.py merge /tmp/osint-<timestamp>`.
228
228
  6. Collect all identifiers into seed list. Deduplicate.
229
229
  7. Flag name collisions (common names → verify with company/location cross-reference).
230
230
  8. **Decision point:** enough context? → skip to Phase 4. Need social media? → Phase 2. Need deep dive? → Level 4 (deep research).
@@ -307,21 +307,21 @@ Read `references/platforms.md` ONLY when needing URL patterns or extraction sign
307
307
 
308
308
  Tool priority (primary → fallback). **If primary fails, switch immediately. Never retry same tool.**
309
309
 
310
- - LinkedIn: `apify.sh linkedin` → `brightdata.sh scrape` → `jina.sh read`
311
- - Instagram: `apify.sh instagram` → `brightdata.sh scrape`
312
- - Instagram deep: `run-actor.sh "apify/instagram-tagged-scraper"` (who tags them), `apify/instagram-comment-scraper` (sentiment)
313
- - Facebook personal: `brightdata.sh scrape` → none (only Bright Data works)
314
- - Facebook pages/groups: `run-actor.sh "apify/facebook-pages-scraper"` → `brightdata.sh scrape`
315
- - TikTok: `run-actor.sh "clockworks/tiktok-profile-scraper"` → `clockworks/tiktok-scraper` (comprehensive)
316
- - TikTok discovery: `run-actor.sh "clockworks/tiktok-user-search-scraper"` (find by keywords)
317
- - YouTube: `run-actor.sh "streamers/youtube-channel-scraper"` → `jina.sh read` → `brightdata.sh scrape`
318
- - Telegram channels: `web_fetch t.me/s/{channel}` → `jina.sh read`
319
- - Twitter/X: `python3 scripts/twitter.py tweet <url>` → `jina.sh read`
320
- - Google Maps (businesses): `run-actor.sh "compass/crawler-google-places"`
321
- - Contact enrichment: `run-actor.sh "vdrmota/contact-info-scraper"` (extract emails/phones from any URL)
322
- - Any site: `jina.sh read` → `brightdata.sh scrape`
323
-
324
- **run-actor.sh** = universal Apify runner (embedded, 55+ actors). See `references/tools.md` for full actor catalog.
310
+ - LinkedIn: `apify.py linkedin` → `brightdata.py scrape` → `jina.py read`
311
+ - Instagram: `apify.py instagram` → `brightdata.py scrape`
312
+ - Instagram deep: `apify.py run "apify/instagram-tagged-scraper"` (who tags them), `apify/instagram-comment-scraper` (sentiment)
313
+ - Facebook personal: `brightdata.py scrape` → none (only Bright Data works)
314
+ - Facebook pages/groups: `apify.py run "apify/facebook-pages-scraper"` → `brightdata.py scrape`
315
+ - TikTok: `apify.py run "clockworks/tiktok-profile-scraper"` → `clockworks/tiktok-scraper` (comprehensive)
316
+ - TikTok discovery: `apify.py run "clockworks/tiktok-user-search-scraper"` (find by keywords)
317
+ - YouTube: `apify.py run "streamers/youtube-channel-scraper"` → `jina.py read` → `brightdata.py scrape`
318
+ - Telegram channels: `web_fetch t.me/s/{channel}` → `jina.py read`
319
+ - Twitter/X: `jina.py read` (no dedicated Twitter script is shipped)
320
+ - Google Maps (businesses): `apify.py run "compass/crawler-google-places"`
321
+ - Contact enrichment: `apify.py run "vdrmota/contact-info-scraper"` (extract emails/phones from any URL)
322
+ - Any site: `jina.py read` → `brightdata.py scrape`
323
+
324
+ **apify.py run** = universal Apify runner (55+ actors). See `references/tools.md` for full actor catalog.
325
325
 
326
326
  Read `references/tools.md` ONLY when troubleshooting a failed tool.
327
327
 
@@ -339,7 +339,7 @@ If initial searches return unusually little for someone who should have a footpr
339
339
 
340
340
  1. **Wayback Machine:** `web_fetch "https://web.archive.org/web/2024*/target-url"` — deleted profiles, old bios
341
341
  2. **Google Cache:** `web_search "cache:domain.com/path"` — recently removed pages
342
- 3. **Yandex Cache:** `brightdata.sh search-yandex "Name"` — Yandex indexes CIS deeper and caches longer
342
+ 3. **Yandex Cache:** `brightdata.py search-yandex "Name"` — Yandex indexes CIS deeper and caches longer
343
343
  4. **Username variations:** try transliteration (Иванов → ivanov, ivanoff), birth year suffixes, company abbreviations
344
344
  5. **Reverse image search:** if photo found, check for other profiles using same avatar
345
345
  6. **Conference archives:** speaker bios often survive after profiles are deleted
@@ -467,10 +467,10 @@ If internal intelligence was used, add a separate **"из переписки"**
467
467
 
468
468
  - **All tools return empty**: target has minimal digital presence. Try Bright Data Yandex search (better for CIS region), search by company + role instead of name.
469
469
  - **Wrong person keeps appearing**: add company name, city, or role to all queries. Use quotes around full name.
470
- - **LinkedIn blocked**: use `brightdata.sh scrape` as primary instead of Apify.
471
- - **Apify actor dead/changed**: check `apify.sh store-search "linkedin scraper"` for alternatives. Actors on Apify are volatile — always have a Bright Data fallback.
472
- - **Depth Score stuck at 6-7**: likely missing press/media articles or internal intel. Search industry publications (AdIndex, Sostav, Forbes, Kommersant for Russian market). Try `jina.sh deepsearch`. Check Telegram history.
473
- - **No social media found**: person may use pseudonyms. Search by email, phone, or company employee page. Search Apify store: `bash scripts/apify.sh store-search "people search"`. If `mcpc` installed: `APIFY_TOKEN=$APIFY_API_TOKEN mcpc --json mcp.apify.com --header "Authorization: Bearer $APIFY_TOKEN" tools-call search-actors keywords:="people search" limit:=10`. Check Telegram contacts by phone.
470
+ - **LinkedIn blocked**: use `brightdata.py scrape` as primary instead of Apify.
471
+ - **Apify actor dead/changed**: check `apify.py store-search "linkedin scraper"` for alternatives. Actors on Apify are volatile — always have a Bright Data fallback.
472
+ - **Depth Score stuck at 6-7**: likely missing press/media articles or internal intel. Search industry publications (AdIndex, Sostav, Forbes, Kommersant for Russian market). Try `jina.py deepsearch`. Check Telegram history.
473
+ - **No social media found**: person may use pseudonyms. Search by email, phone, or company employee page. Search Apify store: `python3 scripts/apify.py store-search "people search"`. If `mcpc` installed: `APIFY_TOKEN=$APIFY_API_TOKEN mcpc --json mcp.apify.com --header "Authorization: Bearer $APIFY_TOKEN" tools-call search-actors keywords:="people search" limit:=10`. Check Telegram contacts by phone.
474
474
  - **TikTok scraper fails**: try `clockworks/free-tiktok-scraper` (free tier) as fallback. TikTok usernames often differ from other platforms — search by real name via `clockworks/tiktok-user-search-scraper`.
475
475
  - **Need emails from website**: use `vdrmota/contact-info-scraper` — it crawls the site and extracts all contact info.
476
476
  - **Rate limited (429)**: back off 5s, then 15s. Switch to fallback tool. Never retry immediately.
@@ -16,7 +16,7 @@ A person talking for 20 minutes on camera reveals more than 100 LinkedIn posts.
16
16
  ```bash
17
17
  # Search for channel
18
18
  web_search "site:youtube.com <Name> <context>"
19
- bash skills/osint/scripts/exa.sh search "<Name> youtube channel"
19
+ python3 scripts/exa.py search "<Name> youtube channel"
20
20
  ```
21
21
 
22
22
  ### Channel metadata
@@ -24,7 +24,7 @@ bash skills/osint/scripts/exa.sh search "<Name> youtube channel"
24
24
  # Fetch channel page - subscriber count, video count, about
25
25
  web_fetch "https://www.youtube.com/@<handle>"
26
26
  # Or channel page
27
- bash skills/osint/scripts/jina.sh read "https://www.youtube.com/@<handle>/about"
27
+ python3 scripts/jina.py read "https://www.youtube.com/@<handle>/about"
28
28
  ```
29
29
 
30
30
  ### Transcript extraction (CRITICAL)
@@ -33,12 +33,12 @@ Pick 3-5 most viewed or most recent videos. Extract transcripts:
33
33
  # Fetch video page - title, description, comments
34
34
  web_fetch "https://www.youtube.com/watch?v=<id>"
35
35
  # Get auto-generated transcript via Jina
36
- bash skills/osint/scripts/jina.sh read "https://www.youtube.com/watch?v=<id>"
36
+ python3 scripts/jina.py read "https://www.youtube.com/watch?v=<id>"
37
37
  ```
38
38
 
39
39
  If transcripts unavailable via fetch, try:
40
40
  ```bash
41
- bash skills/osint/scripts/brightdata.sh scrape "https://www.youtube.com/watch?v=<id>"
41
+ python3 scripts/brightdata.py scrape "https://www.youtube.com/watch?v=<id>"
42
42
  ```
43
43
 
44
44
  ### What to extract from YouTube:
@@ -60,7 +60,7 @@ bash skills/osint/scripts/brightdata.sh scrape "https://www.youtube.com/watch?v=
60
60
  Search for podcast appearances:
61
61
  ```bash
62
62
  web_search "<Name> podcast interview"
63
- bash skills/osint/scripts/exa.sh search "<Name> podcast episode guest"
63
+ python3 scripts/exa.py search "<Name> podcast episode guest"
64
64
  ```
65
65
 
66
66
  Podcast interviews are gold - the host asks personal questions.
@@ -70,9 +70,9 @@ Look for: origin story, career pivots, failures mentioned, mentors named.
70
70
 
71
71
  ```bash
72
72
  web_fetch "<personal-site>"
73
- bash skills/osint/scripts/jina.sh read "<blog-url>"
73
+ python3 scripts/jina.py read "<blog-url>"
74
74
  # Crawl multiple pages
75
- bash skills/osint/scripts/exa.sh crawl "<blog-url>"
75
+ python3 scripts/exa.py crawl "<blog-url>"
76
76
  ```
77
77
 
78
78
  Extract: writing style, topics, frequency, tone evolution over time.
@@ -59,7 +59,7 @@
59
59
 
60
60
  **Finding channels:**
61
61
  - Brave: `site:youtube.com "<Name>" channel`
62
- - Exa: `exa.sh search "<Name> youtube"`
62
+ - Exa: `exa.py search "<Name> youtube"`
63
63
  - Check LinkedIn/Instagram bios for YouTube links
64
64
 
65
65
  **Key signals:**
@@ -77,7 +77,7 @@ See `references/content-extraction.md`. 3-5 transcripts minimum when channel fou
77
77
 
78
78
  **Finding appearances:**
79
79
  - Brave: `"<Name>" podcast interview guest`
80
- - Exa: `exa.sh search "<Name> podcast episode"`
80
+ - Exa: `exa.py search "<Name> podcast episode"`
81
81
 
82
82
  **Key signals:**
83
83
  - Personal questions from host → origin story, failures, mentors