MRP-VM is a typed plugin kernel. The VM does not own retrieval, indexing, decomposition policy, solver heuristics, or answer format logic. Those live inside plugins.
This guide shows how to build each plugin family, where the files usually live, which metadata is required, and which configuration surfaces matter for the default system.
src/
core/
boot/ # core boot sequence
conversation/ # session lifecycle
engine/ # request/frame execution kernel
ingest/ # source ingest orchestration
kb/ # repositories, persistence, workspaces
mrp-vm-sdk/
knowledge/ # KU/pragmatics helpers shared by plugins
retrieval/ # shared retrieval helpers/backends
strategies/ # shared NL/CNL strategy implementations
synthesis/ # shared answer composition helpers
plugins/
runtime/ # plugin loader, registry, wrapper runtime
sd-plugin/sd-symbolic/
sd-plugin/sd-llm-fast/
kb-plugin/kb-fast/
kb-plugin/kb-balanced/
gs-plugin/gs-symbolic/
mrp-plan-plugin/planner-default/
config/
plugins.json # built-in plugin catalog + fallback orders
conversation.json # session defaults
prompts/*.md # LLM prompt templates
The usual workflow for a new built-in plugin is:
src/plugins/<type>/<plugin-id>/ with index.mjs, plugin.json, and plugin.kus.md.src/mrp-vm-sdk/.type, id, plannerHints, maxLLMCalls, and modelRoles.config/plugins.json if it should be part of the shipped built-in catalog.sd-pluginExtracts Intent CNL plus current-turn KUs in one pass. It should also classify KU phase relevance through PhaseScopes when possible.
kb-pluginOwns retrieval, indexing, backend fusion, and sufficiency checks. Any lexical, associative, or symbolic backend belongs here, not in the VM.
gs-pluginConsumes resolved intents and goal-solver guidance KUs to produce the final answer document and Markdown output.
mrp-plan-pluginChooses KB and solver order, decides decomposition, and reacts to planner / decomposition / validation guidance.
val-pluginRuns after a successful answer. It may use validation guidance KUs to enforce domain-specific output or evidence rules.
| Field | Required | Notes |
|---|---|---|
id | Yes | Stable unique plugin identifier. |
type | Yes | One of sd-plugin, kb-plugin, gs-plugin, mrp-plan-plugin, val-plugin. |
description | Yes | Planner-readable description of when the plugin is useful. |
maxLLMCalls | Yes | Conservative request-budget reservation. |
modelRoles | If LLM-backed | Roles from DS028. |
plannerHints | For planner-facing stages | Cost, latency, supported acts, topic tags, evidence style. |
provides | Yes | Operational capability tags used by docs and diagnostics. |
sd-plugindetectSeeds(input, ctx).normalizePersistentContext(...) or expose an ingest strategy wrapper.intentCNL and currentTurnContextCNL.PhaseScopes for output instructions, planning hints, decomposition hints, and validation rules when detectable.kb-pluginretrieve(input, ctx).onSourceText(...) and onSessionEvent(...) for plugin-private artifacts.resolvedIntents with evidence plus guidanceUnits buckets.gs-pluginsolve(input, ctx).guidanceUnits from retrieval, especially answer-shaping instructions.responseMarkdown and responseDocument.status: "needs-decomposition" only when a child frame is genuinely required.mrp-plan-pluginbuildPlan(input, ctx) and optionally recordOutcome(...).val-pluginvalidate(input, ctx).| File | What it controls |
|---|---|
config/plugins.json | Built-in plugin catalog, default planner, and shipped fallback order. |
config/conversation.json | Session defaults; use null for auto-routing rather than silently pinning a plugin. |
config/kb.json | Shared ingest chunking and repository/workspace settings, not plugin-private index policy. |
config/prompts/*.md | Prompt templates used by LLM-backed strategies. |
If a plugin should run out of process, use the wrapper convention from DS016. Wrapper metadata lives in a wrapper directory and describes how the typed plugin is spawned, but the typed plugin contract itself still comes from DS027.