Skip to main content

Core Functions

definePlugin()

Defines a plugin with metadata and setup function.
string
required
Plugin name (used for module identification)
string
required
Plugin version (semver format recommended)
() => Promise<Plugin> | Plugin
required
Function that returns the plugin implementation
Example:

Plugin Interface

Plugin

The plugin implementation interface.
function
Plugin initialization hook. Return false to abort initialization.
function
Module setup hook. Called after configuration is applied.

ContextInit

Context passed to plugin hooks.
ChannelHost
required
Event channel for communicating with the plugin host
PluginApis
required
APIs for protocol and client operations

Plugin Host API

PluginHost

Manages plugin lifecycle and orchestration.

PluginHostOptions

'electron' | 'node' | 'web'
Runtime environment. Defaults to 'electron'.
PluginTransport
Communication transport. Defaults to { kind: 'in-memory' }.
string
Preferred protocol version. Defaults to 'v1'.
string
Preferred API version. Defaults to 'v1'.

PluginStartOptions

string
Working directory for loading plugin files
boolean
Stop at configuration-needed phase. Defaults to false.
string[]
Capabilities that must be ready before initialization
number
Timeout for waiting on capabilities. Defaults to 15000ms.

PluginHostSession

APIs

Protocol APIs

APIs for plugin-host protocol communication.

capabilities

wait() Wait for a capability to become ready.
string
required
Capability key to wait for
number
Timeout in milliseconds. Defaults to 15000.
CapabilityDescriptor
The capability descriptor when ready
snapshot() Get current snapshot of all capabilities.
CapabilityDescriptor[]
Array of all capability descriptors

resources.providers

list() List available resource providers.
Array<{ name: string }>
Array of provider names

Client APIs

APIs for client-side functionality.

resources.providers

list() List available providers from client perspective.

Types

ManifestV1

Plugin manifest structure.
'v1'
required
Manifest API version
'manifest.plugin.airi.moeru.ai'
required
Manifest kind identifier
string
required
Plugin name
object
required
Runtime-specific entrypoint paths

ModuleIdentity

CapabilityDescriptor

string
required
Unique capability identifier
'announced' | 'ready' | 'degraded' | 'withdrawn'
required
Current capability state
Record<string, unknown>
Additional capability metadata
number
required
Unix timestamp of last update

PluginSessionPhase

Plugin lifecycle phases.

ModuleConfigEnvelope

Configuration envelope structure.
string
required
Unique configuration identifier
number
required
Configuration revision number
number
required
Configuration schema version
C
required
Complete configuration object

Protocol Events

Standard protocol events emitted by the plugin host.

module:authenticate

Request authentication with token.

module:authenticated

Authentication result.

module:announce

Announce module to registry.

module:prepared

Module is prepared and ready for configuration.

module:configuration:needed

Module requires configuration.

module:configuration:configured

Configuration has been applied.

module:configure

Apply configuration to module.

module:status

Module status update.

registry:modules:sync

Sync module registry.

Best Practices

Always define TypeScript interfaces for your plugin configuration to catch errors early.
Validate all configuration and event payloads before using them.
Wrap async operations in try-catch blocks and emit appropriate status events.
Use namespaced capability keys like 'tool:weather' or 'llm:provider:openai'.
Listen for stop events and clean up timers, connections, and other resources.

Next Steps

Creating Plugins

Learn how to build plugins step-by-step

Plugin SDK Overview

Understand plugin architecture and concepts