Plugin Overview
Understand how plugins are modeled in Downcity, how local and managed plugins differ, and how plugin capability is assembled
Plugin Overview
In current Downcity, plugin is the extension unit.
That means:
- capability is exposed through plugins
- runtime participation is exposed through plugins
- long-lived managed runtime modules are also modeled as plugins
If you want concrete built-in plugin manuals, continue with Plugins Docs.
One-sentence mental model
A plugin is the unit that owns one capability boundary in Downcity.
That plugin may be:
- action-first
- hook-oriented
- system-oriented
- lifecycle-owned
- HTTP-exposing
Two important families
Local plugins
These are usually attached directly inside one local SDK Agent.
Typical examples:
skillwebasrttsauth
Managed plugins
These are runtime-owned plugins that participate in one target agent lifecycle.
Typical examples:
chattaskmemorycontactshell
ActionSchedule is managed by Agent itself, so it is not listed as a plugin.
Managed plugins are the reason the old split runtime language is no longer the right model.
How plugins attach in the local SDK
import { Agent } from "@downcity/agent";
import { SkillPlugin, WebPlugin } from "@downcity/plugins";
const agent = new Agent({
id: "repo-helper",
path: "/path/to/project",
tools: {},
plugins: [new SkillPlugin(), new WebPlugin()],
});
const plugins = agent.plugins.list();Important points:
pluginsis a registry owned by this specificAgent- the SDK does not auto-register every built-in plugin
- you can use
agent.plugins.list(),availability(), andrunAction()directly - prompt-time plugin system text comes only from plugins registered on that SDK
Agent
What a plugin may contain
A full plugin may include:
configactionssetupusagehooksresolvessystemavailabilityhttplifecycle
Not every plugin needs all of them.
What “plugin enabled” means now
There are multiple layers:
- agent-level: did this local SDK
Agentregister the plugin - runtime-level: is this managed plugin currently started or stopped
- plugin-level: does
availability()currently say it is usable - project-level: what runtime options exist under
downcity.json.plugins.*
Do not collapse these into one idea.