Skip to main content

Overview

Plugins extend OpenCode by hooking into events and customizing behavior. They can add tools, intercept operations, and react to session lifecycle events.

Plugin Locations

Adding npm Plugins with OCX

OCX supports adding npm plugins directly using the npm: protocol:
This adds the package to the plugin array in opencode.jsonc. OpenCode installs and loads the plugin at runtime.

Basic Plugin Structure

Context Object Properties

Plugin Dependencies

Add external npm packages via package.json in your config directory:
.opencode/package.json

Available Events

Session Events

  • session.created / session.updated / session.deleted
  • session.idle — Session completed
  • session.compacted — Context was compacted
  • session.error / session.status / session.diff

Tool Events

  • tool.execute.before — Before tool execution (can modify/abort)
  • tool.execute.after — After tool execution

File Events

  • file.edited — File was modified
  • file.watcher.updated — File system change detected

Message Events

  • message.updated / message.removed
  • message.part.updated / message.part.removed

Permission Events

  • permission.updated / permission.replied

TUI Events

  • tui.prompt.append / tui.command.execute / tui.toast.show

Other Events

  • command.executed / installation.updated / server.connected
  • lsp.updated / lsp.client.diagnostics
  • todo.updated

Plugin Examples

.env Protection

Send Notifications

Custom Tools via Plugin

Compaction Hooks

Load Order

  1. Global config (~/.config/opencode/opencode.jsonc)
  2. Project config (opencode.jsonc)
  3. Global plugin directory (~/.config/opencode/plugin/)
  4. Project plugin directory (.opencode/plugin/)

See Also