| name | plugin-development |
|---|---|
| description | Create, test, sign, and publish Memoria governance plugins. Covers Rhai and gRPC runtimes, manifest format, lifecycle. Use when developing or managing plugins. |
memoria plugin init --dir ./my-plugin --name my-governance \
--capabilities governance.plan,governance.executeCreates:
my-plugin/
├── manifest.json # Plugin metadata, permissions, limits
└── policy.rhai # Governance logic (Rhai script)
{
"name": "memoria-my-governance",
"version": "0.1.0",
"api_version": "v1",
"runtime": "rhai",
"entry": { "rhai": { "script": "policy.rhai", "entrypoint": "memoria_plugin" } },
"capabilities": ["governance.plan", "governance.execute"],
"compatibility": { "memoria": ">=0.1.0" },
"permissions": { "network": false, "filesystem": false, "env": [] },
"limits": { "timeout_ms": 500, "max_memory_mb": 32, "max_output_bytes": 8192 },
"integrity": { "sha256": "", "signature": "", "signer": "" },
"metadata": { "display_name": "My Governance Plugin" }
}Key fields:
runtime:rhai(sandboxed) orgrpc(remote service)capabilities: must includegovernance.planand/orgovernance.executeintegrity: auto-filled bymemoria plugin publish
fn memoria_plugin(ctx) {
if ctx["phase"] == "plan" {
let review = decision("my-plugin:check", "Description", 0.8);
review["evidence"] = [evidence("source", "What was found")];
return #{
requires_approval: false,
actions: [review],
estimated_impact: #{ "my.metric": 1.0 }
};
}
if ctx["phase"] == "execute" {
return #{ warnings: [], metrics: #{ "my.metric": 1.0 } };
}
return #{};
}
Built-in helpers: decision(id, reason, confidence), evidence(source, description)
| Runtime | Sandboxing | Use Case |
|---|---|---|
rhai |
In-process, memory/time limited | Simple rules, no external deps |
grpc |
Out-of-process, network call | Complex logic, external services |
MEMORIA_GOVERNANCE_ENABLED=true \
MEMORIA_GOVERNANCE_PLUGIN_DIR=./my-plugin \
memoria serveSee memoria-service/tests/plugin_contract.rs — uses GovernancePluginContractHarness.
memoria plugin dev-keygen --dir ./my-plugin
memoria plugin signer-add --signer my-team --public-key <base64-ed25519>
memoria plugin publish --package-dir ./my-plugin
memoria plugin review --key governance:my-governance:v1 --version 0.1.0 --status active
memoria plugin activate --domain governance --binding default \
--plugin-key governance:my-governance:v1 --version 0.1.0MEMORIA_GOVERNANCE_ENABLED=true
MEMORIA_GOVERNANCE_PLUGIN_BINDING=default
MEMORIA_GOVERNANCE_PLUGIN_SUBJECT=systemscaffold → local dev → sign → publish → review → activate → scheduler loads
| Command | Description |
|---|---|
memoria plugin init --dir <d> --name <n> |
Scaffold |
memoria plugin dev-keygen --dir <d> |
Generate ed25519 keypair |
memoria plugin publish --package-dir <d> |
Sign and publish |
memoria plugin list |
List published |
memoria plugin review --key <k> --version <v> --status <s> |
Review |
memoria plugin activate --domain <d> --binding <b> --plugin-key <k> --version <v> |
Activate |
memoria plugin rules |
List binding rules |
memoria plugin score --key <k> --version <v> |
Compatibility score |
memoria plugin matrix |
Compatibility matrix |
memoria plugin events |
Audit events |
| File | Purpose |
|---|---|
plugin/manifest.rs |
PluginManifest, PluginPackage, signing |
plugin/repository.rs |
Publish, review, score, binding CRUD |
plugin/rhai_runtime.rs |
RhaiGovernanceStrategy |
plugin/grpc_runtime.rs |
GrpcGovernanceStrategy |
plugin/governance_hook.rs |
Contract testing harness |
plugin/templates/ |
Rhai template |