Plugin Type Reference¶
This section provides detailed documentation for each plugin type in Lightfall.
Overview¶
Type |
Base Class |
Purpose |
Singleton |
|---|---|---|---|
|
Add preferences pages |
Yes |
|
|
Add application panels |
Yes |
|
|
Register Bluesky plans |
Yes |
|
|
Provide execution backends |
Yes |
|
|
Define color themes |
Yes |
|
|
Add status bar indicators |
Yes |
|
|
Device-specific control widgets |
Yes |
|
|
Extend the embedded Claude agent: skill prompts and/or MCP tools |
Yes |
Common Interface¶
All plugin types inherit from PluginType and share these characteristics:
Class Attributes¶
class PluginType(ABC):
type_name: ClassVar[str] = "base" # Unique type identifier
is_singleton: ClassVar[bool] = False # One instance per plugin?
@property
def description(self) -> str: # Human-readable description
return "Base plugin type"
AgentPlugin additionally makes description abstract — agent plugins must provide it, since it doubles as the SKILL.md frontmatter description.
Required Property¶
@property
@abstractmethod
def name(self) -> str:
"""Unique identifier within this plugin type."""
...
Optional Methods¶
def get_introspection_data(self) -> dict[str, Any]:
"""Return plugin metadata for debugging/MCP tools."""
return {
"type": self.type_name,
"name": self.name,
"class": self.__class__.__name__,
"module": self.__class__.__module__,
}
Choosing a Plugin Type¶
UI Extensions¶
Goal |
Plugin Type |
|---|---|
Add a preferences page |
|
Add a new panel/dock widget |
|
Add custom device control widget |
|
Add a status indicator |
|
Add a color theme |
Data Acquisition¶
Goal |
Plugin Type |
|---|---|
Add a Bluesky scan plan |
|
Add an execution backend |
Claude Agent¶
Goal |
Plugin Type |
|---|---|
Add domain expertise (skill prompt) and/or tools Claude can call |
Documentation Template¶
Each plugin type page follows this structure:
Purpose - What this plugin type is for
Base Class - Import path and class name
Class Attributes - Type-specific class attributes
Required Methods - Methods you must implement
Optional Methods - Methods you can override
Lifecycle - When methods are called
Complete Example - Working implementation
Registration - How to register the plugin