MRP-VM delegates most behavior to typed plugins. Built-in plugins live in-process, while external wrappers can expose the same typed contracts through the manifest-driven wrapper convention. See DS003, DS016, and DS027.
sd-plugin — emits Intent/Seed control plus current-turn KU shellskb-plugin — retrieves and fuses evidence, strategy units, and phase-scoped guidancegs-plugin — produces answers, no-context, or needs-decompositionmrp-plan-plugin — selects plugin order and child-frame strategyval-plugin — checks grounding and answer acceptabilitywrappers/z3-solver/
├── manifest.json # protocolVersion, command, plugin type, metadata
├── wrapper.js # adapter process
└── README.md
External wrappers are useful when a capability already exists outside Node.js. The wrapper speaks the protocol expected by the kernel and advertises its metadata in the manifest.
Plugin attempts appear in the canonical execution graph as typed plugin nodes connected to frames, seeds, branches, results, and failures. This is why plugin IDs, statuses, and selected routes are visible in the Explainability panel per chat turn.