A plugin is one folder that can add several kinds of contributions to Kucedr. Manage plugins in Settings → Plugins: install, enable, disable, or remove them without restarting the app.
What a plugin can contain
| Kind | Where it lives | What it adds |
|---|---|---|
| Extensions | extensions/<id>/ | HTML, JS, and CSS shown inside the main window in a sandboxed frame |
| Apps | apps/<id>/ | Standalone apps that open in their own window |
| MCP servers | mcp/<id>/mcp.json or mcp/servers.json | Agent tools from local stdio or remote http servers |
| Skills | skills/<id>/SKILL.md | Instructions that teach the agent a task |
| Models | manifest.json → models | Remote API models, or local models through Ollama |
| Search | manifest.json → web_search | Web search engines for the agent |
| Databases | manifest.json → vector_databases | Vector databases for knowledge search |
| Storage | manifest.json → storage | Cloud file storage |
| Bots | manifest.json → bots | Messaging bots, such as Telegram |
The manifest doesn't list folder contributions. Kucedr finds them from the folders, and each folder name is the contribution's id. A plugin whose manifest has models, search, databases, storage, or bots is also a provider. See Providers.
Install a plugin
- Open Settings → Plugins.
- Upload a plugin folder or
.tgzarchive, or paste an https URL to a.tgz. - Kucedr validates the plugin, then makes its contributions available right away.
Installed plugins live in ~/.kucedr/plugins/<id>/. An installed plugin overrides a built-in plugin with the same id. Removing a plugin deletes its folder, and disabling one hides all of its contributions at once.
Built-in plugins
Kucedr ships with built-in plugins for model providers, MCP servers, search, storage, and bots. They can be disabled but not removed. The core Kucedr plugin ships the built-in extensions and skills, and it can't be disabled.
Plugin layout
<plugin-id>/
manifest.json plugin info, plus provider services when it is a provider
assets/ icons and other data
apps/<app-id>/ app manifest.json + entry file
extensions/<extension-id>/ manifest.json + index.html
mcp/servers.json optional: server configs keyed by id
mcp/<server-id>/mcp.json one server per folder
skills/<skill-id>/SKILL.md
A minimal manifest.json:
{
"schemaVersion": 5,
"id": "acme-tools",
"title": "Acme Tools",
"version": "1.0.0",
"description": "Acme models, dashboard, and CRM tools.",
"categories": ["LLM"],
"minAppVersion": "1.3.0",
"icon": "icon.svg"
}
schemaVersion,id,title,version, anddescriptionare required. Unknown keys are rejected.idis lowercase kebab-case and must match the folder name.iconis a png, svg, jpg, or webp file inassets/, 256 KB max.- A plugin needs at least one contribution and can't contain symlinks.
Extensions and isolation
An extension needs an index.html and a manifest.json with a title, a description, and a slot. Open it from Extensions in the command menu; it replaces the chat and stays in the sidebar while open.
Each extension runs in an iframe with its own origin, no Node, no window.api, and no network access. A strict content security policy blocks inline scripts. Extensions can also be imported on their own in Settings → Extensions.
Current limits
- Plugin settings forms, permissions, and a host bridge for extensions aren't available yet.
- There is no plugin catalog or automatic updates yet.
- The Kucedr CLI uses its own plugin format and data directory. The desktop app doesn't read CLI-installed plugins.
See Apps, MCP Servers, Skills, and the source plugin specification.