Host · Chat
The Plugin Panel Inside Chat
Active plugins are surfaced in the sidebar. Each plugin exposes its entry points through its manifest's ui[] slots and keywords (Skill triggers). The host core never imports plugin-specific code directly.
Skill keywords
A Skill card is auto-suggested when a registered keyword appears in the chat input. The only runtime registration API is
hostApi.registerKeywords.ui[] slots
plugin.json's
ui[] declares slot (sidebar/chat/popover/embedded) · kind (embedded-module/url) · entry · exportName · window.Tools list
Tools are statically declared in the manifest's
tools[]. Handlers live in the RuntimePlugin.handlers map. Tool name regex: ^[a-zA-Z_][a-zA-Z0-9_]*$.Naming conventions — three namespaces
- LLM tool names:
^[a-zA-Z_][a-zA-Z0-9_]*$(src/plugins/runtime/manifest-validation.ts:289). No leading digits or dashes — a common vendor requirement (OpenAI / Gemini / Claude alike). - Skill / agent / session id: separate —
^[a-zA-Z0-9_-]+$(src/core/skill-store.ts:30). Dashes allowed. - Plugin id: typically kebab-case (e.g.
local-indexer,ms-graph). The manifest'sidfield.
There's no runtime registration API
At host boot,
src/boot.ts:703-736 registers every plugin manifest's tools[] into the Tool Registry. There is no API to add tools dynamically at runtime — changing tools requires redeploying and restarting the plugin.