Developer Reference

Adding a Plugin

Updated Jun 5, 2026 · 1 min read

Adding a Plugin

Follow core-vs-plugins-structure-philosophy: a new capability is a new file
in the matching plugin folder. You register nothing; discovery finds it.

Add an integration (most common)

  1. Copy app/integrations/_TEMPLATE.pyapp/integrations/<name>_tools.py.
  2. Fill in the FEATURE header (see the-feature-header) and the TOOLS list.
  3. Done — inject_integration_tools() auto-discovers it. Do not edit

app/tools/loader.py or any core file.

Add another plugin type

Each folder auto-discovers a specific shape:

(an EventSource subclass) + a FEATURE.

(a CommunicationPlugin subclass) + a FEATURE.

type_name is its id. (The data_sources.type CHECK was relaxed, so no
schema edit is needed.)

(its .name is the provider id) + a FEATURE.

subclass + a FEATURE whose id is the level name.

processor_cls + a FEATURE.

PROVIDER dict (id/display_name/fields/cls) + a FEATURE.

Removing a capability

Delete its file. Nothing else references it. (For the registry subsystems the
hard-wired fallback covers the irreducible core; everything else is gone.)

Verify

Open App Config → Features (the-feature-catalog-and-discovery) — your
plugin should appear with its declared status.

#how-to#plugins#integrations#contributing