Runtime Plugins have
plugin.yaml. Manifest-less plugin folders are Agent Plugins: MCP clients plus Agent Skills, with no Python plugin object or lifecycle.Choose the boundary
Create a plugin
- plugin.yaml
- plugin.py
- pyproject.toml
plugin.yaml. Dependencies are static PEP 621 entries.
Use requires.plugins to name local Runtime Plugin dependencies. Harnest rejects missing dependencies and cycles at compile time.
Use the plugin
Import the singleton from its compiler-owned namespace:Declare capabilities
Declare only what the plugin contributes. Advanced mode composes Harnest-owned boundaries but does not intercept opaque native framework paths.
Lifecycle and auditing
- Dependencies start before dependants; shutdown reverses that order.
- Within a lifecycle phase, lower
ordervalues run first. - Plugin and root extensions form one globally validated lifecycle.
- Wrap committed user- or agent-triggered writes with
plugin_mutation(...)to emit correlated, payload-free OTEL audit events.
context.continuations and follow Durable execution.