Extensibility

Extension points are explicit runtime contracts.

Applications grow by adding modules, engines, extractors, tools, agents, skills, and commands. Each extension type has a specific boundary and lifecycle.

Extension types

Different extension types solve different problems.

Keeping these categories separate makes the runtime easier to reason about and easier to replace piece by piece.

Registerflow stage
Loadflow stage
Exposeflow stage
Invokeflow stage
01

Modules

Feature packages with models, YAML UI, actions, commands, tools, agents, skills, locales, and assets.

02

Engines

Installable model providers for chat, embedding, speech, vision, and local or remote runtimes.

03

Extractors

Installable processors that turn uploaded files into markdown, chunks, metadata, and ingestion requests.

Operational boundary

Registration is declarative, invocation is runtime-owned.

Extensions describe what they provide. The core decides how those capabilities are discovered, authorized, and invoked.

01

Registration

Decorators and manifests describe what an extension provides. The loader discovers extension files during module loading.

02

Isolation

Extension code uses SDK contracts instead of importing private runtime internals.

03

Replaceability

A provider can be swapped when its public objective and runtime method contracts stay compatible.

Developer workflow

Extension code should be small and testable through the application.

A module developer should be able to validate behavior through real actions, tools, providers, and rendered UI rather than disconnected mocks.

01

Commands

Expose administrative or module-level operations without tying them to one page.

02

Tools and agents

Give model orchestration controlled capabilities that run inside the owning module context.

03

Skills

Package reusable instructions and workflows for agents without hardcoding that behavior in UI actions.

Next

Related pages

Use these pages to move from the concept to adjacent parts of the runtime.