Skip to Content
Core FeaturesPlugins & Custom Virtuosos

Plugins & Custom Virtuosos

The orchestra is extensible on two axes: build your own Virtuoso in Agent Studio, or install third-party ones from the Plugin Marketplace.

Custom Virtuosos (Agent Studio)

The Custom Virtuoso Builder (src/components/virtuosos/CustomVirtuosoBuilder.tsx, src/hooks/useCustomVirtuosos.ts) lets you define a new agent: name, constitution (system instruction), model, capabilities, and color. Custom profiles join the registry at runtime and can be commissioned like any built-in specialist.

Plugin Marketplace

src/lib/plugin-marketplace.ts implements the full pipeline:

MarketplaceClient → fetch catalog PluginInstaller → fetch, validate, sandbox, register PluginSandbox → isolated execution environment

Installation steps:

  1. Fetch the plugin manifest and handler code
  2. Verify the SHA-256 hash of the handler code (integrity check — hash mismatch aborts)
  3. Create a sandboxed handler in an isolated function scope
  4. Register the plugin as a Virtuoso

Plugins run sandboxed, but treat third-party Virtuosos like any dependency: review what a plugin declares in its manifest before installing.

The Plugin API

src/lib/virtuoso-plugin-api.ts
export interface PluginManifest { name: string version: string description: string capabilities: string[] inputs: Array<{ name: string; type: string; required: boolean; description: string }> outputs: Array<{ name: string; type: string; description: string }> author?: string homepage?: string } export function registerPlugin(plugin: VirtuosoPlugin): void export function unregisterPlugin(pluginId: string): boolean export function getPlugin(pluginId: string): VirtuosoPlugin | undefined export function listPlugins(): VirtuosoPlugin[]

A VirtuosoPlugin receives PluginTasks (the commission payload) and returns PluginResults, which flow through the same Symphony Bus lifecycle — including the Critic gate — as built-in agents.