# Trust, ownership and licences

> Who wrote what, which licences apply, which files BMAD+ owns in your project and how it proves it, what update and uninstall keep, how OSINT is governed, and where the notices live.

Canonical: https://bmad-plus.rochetta.fr/docs/security/trust-and-ownership/
Language: en
BMAD+ version: 0.23.1
Documentation reviewed: 2026-10-19
Author: Laurent Rochetta
License: MIT

BMAD+ documentation › [Security and data](https://bmad-plus.rochetta.fr/docs/security/) › Trust, ownership and licences

Trusting a tool that edits your project comes down to a few questions with checkable answers. Whose work is this, and under which licence? Which files does the tool consider its own, and how does it tell them from yours? What does it keep when you update or remove it? What is deliberately restricted? This page answers each, with the file or command that lets you check.

<a id="who-wrote-what"></a>
## Who wrote what

BMAD+ is created by Laurent Rochetta. It is an independent community project derived from BMAD-METHOD (MIT) by BMad Code, LLC; it is not affiliated with, endorsed by or certified by BMad Code, LLC, and BMad, BMad Method and BMad Core are trademarks of BMad Code, LLC. The declared baseline is BMAD-METHOD v6.6.0. Inspiration and adapted material are credited where they are used, and the table separates what the project’s author wrote from what comes from elsewhere.

**Provenance of each part**

| Part | Origin | Terms |
| --- | --- | --- |
| BMAD+ code and Core agents | Written for BMAD+ by Laurent Rochetta, on the method of BMAD-METHOD v6.6.0 (multi-role agents derived from the upstream roles). | MIT, copyright 2026 Laurent Rochetta; BMAD-METHOD’s MIT notice is retained. |
| Dev Studio | The author’s rewrite of a BMAD-METHOD-derived set of roles: six personas and 38 workflows whose execution instructions are original BMAD+ adaptations, with the lineage acknowledged. Reviewing newer upstream ideas is separate from claiming that a whole upstream release is integrated. | MIT. |
| SEO, Backup, Animated | Created by the author, within his company Oveanet; the SEO base was extended into the three-agent SEO Engine of BMAD+. | MIT. |
| Maker | Written by the author. | MIT. |
| Memory (Zecher) | Written by the author; the memory architecture is inspired by his `_brain/` portfolio method. The four behavioural guardrails adapt the community guidelines of forrestchang (now hosted at multica-ai/andrej-karpathy-skills), inspired by Andrej Karpathy’s guidance. That inspiration does not imply authorship or endorsement by Andrej Karpathy. | The upstream declares MIT; no standalone LICENSE existed at the reviewed revision, and the notice says so without inventing a copyright line. |
| Shield | 27 compliance agents and 11 workflows adapted from Hemant Naik’s GRC skills. | MIT, copyright 2026 Hemant Naik, reproduced in the third-party notices. |
| OSINT | Pipeline and Python helpers based on smixs/osint-skill. The Apify integration is inspired by Apify’s agent skills. | MIT, copyright 2026 Serge Shima, for the OSINT skill. The Apify repository declares Apache-2.0 (an earlier README that called it MIT was corrected); the notices do not relicense the helper under Apache or imply an Apify subscription. |
| Design (Atelier) | The three skills come from `design-skill`, the author’s own npm package (github.com/lrochetta/design-skill), pinned at version 0.2.1; BMAD+ adds the persona, the intake and the routing. | MIT. |
| npm runtime dependencies | Seven packages: `@clack/prompts`, `commander`, `design-skill`, `fs-extra`, `js-yaml`, `picocolors`, `semver`. | Each keeps its own licence; they are recorded in the release’s CycloneDX SBOM. |

The full text of the licences and the review notes are in `THIRD-PARTY-LICENSES.md`, shipped in the npm package and in the repository at [github.com/lrochetta/BMAD-PLUS](https://github.com/lrochetta/BMAD-PLUS), next to `LICENSE` (MIT, copyright 2026 Laurent Rochetta). The notices describe bundled or adapted source material; they do not claim that every shipped file matches an upstream revision byte for byte.

<a id="owned-files"></a>
## Which files BMAD+ owns, and how it knows

Every file the installer writes is recorded with its SHA-256 hash in the manifest `_bmad/.bmad-plus-install.json` (a `fileInventory`). A file is BMAD+’s own as long as its bytes still match the recorded hash; once you edit it, it is yours. Adapters are tracked separately by a hash of their content with line endings normalised. This ownership inventory drives three behaviours: doctor reports differences, update preserves edited files, and uninstall removes only what is still byte-identical.

**The inventory as doctor reports it**

```text
$ npx bmad-plus doctor --json
{
  "schemaVersion": 1,
  "status": "ok",
  "versions": { "installed": "0.23.0", "cli": "0.23.0", "published": null },
  "inventory": { "status": "complete", "trackedFiles": 39 },
# Excerpt, reformatted onto fewer lines. `published` is always null: doctor never queries npm.
```

Output captured from a real run. Source: Replayed on a test server on 2026-10-18 with the 0.23.0 source (tools/cli/bmad-plus-cli.js) in a throwaway Git project

**What doctor says about a file**

| Check code | Level | Meaning |
| --- | --- | --- |
| `file.unchanged` | ok | The file still matches the recorded hash. |
| `file.modified` | warning | The file differs from the recorded hash: your edit is kept and reported. |
| `file.unowned` | warning | A file in a BMAD+ folder that the manifest does not list: yours. |
| `file.missing`, `file.unreadable` | error | A required file is gone or cannot be read. |
| `adapter.adopted`, `adapter.modified`, `adapter.unowned` | varies | The state of a tool adapter: BMAD+-owned, edited by you, or not BMAD+’s at all. |
| `manifest.valid`, `manifest.invalid` | ok / error | Whether the manifest can be read. Inventory status is `complete`, `incomplete`, `legacy` or `invalid`. |

<a id="preserved"></a>
## What is preserved, and when

**Preservation rules**

| Situation | What BMAD+ does |
| --- | --- |
| Installing again, same version | Only adds missing files, packs and tools. `_bmad/config.yaml` is merged: existing keys win, missing defaults are added, explicit wizard answers replace. |
| Installing a different version | Refused. A downgrade is refused; an upgrade goes through `update`. |
| Existing tool instructions (`CLAUDE.md`, `GEMINI.md`, ...) | A file you edited is preserved. A file you wrote yourself is preserved by an interactive install and by `update`; `install --yes` copies it to `<file>.bak` first, then replaces it. Legacy installer files are backed up as `<file>.bak`; `--tools none` leaves tool configuration untouched. |
| Update | Files changed since their recorded hash and unowned files are preserved and reported; files a version no longer ships are removed after a restorable backup; a receipt and backups are written under `.bmad/updates/<id>/`. |
| Corrupt manifest | Backed up as `_bmad/.bmad-plus-install.json.corrupt.bak`. |
| Memory files | `decisions.md`, `lessons.md` and `patterns.md` are never overwritten, `sessions/` never deleted, your edits to `identity.yaml` kept; only `autoconfig` rewrites `context.md` (see its page). |
| An existing brain | Linked, never copied or rewritten. |
| Links in the way | Writes and deletions refuse symlinks and junctions. |

<a id="uninstall"></a>
## What uninstall removes and what it keeps

Uninstall removes only the files BMAD+ owns: those byte-identical to what it shipped, the adapters whose hash matches and that carry the install marker, the skills copied from an external package such as `design-skill`, and the manifest. It removes empty folders it owned and never deletes recursively. It keeps `_bmad/config.yaml`, the project memory, `_bmad-output/`, files you edited and files it does not know. It refuses linked paths, and without a terminal it needs `--yes`. On a bad manifest it exits 1. The 0.23.0 acceptance run included this check: a witness note planted in `.agents/memory/` survived, and the copied design skills were gone.

**The uninstall of the acceptance run (installer output in French)**

```text
$ New-Item -ItemType Directory -Path .\demo-app\.agents\memory -Force
$ Set-Content -LiteralPath .\demo-app\.agents\memory\context.md -Value 'BMAD+ 0.23.0 memory witness' -Encoding utf8
$ npx bmad-plus uninstall --yes --directory .\demo-app
T   BMAD+ Uninstaller
•  BMAD+ v0.23.0 (installé le 2026-10-18)
•  Packs sélectionnés: core, design
o  ✅ BMAD+ supprimé (106 éléments)
—  La mémoire, les réglages et les fichiers inconnus ou modifiés ont été conservés.
$ Get-Content -LiteralPath .\demo-app\.agents\memory\context.md
BMAD+ 0.23.0 memory witness
$ Test-Path .\demo-app\.agents\skills\design\SKILL.md
False
```

Output captured from a real run. Source: Human acceptance run of 0.23.0, 2026-10-18

<a id="governed-packs"></a>
## What is governed or restricted on purpose

<a id="osint-governance"></a>
### The OSINT pack: keep and govern

Researching a named person is personal-data processing, and profiling or inferring personality is regulated (GDPR Articles 4(4), 22 and 9, and equivalent laws such as UK GDPR, LGPD and CCPA/CPRA). "Publicly available" does not mean no rules apply. The project decided on 2026-07-02 to keep the pack and govern it rather than remove it. The Phase minus 1 gate applies to every direct path to personal data (full investigation, LinkedIn, Instagram and Facebook collection, personality profile, contact enrichment): before any of them, the agent records a lawful basis (Article 6, and an Article 9(2) condition for personality profiling), a specific purpose (open-ended "find everything" is rejected), the controller, a retention period and how access and erasure requests are honoured, using the template `assets/lawful-basis-record.md`. If you cannot state a basis and a purpose, the agent declines the named-person operation and offers non-personal alternatives: company, product or market research, or a public entity. A quick search on a public handle, the diagnostic command and tooling paths are exempt.

Every dossier opens with the notice "AI-generated OSINT output - may contain errors; not legal advice. The operator is the data controller and is responsible for the lawful basis (GDPR Art. 6/9), platform Terms of Service, and human verification before any decision." The agent never profiles a private individual without a recorded basis, grades every fact from A to D, and spends at most 0.50 dollars without asking. No single provider key is required: one from any provider (`APIFY_API_TOKEN`, Perplexity, Exa, Tavily, Jina and others) is enough, and the pack sends queries to a provider only once its key is set (see data handling). The legal notice is `osint-agent-package/skills/bmad-osint-investigate/osint/references/gdpr-osint.md` in the repository.

<a id="other-boundaries"></a>
### Other deliberate boundaries

- Shield: every report is marked AI-generated and "Not legal advice". A supported assurance claim means a named check passed, never a certification, and a review control mapping is a prompt to look.
- Reviews and acceptance: a clean review means no open finding within a fully covered scope, not a proof that the code is correct; the acceptance gate states "human-observed: complete, current and triaged" and does not establish that the tester looked at the right place.
- Swarms: simulated units are not people; rates are an upper bound; quotes are not testimonials; paid media generation is never covered by a budget.
- No model runtime of its own (the one program it can start is a command or Codex run that a Nexus plan declares), no background process, no telemetry, no silent self-update, no automatic fix from a review, no IDE extension, no posting to forges. These are deliberate boundaries, not gaps waiting for a release.
- Writes outside the project: the CLI writes inside the project folder; `scan` writes project records into the global brain at `~/.bmad-plus/brain/`, the Memory pack writes inside the brain it linked, and `update --latest` runs `npm exec` in a temporary folder of the operating system. It never writes into a portfolio brain’s own layout uninvited.

<a id="verify-yourself"></a>
## Check it yourself

<a id="example-trust-verify-ownership"></a>
### See exactly what BMAD+ put in a project

Use before committing the installed files, before an audit, or before removing BMAD+. The assistant only reads and runs the read-only `doctor`.

**In your AI assistant**

```text
Run npx bmad-plus doctor --json and read _bmad/.bmad-plus-install.json. Tell me the installed version, the packs and tools, how many files BMAD+ tracks, which files differ from their recorded hash and which files in the BMAD+ folders it does not own. Then tell me what npx bmad-plus uninstall --yes would remove and what it would keep. Change nothing.
```

**What you should get** A short factual report: version, packs, tools, `inventory.status` and the number of tracked files, the list of `file.modified` and `file.unowned` warnings, and a prediction of the uninstall (removed: byte-identical managed files, matching adapters and the manifest; kept: `_bmad/config.yaml`, memory, `_bmad-output/`, modified and unknown files). Nothing is written.

**See also**

- [Data handling and privacy](https://bmad-plus.rochetta.fr/docs/security/data-handling/)
- [Install, update, uninstall](https://bmad-plus.rochetta.fr/docs/guides/install-lifecycle/)
- [Reference: doctor](https://bmad-plus.rochetta.fr/docs/reference/cli-doctor/)
- [Reference: uninstall](https://bmad-plus.rochetta.fr/docs/reference/cli-uninstall/)
- [The OSINT pack](https://bmad-plus.rochetta.fr/docs/packs/osint/)
- [Memory and the brain](https://bmad-plus.rochetta.fr/docs/concepts/how-memory-works/)

[BMAD+ documentation](https://bmad-plus.rochetta.fr/docs/) · [Security and data](https://bmad-plus.rochetta.fr/docs/security/)

[Source on GitHub](https://github.com/lrochetta/BMAD-PLUS)
