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.
- package/CHANGELOG.md +59 -0
- package/README.md +46 -26
- package/SECURITY.md +1 -1
- package/osint-agent-package/agents/osint-investigator.md +3 -3
- package/osint-agent-package/skills/bmad-osint-investigate/osint/SKILL.md +51 -51
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/content-extraction.md +7 -7
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/platforms.md +2 -2
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/tools.md +31 -41
- package/package.json +24 -5
- package/readme-international/README.de.md +46 -26
- package/readme-international/README.es.md +47 -27
- package/readme-international/README.fr.md +46 -26
- package/src/bmad-plus/agents/agent-maker/SKILL.md +39 -14
- package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +5 -1
- package/src/bmad-plus/data/role-triggers.yaml +34 -0
- package/src/bmad-plus/module-help.csv +2 -0
- package/src/bmad-plus/module.yaml +26 -4
- package/src/bmad-plus/packs/pack-animated/animated-website-agent.md +40 -14
- package/src/bmad-plus/packs/pack-animated/templates/animated-website-workflow.md +15 -12
- package/src/bmad-plus/packs/pack-backup/backup-agent.md +2 -1
- package/src/bmad-plus/packs/pack-backup/templates/backup-workflow.md +2 -0
- package/src/bmad-plus/packs/pack-design/SKILL.md +72 -0
- package/src/bmad-plus/packs/pack-design/bmad-skill-manifest.yaml +13 -0
- package/src/bmad-plus/packs/pack-design/design-engine.md +126 -0
- package/src/bmad-plus/packs/pack-design/intake.yaml +105 -0
- package/src/bmad-plus/packs/pack-memory/zecher-agent.md +1 -1
- package/src/bmad-plus/packs/pack-shield/README.md +1 -1
- package/src/bmad-plus/packs/pack-shield/SKILL.md +3 -3
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/pci-dss-agent.md +1 -1
- package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +2 -2
- package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +7 -0
- package/src/bmad-plus/skills/bmad-plus-intake/SKILL.md +87 -0
- package/src/bmad-plus/skills/bmad-plus-intake/ref/intake-format.md +112 -0
- package/src/bmad-plus/skills/bmad-plus-parallel/SKILL.md +18 -0
- package/src/bmad-plus/skills/bmad-plus-swarm/SKILL.md +115 -0
- package/src/bmad-plus/skills/bmad-plus-swarm/ref/definition.md +188 -0
- package/tools/build/adapters.config.js +3 -1
- package/tools/build/generate-adapters.js +26 -2
- package/tools/build/generate.js +269 -7
- package/tools/build/intake-contract.js +522 -0
- package/tools/cli/bmad-plus-cli.js +2 -0
- package/tools/cli/commands/install.js +45 -11
- package/tools/cli/commands/intake.js +124 -0
- package/tools/cli/commands/nexus.js +2 -1
- package/tools/cli/commands/review.js +1 -1
- package/tools/cli/commands/swarm.js +119 -0
- package/tools/cli/commands/uninstall.js +17 -0
- package/tools/cli/commands/update.js +30 -1
- package/tools/cli/i18n.js +50 -30
- package/tools/cli/lib/intake.js +202 -0
- package/tools/cli/lib/pack-copy.js +95 -5
- package/tools/cli/lib/packs.js +102 -12
- package/tools/cli/lib/review.js +2 -1
- package/tools/cli/lib/swarm-deal.js +116 -0
- package/tools/cli/lib/swarm-defaults.js +6 -0
- package/tools/cli/lib/swarm-tally.js +195 -0
- package/tools/cli/lib/swarm-validate.js +589 -0
- package/tools/cli/lib/swarm.js +712 -0
- package/tools/cli/lib/update-dispatch.js +10 -2
- 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
|
-
[](https://www.npmjs.com/package/bmad-plus)
|
|
4
4
|
|
|
5
|
-
**Version 0.
|
|
5
|
+
**Version 0.23.1** · Node.js `>=20.0.0` · MIT
|
|
6
6
|
|
|
7
|
-
|
|
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.
|
|
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 |
|
|
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.
|
|
187
|
+
## What’s new in 0.23.1
|
|
175
188
|
|
|
176
|
-
|
|
189
|
+
A truer site, steadier commands
|
|
177
190
|
|
|
178
|
-
|
|
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
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
-
|
|
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
|
-
**
|
|
218
|
-
- **
|
|
219
|
-
- **
|
|
220
|
-
- **
|
|
221
|
-
|
|
222
|
-
**
|
|
223
|
-
- **
|
|
224
|
-
- **
|
|
225
|
-
|
|
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
|
|
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 (
|
|
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:
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
91
|
-
- `perplexity.
|
|
92
|
-
- `tavily.
|
|
93
|
-
- `exa.
|
|
94
|
-
- `
|
|
95
|
-
- `
|
|
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.
|
|
99
|
-
- `run
|
|
100
|
-
Quick answer: `
|
|
101
|
-
Export: `
|
|
102
|
-
- `jina.
|
|
103
|
-
- `parallel.
|
|
104
|
-
- `brightdata.
|
|
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
|
-
|
|
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
|
-
|
|
119
|
+
python3 scripts/tavily.py search "<Name> <context>"
|
|
120
120
|
# Exa — семантический поиск + company/people research
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
133
|
-
|
|
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
|
-
|
|
142
|
+
python3 scripts/apify.py linkedin "<url>"
|
|
143
143
|
# Instagram
|
|
144
|
-
|
|
144
|
+
python3 scripts/apify.py instagram "<handle>"
|
|
145
145
|
# Facebook, заблокированные сайты
|
|
146
|
-
|
|
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
|
-
|
|
155
|
+
python3 scripts/perplexity.py deep "<detailed research prompt about Name>"
|
|
156
156
|
# Exa Deep Research
|
|
157
|
-
|
|
157
|
+
python3 scripts/exa.py deep "<detailed prompt>"
|
|
158
158
|
# Parallel AI Deep Search
|
|
159
|
-
|
|
159
|
+
python3 scripts/parallel.py search "<detailed query>"
|
|
160
160
|
# Jina DeepSearch
|
|
161
|
-
|
|
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 `
|
|
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
|
-
|
|
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
|
-
|
|
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: `
|
|
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.
|
|
311
|
-
- Instagram: `apify.
|
|
312
|
-
- Instagram deep: `
|
|
313
|
-
- Facebook personal: `brightdata.
|
|
314
|
-
- Facebook pages/groups: `
|
|
315
|
-
- TikTok: `
|
|
316
|
-
- TikTok discovery: `
|
|
317
|
-
- YouTube: `
|
|
318
|
-
- Telegram channels: `web_fetch t.me/s/{channel}` → `jina.
|
|
319
|
-
- Twitter/X: `
|
|
320
|
-
- Google Maps (businesses): `
|
|
321
|
-
- Contact enrichment: `
|
|
322
|
-
- Any site: `jina.
|
|
323
|
-
|
|
324
|
-
**run
|
|
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.
|
|
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.
|
|
471
|
-
- **Apify actor dead/changed**: check `apify.
|
|
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.
|
|
473
|
-
- **No social media found**: person may use pseudonyms. Search by email, phone, or company employee page. Search Apify store: `
|
|
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.
|
package/osint-agent-package/skills/bmad-osint-investigate/osint/references/content-extraction.md
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
73
|
+
python3 scripts/jina.py read "<blog-url>"
|
|
74
74
|
# Crawl multiple pages
|
|
75
|
-
|
|
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.
|
|
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.
|
|
80
|
+
- Exa: `exa.py search "<Name> podcast episode"`
|
|
81
81
|
|
|
82
82
|
**Key signals:**
|
|
83
83
|
- Personal questions from host → origin story, failures, mentors
|