Plugins / Installing plugins

Installing plugins

Plugins add channels, skills, providers, and middleware without touching the core. Installing one is two steps: drop a DLL in the plugins folder, restart.

Where plugins live

AgentParley discovers plugins from <home>/plugins (default ~/parley/plugins). Two layouts are supported:

~/parley/plugins/text
MyPlugin.dll                      # flat: a single self-contained dll
MyPlugin/                          # folder: main dll + its dependencies
  MyPlugin.dll                     #   (the dll matching the folder name is the entry point)
  SomeDependency.dll
Dependency DLLs inside a plugin folder are not treated as plugins — they load on demand for that plugin only. Use the folder layout whenever a plugin has its own NuGet dependencies.

Install a plugin

If you have the published DLL(s), copy them in and restart the host:

bash
cp -r ./MyPlugin ~/parley/plugins/        # or: cp MyPlugin.dll ~/parley/plugins/
# restart 'parley serve' — the plugin set is fixed for the lifetime of a process

Building from source? Publish first, then copy:

bash
dotnet publish plugins/AgentParley.Channel.Telegram -c Release -o out
cp out/AgentParley.Channel.Telegram.dll ~/parley/plugins/
Plugins load once at startup. Installing, updating, or uninstalling a plugin takes effect on the next parley serve restart — there is no hot-reload of native assemblies.

List what's installed

bash
dotnet run --project src/AgentParley.Cli -- plugin list
# Plugins:
#   base                (built-in)
#   AgentParley.Channel.Telegram  (AgentParley.Channel.Telegram.dll)
# Load order: base, telegram

Successfully-loaded plugins also appear in the serve logs and at GET /api/plugins, and in the console under Settings → Plugins.

Load order & dependencies

Plugins are sorted topologically by their declared DependsOn, with basealways first. You can pin a preferred order in parley.yaml:

~/parley/parley.yamlyaml
plugins:
  loadOrder: [base, telegram, brave]

Order matters for selectable providers: the last-registered implementation in a group is the default until an operator picks one.

Configure a plugin

Most plugins need configuration — an API key, a connection. Plugins declare the fields they need, and the console renders a form for them under Settings; secret fields are written straight to the vault. A web-search provider, for instance, shows up under Settings → Web search with an API-key field. Then pick the active implementation under Settings → Providers.

Uninstall

Remove a plugin from the console (Settings → Plugins) or via the API — this drops it from the load order and purges its instance-keyed data. Delete the DLL and restart to fully unload the assembly.

bash
curl -X DELETE http://127.0.0.1:8420/api/plugins/telegram \
  -H "Authorization: Bearer $ADMIN_TOKEN"
rm -r ~/parley/plugins/AgentParley.Channel.Telegram*   # then restart