Create Plugin
Scaffold a new Claude Code plugin from scratch.
When to use
When you want to create a new plugin that extends Claude Code with skills, commands, and agents. This generates the correct directory structure and wires up MCP tools.
Steps
- Get plugin name and description from the user
- Check for conflicts — call
mcp__claude-flow__transfer_plugin-searchto ensure the name isn't taken - Create directory structure (follows the canonical plugin contract from sibling plugins' ADR-0001s):
plugins/<name>/ ├── .claude-plugin/ │ └── plugin.json ├── skills/ │ └── <skill-name>/ │ └── SKILL.md ├── commands/ │ └── <command-name>.md ├── agents/ │ └── <agent-name>.md ├── docs/ │ └── adrs/ │ └── 0001-<name>-contract.md # Plugin-level ADR (Proposed) ├── scripts/ │ └── smoke.sh # Structural contract (10+ checks) └── README.md # Compatibility + Namespace coordination + Verification + ADR sections - Generate plugin.json with name, description, version, author (do NOT include
skills,commands, oragentsarrays — Claude Code auto-discovers these from directory structure) - Generate SKILL.md files with proper frontmatter:
--- name: skill-name description: What this skill does allowed-tools: mcp__claude-flow__tool1 mcp__claude-flow__tool2 Bash --- - Generate command files with name and description frontmatter
- Generate agent files with name, description, and
model: sonnet - Generate README.md with install instructions, features, commands, skills, AND the canonical plugin-contract sections:
- Compatibility — pin to
@claude-flow/cliv3.6 major+minor - Namespace coordination — claim a kebab-case
<plugin-stem>-<intent>namespace; defer to ruflo-agentdb ADR-0001 §"Namespace convention" - Verification —
bash plugins/<name>/scripts/smoke.sh - Architecture Decisions — link to ADR-0001
- Compatibility — pin to
- Generate ADR-0001 (Proposed) at
docs/adrs/0001-<name>-contract.mddocumenting: pinning, namespace coordination, MCP-tool surface count if applicable, smoke contract scope. Status:Proposed. - Generate scripts/smoke.sh — at minimum 8 structural checks: version + keywords; skills/agents/commands present with valid frontmatter; v3.6 pin in README; namespace coordination block in README; ADR exists with status
Proposed; no wildcard tools in skills. - Update marketplace.json if adding to the ruflo marketplace.
MCP-tool drift to avoid (per sibling-ADR lessons learned)
Several plugins shipped with subtle MCP bugs the loop has been finding. Don't replicate them:
embeddings_embeddoes not exist. Real tool isembeddings_generate. Don't referenceembeddings_embedin anyallowed-toolsline.agentdb_hierarchical-*does NOT route by namespace. It routes by tier (working|episodic|semantic). Passtier, notnamespace. For namespaced reads/writes, usememory_*instead.agentdb_pattern-*does NOT route by namespace. It routes through ReasoningBank. Don't pass anamespacearg — fallback writes to the reservedpatternnamespace viamemory-store-fallback.pattern(singular) andpatterns(plural) are different namespaces. ReasoningBank fallback writes topattern;hooks_pretrainwrites topatterns. Don't conflate them.
Plugin.json schema
Required fields:
name— plugin identifier (kebab-case)description— what the plugin doesversion— semver
Recommended fields:
author—{ "name": "...", "url": "..." }homepage,license,keywords
Optional fields:
graph_adapter— ADR-130 graph intelligence contract (commented out by default in generated output):
When// "graph_adapter": { // "edgeRelations": ["my-relation-type"], // "nodeTypes": ["entity"], // "autoRegister": true // }autoRegister: true, the plugin's edges are automatically included ingraph_edgeswrites by the core graph layer. DeclareedgeRelations— the relation types this plugin produces.
Do NOT include skills, commands, or agents arrays in plugin.json — these are auto-discovered from the directory structure by Claude Code and will cause validation errors if present.
Available MCP tools to wire
Browse available tools: mcp__claude-flow__transfer_plugin-info
Common tool categories:
memory_*— storage, search, retrievalagentdb_*— 15 controller-bridge tools (do NOT passnamespacearg — they route by tier or ReasoningBank); callagentdb_controllersat runtime for the canonical listneural_*— neural training and predictionhooks_*— lifecycle hooks and intelligencebrowser_*— browser automationworkflow_*— workflow managementaidefence_*— safety scanningembeddings_*— 10 vector-embedding tools (useembeddings_generate, NOTembeddings_embedwhich does not exist)