A plugin bundles slash commands, sub-agent profiles, skills, hooks and MCP servers into one installable unit, so a team can share a complete workflow with a single command.
Use plugins
neuralinverse plugin install ./tools/ni-release # a local folder (copied)
neuralinverse plugin install https://github.com/acme/ni-k8s.git#v1.2.0
neuralinverse plugin install npm:@acme/ni-plugin-security
neuralinverse plugin list
neuralinverse plugin info ni-k8s # what it contributes, including hooks and MCP servers
neuralinverse plugin disable ni-k8s --project # off for this repository only
neuralinverse plugin enable ni-k8s
neuralinverse plugin update # re-install all from their sources
neuralinverse plugin uninstall ni-k8s
Plugins install to ~/.neuralinverse/plugins/. A plugin is active when it is installed and enabled, unless a project's settings turn it off with "plugins": { "<name>": false }. In a session, /plugins lists active plugins and load problems, and /reload-plugins re-reads them without restarting: commands, agents, skills and hooks are replaced and MCP servers reconnect.
Contributions are namespaced by plugin name:
| Contribution | Appears as |
|---|---|
| Command | /<plugin>:<command> |
| Agent profile | <plugin>:<agent> |
| Skill | <plugin>:<skill> |
| MCP server | <plugin>-<server> |
Plugin hooks run alongside your own.
Plugins run with your permissions. Install only plugins you trust, and review their hooks and MCP servers with plugin info <name> first. Organisation governance and your permission rules still decide every tool call a plugin's command or agent leads to.
Write a plugin
ni-release/
├── ni-plugin.json
├── commands/notes.md → /ni-release:notes
├── agents/changelog-writer.md → delegate agent "ni-release:changelog-writer"
├── skills/semver/SKILL.md → skill "ni-release:semver"
└── scripts/check-tag.sh
ni-plugin.json:
{
"name": "ni-release",
"version": "1.0.0",
"description": "Release notes, changelog and tagging helpers",
"author": "Acme Platform Team",
"license": "MIT",
"engines": { "neuralinverse": ">=0.1.0" },
"hooks": {
"tool.before": [{ "matcher": "run_shell", "command": "\"${NI_PLUGIN_DIR}/scripts/check-tag.sh\"" }]
},
"mcpServers": {
"changelog": { "type": "stdio", "command": "node", "args": ["${NI_PLUGIN_DIR}/server/index.js"] }
}
}
| Field | Rule |
|---|---|
name | kebab-case |
version | semver |
engines.neuralinverse | A semver range the CLI version must satisfy |
hooks | Same format as the hooks setting |
mcpServers | Same format as the MCP servers setting |
commands/,agents/andskills/use the same formats as project files; see Instructions, commands and skills.${NI_PLUGIN_DIR}expands to the installed plugin folder in hook commands and MCP server definitions, andNI_PLUGIN_DIRis set in their environment. Quote it: paths may contain spaces.- Check a plugin before publishing with
neuralinverse plugin validate <dir>.
Plugins installed from npm are unpacked without running install scripts and without installing dependencies. Ship a self-contained plugin and bundle any JavaScript it needs.