Skip to main content
Create a root-owned folder under plugins/. The folder name is the plugin identity and must be a valid Python identifier.
plugins/warehouse/

Declare the plugin

metadata.name must match the folder. The optional PEP 621 project name and version must match plugin.yaml. Its static dependencies join the root environment solve.

Export the application-owned singleton

plugin.py exports one public Plugin subclass and the singleton named plugin. Keep SDK clients on that singleton, and expose a bounded invocation view through PluginContext:
plugins/warehouse/plugin.py
Harnest imports plugin modules during compilation but does not call start() or connect to services. Runtime startup activates plugins in dependency order and calls stop() in reverse order.

Add optional plugin content

Managed mode composes declared content into the owning agent. Advanced mode accepts declared lifecycle extensions but rejects populated managed-content directories because the native target owns its own composition.

Add plugin dependencies

Use requires.plugins when this plugin depends on another local Runtime Plugin:
plugins/warehouse/plugin.yaml
Harnest rejects missing dependencies and cycles. Plugin Python dependencies share one solve with the root project; incompatible constraints fail harnest env sync instead of creating isolated environments.

Add lifecycle behavior

Declare exactly which Harnest surfaces the plugin contributes.