New reference docs: - agents/ref-btmsg.md: inter-agent messaging schema and CLI - agents/ref-bttask.md: kanban task board operations - providers/ref-providers.md: Claude/Codex/Ollama/Aider comparison - config/ref-settings.md: (already committed) New guides: - contributing/dual-repo-workflow.md: community vs commercial repos - plugins/guide-developing.md: Web Worker sandbox API and publishing New pro docs: - pro/features/knowledge-base.md: persistent memory + symbol graph - pro/features/git-integration.md: context injection + branch policy - pro/marketplace/README.md: 13 plugins catalog Split files: - architecture/data-model.md: from architecture.md (schemas, layout) - production/hardening.md: from production.md (supervisor, sandbox, WAL) - production/features.md: from production.md (FTS5, plugins, secrets, audit) |
||
|---|---|---|
| .. | ||
| README.md | ||
Plugin Marketplace
This documentation covers Pro edition features available in the agents-orchestrator/agents-orchestrator private repository.
Overview
The Plugin Marketplace provides a curated catalog of plugins for Agents Orchestrator. It handles discovery, installation, updates, and removal of plugins from a central GitHub-hosted repository. The community plugin runtime (Web Worker sandbox, permission model) is unchanged -- the marketplace adds distribution and lifecycle management on top.
Catalog
The plugin catalog is a JSON file hosted in the agents-orchestrator/agor-plugins GitHub repository:
https://raw.githubusercontent.com/agents-orchestrator/agor-plugins/main/catalog.json
Catalog Schema
interface PluginCatalog {
version: number; // Catalog schema version
updatedAt: string; // ISO 8601 timestamp
plugins: CatalogEntry[];
}
interface CatalogEntry {
id: string; // Unique plugin identifier
name: string; // Display name
description: string; // Short description
version: string; // Semver version
author: string; // Author name
tier: 'free' | 'paid'; // Availability tier
downloadUrl: string; // HTTPS URL to plugin archive (.tar.gz)
checksum: string; // SHA-256 hex digest of the archive
size: number; // Archive size in bytes
permissions: string[]; // Required permissions
minVersion: string; // Minimum Agents Orchestrator version
tags: string[]; // Categorization tags
}
Plugin Catalog
Free Plugins (8)
| ID | Name | Description |
|---|---|---|
session-stats |
Session Stats | Displays token count, cost, and turn count as a compact overlay |
git-log-viewer |
Git Log Viewer | Shows recent git history for the active project in a formatted panel |
task-export |
Task Exporter | Exports bttask board contents to markdown or JSON |
prompt-library |
Prompt Library | User-managed collection of reusable prompt templates |
session-notes |
Session Notes | Per-session scratchpad persisted as tasks-KV entries |
time-tracker |
Time Tracker | Records wall-clock time per agent session with daily summaries |
diff-viewer |
Diff Viewer | Renders unified diffs from agent tool calls with syntax highlighting |
agent-logger |
Agent Logger | Streams agent messages to a local JSONL file for offline analysis |
Paid Plugins (5)
| ID | Name | Description |
|---|---|---|
cost-alerts |
Cost Alerts | Configurable cost threshold notifications with Slack/webhook delivery |
team-dashboard |
Team Dashboard | Aggregated usage analytics across multiple workstations |
policy-engine |
Policy Engine | Custom rules for agent behavior (blocked commands, file restrictions) |
audit-export |
Audit Exporter | Exports audit logs to external SIEM systems (JSON, CEF formats) |
model-benchmark |
Model Benchmark | A/B testing framework for comparing model performance on identical tasks |
Install Flow
- User opens the Marketplace tab in the settings panel.
- The UI fetches
catalog.jsonfrom GitHub (cached for 1 hour). - User selects a plugin and clicks Install.
- The backend downloads the plugin archive from
downloadUrlover HTTPS. - The backend verifies the SHA-256 checksum against
checksumin the catalog entry. - On checksum match, the archive is extracted to
~/.config/bterminal/plugins/{plugin-id}/. - The plugin's
plugin.jsonmanifest is validated (required fields, permission declarations). - The plugin appears in the installed list and can be activated.
Uninstall Flow
- User selects an installed plugin and clicks Uninstall.
- The backend calls
unloadPlugin()if the plugin is currently active. - The plugin directory
~/.config/bterminal/plugins/{plugin-id}/is deleted. - Any tasks-KV entries prefixed with
plugin:{plugin-id}:are purged.
Update Flow
- On marketplace tab open, the UI compares installed plugin versions against catalog versions.
- Plugins with available updates show an Update button.
- Update performs: download new archive, verify checksum, unload plugin, replace directory contents, reload plugin.
- The plugin's state (tasks-KV entries) is preserved across updates.
Security
Checksum Verification
Every plugin archive is verified against its SHA-256 checksum before extraction. If the checksum does not match, the install is aborted and an error is shown. This prevents tampered archives from being installed.
HTTPS-Only Downloads
Plugin archives are only downloaded over HTTPS. The downloadUrl field is validated to start with https://. HTTP URLs are rejected.
Path Traversal Protection
During archive extraction, all file paths are validated to ensure they resolve within the target plugin directory. Paths containing .. segments or absolute paths are rejected. This prevents a malicious archive from writing files outside the plugin directory.
Sandbox Isolation
Installed plugins run in the same Web Worker sandbox as community plugins. The marketplace does not grant additional privileges. Each plugin's permissions are declared in plugin.json and enforced by the plugin host at runtime.
Commands
pro_marketplace_fetch_catalog
Fetches the plugin catalog from GitHub. Returns cached data if fetched within the last hour.
Response: PluginCatalog
pro_marketplace_install
Downloads, verifies, and installs a plugin.
| Field | Type | Required | Description |
|---|---|---|---|
pluginId |
String |
Yes | Plugin identifier from catalog |
pro_marketplace_uninstall
Removes an installed plugin and its files.
| Field | Type | Required | Description |
|---|---|---|---|
pluginId |
String |
Yes | Plugin identifier |
pro_marketplace_update
Updates an installed plugin to the latest catalog version.
| Field | Type | Required | Description |
|---|---|---|---|
pluginId |
String |
Yes | Plugin identifier |
pro_marketplace_list_installed
Returns all installed plugins with their versions and active state.
Response: Vec<InstalledPlugin>
interface InstalledPlugin {
id: string;
name: string;
version: string;
installedAt: string;
isActive: boolean;
hasUpdate: boolean;
latestVersion: string | null;
}
pro_marketplace_check_updates
Compares installed plugins against the catalog and returns available updates.
Response: Vec<PluginUpdate>
interface PluginUpdate {
id: string;
currentVersion: string;
latestVersion: string;
changelogUrl: string | null;
}