Skip to main content

Plugins

Plugins let you extend Visibility.so with custom functionality. A plugin can read and write platform data, contribute UI components, register webhooks, and provide new tools for agents — all without modifying the core platform.

What Are Plugins?

A plugin is a self-contained package that hooks into the Visibility.so platform through a well-defined SDK. Plugins run in an isolated worker environment and can contribute both backend logic and frontend UI components. Plugins are ideal for:
  • Integrating with external services (CRMs, analytics platforms, custom APIs)
  • Adding custom dashboard widgets or sidebar panels
  • Extending agent capabilities with new tools
  • Automating workflows via webhooks

Installing and Managing Plugins

1

Browse available plugins

Navigate to Settings > Plugins in your workspace. You will see a list of available plugins and their current status.
2

Install a plugin

Click Install on the plugin you want to add. The plugin will be installed and enter the installed state.
3

Configure

Some plugins require configuration (API keys, preferences, etc.). Open the plugin’s settings page to complete setup. Once configured, the plugin moves to the ready state.
4

Manage lifecycle

You can disable, re-enable, or uninstall plugins at any time from the plugin settings page.

Plugin Capabilities

Plugins interact with the platform through a set of defined capabilities:

Data Read / Write

Plugins can read and write platform data (projects, tasks, agents, etc.) through the SDK, subject to declared permissions.

UI Extensions

Plugins contribute React components that render in designated UI slots throughout the platform.

Webhooks

Plugins can register webhook endpoints to receive events from external services and trigger platform actions.

Agent Tools

Plugins can provide new tools that agents can invoke during task execution, extending what agents can do.

Plugin UI Slots

Plugins contribute UI components by declaring which slots they render into. The platform provides the following UI slot types:
Slot TypeDescription
pageA full plugin-owned page accessible via navigation
dashboardWidgetA widget rendered on the workspace dashboard
sidebarAn item in the main sidebar navigation
sidebarPanelA collapsible panel in the sidebar
projectSidebarItemA navigation item within a project’s sidebar
detailTabA tab on entity detail pages (tasks, agents, etc.)
taskDetailViewA custom view on the task detail page
settingsPageA page within the workspace settings area
globalToolbarButtonA button in the global top toolbar
toolbarButtonA context-specific toolbar button
contextMenuItemAn item in right-click context menus
commentAnnotationAn annotation rendered within comment threads
commentContextMenuItemA context menu item for comments
Each slot declaration can optionally specify entity types to limit where the component appears (e.g., only on task detail pages, only for specific project types).

Plugin State Storage

Plugins can persist their own data using the plugin state system. State is stored as key-value pairs scoped to specific contexts:
  • Company scope — data shared across the entire workspace
  • Project scope — data specific to a project
  • Task/Issue scope — data attached to a specific task
Each state entry is identified by a combination of (plugin_id, scope_kind, scope_id, namespace, state_key), ensuring isolation between plugins and scopes.
The plugin is responsible for migrating its own state if the data shape changes between versions. The platform does not perform automatic state migrations.

Plugin Lifecycle States

Every installed plugin is in one of the following states:
StateDescription
installedPlugin has been installed but is not yet configured or activated.
readyPlugin is fully configured and actively running.
disabledPlugin has been manually disabled by an administrator.
errorPlugin encountered a runtime error. Check logs for details.
upgrade_pendingA new version is available and awaiting upgrade.
uninstalledPlugin has been uninstalled. Data is retained for a grace period (default: 30 days) to allow reinstallation and recovery.
Plugins follow a hot lifecycle model — installing, disabling, and uninstalling plugins does not require a server restart.