Skip to content

Plugins

Plugins are local extension packages that add channels, custom integrations, tools, or skills to Murph.

For implementation-level plugin details, use Extending Plugins.

Scoped plugins

Scoped plugins live under the Murph home directory:

text
~/.murph/plugins/<category>/<id>

Plugins are global operator extensions. Runtime scope comes from Murph configuration, channels, integrations, and policy, not from the local shell directory where Murph is started.

Categories keep extension types separated:

  • channels for messaging provider extensions.
  • tools for callable actions.
  • skills for prompt guidance.
  • context for integration-style grounding sources.
  • bundles for plugins that intentionally combine multiple categories.

Murph still loads older flat plugin directories under ~/.murph/plugins/<id> for compatibility, but new plugins should use the category-first layout.

Capabilities

A scoped plugin can contribute:

Package structure

Use one plugin directory per plugin under a capability category:

text
~/.murph/plugins/tools/jira
~/.murph/plugins/channels/teams
~/.murph/plugins/context/internal-docs

The directory name should match the plugin id when possible.

Every plugin needs plugin.json:

json
{
  "id": "jira",
  "name": "Jira",
  "description": "Jira plugin",
  "version": "0.1.0",
  "capabilities": {
    "skills": ["skills/jira.md"],
    "integrations": ["integrations/jira.mjs"]
  }
}

The manifest must declare at least one skill, integration, or channel.

For a channel plugin:

json
{
  "id": "teams",
  "name": "Microsoft Teams",
  "description": "Teams channel plugin",
  "version": "0.1.0",
  "capabilities": {
    "channels": ["channel.mjs"]
  }
}

Use these directories:

  • skills/*.md inside the plugin root for skill files referenced by capabilities.skills.
  • integrations/*.mjs for integration connector modules referenced by capabilities.integrations.
  • channel.mjs or channels/*.mjs for messaging providers referenced by capabilities.channels.

Manifest paths must stay inside the plugin root. Paths that escape the package root are rejected.

Integrations and tools

An integration is the connected source users think about, such as Jira or an internal docs index. In a plugin package, that integration is implemented by a connector module.

A tool is one callable action Murph can run. Some tools are built in, such as web.search; others are exposed by plugin-provided integrations, such as jira.search.

After plugins are reloaded, connector metadata is exposed through integration status and appears as a generic integration card in the browser UI.

Public boundary

Scoped plugins are the documented plugin model. Keep custom integrations in scoped plugins unless a change must become part of Murph core.

Build workflow

Use Murph Agent to create or update scoped plugins:

bash
murph agent

Then ask it to create or update a plugin under the right category root, such as ~/.murph/plugins/tools/jira.

For a new messaging provider, ask Murph Agent to create a channel plugin under ~/.murph/plugins/channels/<id>. A custom channel should not require edits to Murph core runtime files, but it may still require manual app, bot, scope, webhook, or approval steps in the provider's console.

Self-hosted handoff agent for async coverage.