Plugin Type Reference

This section provides detailed documentation for each plugin type in Lightfall.

Overview

Type

Base Class

Purpose

Singleton

settings

SettingsPlugin

Add preferences pages

Yes

panel

PanelPlugin

Add application panels

Yes

plan

PlanPlugin

Register Bluesky plans

Yes

engine

EnginePlugin

Provide execution backends

Yes

theme

ThemePlugin

Define color themes

Yes

statusbar

StatusBarPlugin

Add status bar indicators

Yes

controller

ControllerPlugin

Device-specific control widgets

Yes

agent

AgentPlugin

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

SettingsPlugin

Add a new panel/dock widget

PanelPlugin

Add custom device control widget

ControllerPlugin

Add a status indicator

StatusBarPlugin

Add a color theme

ThemePlugin

Data Acquisition

Goal

Plugin Type

Add a Bluesky scan plan

PlanPlugin

Add an execution backend

EnginePlugin

Claude Agent

Goal

Plugin Type

Add domain expertise (skill prompt) and/or tools Claude can call

AgentPlugin

Documentation Template

Each plugin type page follows this structure:

  1. Purpose - What this plugin type is for

  2. Base Class - Import path and class name

  3. Class Attributes - Type-specific class attributes

  4. Required Methods - Methods you must implement

  5. Optional Methods - Methods you can override

  6. Lifecycle - When methods are called

  7. Complete Example - Working implementation

  8. Registration - How to register the plugin