Adds `--deep` flag to `matilha install-plugins` for zero-paste ecosystem install.
Companion to matilha-skills v1.2.0 (Wave 5g).
What's new
`matilha install-plugins --deep`
Executes `claude plugin marketplace add` + `claude plugin install @ --scope user` for each selected pack, using the documented Claude Code shell API. Zero paste required.
Idempotent: treats "already installed" stderr patterns as success, so re-runs are safe.
Falls back gracefully to paste-block mode when the `claude` CLI is absent on PATH.
`--with-claudemd` in `--deep` mode
Combined with `--deep`, the CLI now writes `./CLAUDE.md` via the Wave 5g SP-B merge-or-create contract (3 cases: create / append / replace-between-markers, idempotent). Ships the canonical matilha activation-priority snippet with `` markers.
New modules
- `src/install-plugins/detectClaudeCli.ts` — PATH scanner for `claude` binary (no shell invocation, injection-safe)
- `src/install-plugins/executeDeepInstall.ts` — sequential `execFile`-based runner with dry-run mode and `onStep` progress callback
- `src/install-plugins/writeClaudeMd.ts` — Node implementation of the 3-case merge-or-create contract
Canonical flow
```bash
npm install -g matilha@1.2.0
cd /path/to/your/project
matilha install-plugins --full --deep --with-claudemd
→ 8 plugins installed via claude CLI
→ ./CLAUDE.md created/merged with matilha priority rule
→ "next: open Claude Code and run /reload-plugins"
```
Compatibility
- No breaking changes. Default behavior (without `--deep`) unchanged — still emits paste-block.
- Existing flags (`--full`, `--core-only`, `--preset`, `--with-claudemd`, `--no-clipboard`) continue to work identically.
- Validator tests: 1496 passing (+14 SP-E tests).
Full changelog: see `CHANGELOG.md`.