Skip to content
PricingReleases

PluginManifest

Defined in: plugin.ts:132

optional adapters?: string | string[]

Defined in: plugin.ts:185


optional app?: PluginAppConfig

Defined in: plugin.ts:267

Desktop-app provider config. For providers that ship as a native macOS app with a local HTTP API rather than a CLI (e.g. Ollama, Osaurus). When present, onboarding renders a Download → Open → Models flow instead of the CLI Install → Sign in → Ready flow.


optional appScope?: string

Defined in: plugin.ts:148

Which app the plugin applies to: recursive, financial, or shared.


optional author?: string | { name?: string; url?: string; }

Defined in: plugin.ts:138

Author attribution — a plain string or { name, url }.


optional automations?: string | string[]

Defined in: plugin.ts:184


optional bundledOptIn?: boolean

Defined in: plugin.ts:215

When true, the bundled copy is marketplace-only — skills/rules/hooks/tools do not load until the user installs the plugin into ~/.recursive/…/installed/. Adapter plugins stay bundle-scanned so onboarding can browse them without copying; use this for optional integrations (Slack, Memory, verify hooks).


optional category?: string

Defined in: plugin.ts:144

Marketplace category.


optional cli?: PluginCliConfig

Defined in: plugin.ts:253

How to probe whether this plugin’s CLI is installed. bin defaults to the adapter’s terminal.command; versionArgs (e.g. ['--version']) capture a version string when present. Used by GET /api/adapters/cli-status.


optional client_lifecycle?: Record<string, ClientLifecycleHandlerDeclaration>

Defined in: plugin.ts:207


optional color?: string

Defined in: plugin.ts:141


optional commands?: string | string[]

Defined in: plugin.ts:183

Slash-command Markdown files contributed by the plugin.


optional comms?: string | string[]

Defined in: plugin.ts:156

Comms templates directory.


optional core?: boolean

Defined in: plugin.ts:217

Core platform plugin — boot-synced and cannot be disabled in the UI.


optional data?: PluginDataConfig

Defined in: plugin.ts:205


optional dependencies?: string[]

Defined in: plugin.ts:208


optional description?: string

Defined in: plugin.ts:136


optional detect?: PluginDetectConfig

Defined in: plugin.ts:204


optional diagnoseCommand?: string

Defined in: plugin.ts:238


optional greetings?: string | string[]

Defined in: plugin.ts:190

Session-greeting catalog JSON files. Each catalog is exposed as a greeting pack.


optional homepage?: string

Defined in: plugin.ts:139


optional hooks?: string | string[]

Defined in: plugin.ts:198


optional icon?: string

Defined in: plugin.ts:142


id: string

Defined in: plugin.ts:133


optional installCommand?: string

Defined in: plugin.ts:239


optional installUrl?: string

Defined in: plugin.ts:247

Docs / landing URL for installing this plugin’s CLI. Shown as a “learn more” link beside the install action (and as the fallback when no installCommand can be auto-run, e.g. a download page).


optional lifecycle?: Record<string, LifecycleHandlerDeclaration>

Defined in: plugin.ts:206


optional loginCommand?: string

Defined in: plugin.ts:236

Terminal-action catalog (declarative, resolved by the server’s resolveTerminalAction). Each is an interactive CLI command the platform can offer in a floating terminal sheet — surfaced as a one-click pill on plugin cards, settings rows, and error states.

  • loginCommand — (re)authenticate, e.g. codex login. Kind auth.
  • setupCommand — first-time / config setup, e.g. aws configure. Kind setup.
  • diagnoseCommand— health check / repair, e.g. gh auth status. Kind diagnose.
  • installCommand — install the CLI itself (pre-flight before auth). Kind install.
  • mcpLoginCommand — authenticate ONE downstream MCP server through this CLI, e.g. codex mcp login {{server}}. Kind mcp-auth.
  • mcpDiagnoseCommand — inspect a downstream MCP server’s connection state, e.g. claude mcp get {{server}}. Kind mcp-diagnose.

The two mcp* commands may contain a {{server}} placeholder, replaced with the failing MCP server’s configured name. A template that needs {{server}} is skipped when the adapter reported only an endpoint.


optional mcp?: string | string[]

Defined in: plugin.ts:199


optional mcpDiagnoseCommand?: string

Defined in: plugin.ts:241


optional mcpLoginCommand?: string

Defined in: plugin.ts:240


optional min_recursive_version?: string

Defined in: plugin.ts:154

Minimum Recursive version this plugin supports; enforced at install.


optional name?: string

Defined in: plugin.ts:134


optional npm?: object

Defined in: plugin.ts:260

npm install behavior for the plugin’s package.json dependencies. Lifecycle scripts (postinstall etc.) are disabled by default; a plugin that genuinely needs them declares "npm": { "scripts": true } and that fact is disclosed at install time.

optional scripts?: boolean


optional onboarding?: PluginOnboardingConfig

Defined in: plugin.ts:279

Declarative onboarding shown after marketplace installation and from the plugin settings page. Unlike setupSequence, these steps may collect plugin settings or link to an external setup console.


optional platforms?: string[]

Defined in: plugin.ts:152

OS allowlist (e.g. [“darwin”]); omit for all platforms.


optional private?: boolean

Defined in: plugin.ts:150

Excluded from registry publishing.


optional providers?: string | string[]

Defined in: plugin.ts:196

Inference-provider catalog JSON. Each approved row becomes a connectable provider — no adapter code, since anything speaking the chat-completions protocol needs only an endpoint, an env var and a model list.


optional provides?: object

Defined in: plugin.ts:164

Structured provider declarations. Each key is a provider kind whose value is a ProvidesBlock, read by that kind’s registry:

  • sync_provider → core-sync discoverSyncProviders (encrypted-bytes transport)
  • auth_provider → core-identity discoverAuthProviders (pluggable identity/permission backend)
  • data_provider → reserved

[kind: string]: ProvidesBlock | undefined

optional auth_provider?: ProvidesBlock

optional data_provider?: ProvidesBlock

optional sync_provider?: ProvidesBlock


optional routes?: string | string[]

Defined in: plugin.ts:197


optional rules?: string | string[]

Defined in: plugin.ts:181


optional settings?: PluginSettingsSchema

Defined in: plugin.ts:203


optional setupCommand?: string

Defined in: plugin.ts:237


optional setupSequence?: PluginSetupStep[]

Defined in: plugin.ts:273

Ordered “getting started” steps, surfaced as a checklist after install and during onboarding. Each step reuses the terminal-action catalog kinds and, when command is omitted, the matching manifest command field.


optional skills?: string | string[]

Defined in: plugin.ts:180


optional soundDefaults?: Record<string, string>

Defined in: plugin.ts:179

Sound packs only — an explicit mapping from a notification event to a sound slug (the audio file’s stem). Lets a pack declare which of its sounds plays for each event when the user applies the pack in Notifications settings. Keys are the client’s NotificationSoundKeys (soundSessionStarted, soundSessionComplete, soundQuestionAsked, soundSessionError, soundAppOpen); the map may be partial. Any event left unmapped — or whose slug isn’t present in the pack — falls back to keyword-heuristic matching.


optional sounds?: string | string[]

Defined in: plugin.ts:188


optional tags?: string[]

Defined in: plugin.ts:146

Marketplace search tags.


optional themes?: string | string[]

Defined in: plugin.ts:187


optional thumbnail?: string

Defined in: plugin.ts:140


optional tools?: string | string[]

Defined in: plugin.ts:186


optional triggers?: PluginTriggersManifest

Defined in: plugin.ts:201

Marks this plugin as an event trigger source (Slack/Linear/webhook).


optional ui?: PluginUiManifest

Defined in: plugin.ts:202


optional version?: string

Defined in: plugin.ts:135