/create-plugin
Scaffold a new Claude Code plugin with proper directory structure, plugin.json, skills, commands, and agents
Claude Code
$ npx -y skills add ruvnet/ruflo --skill create-plugin --agent claude-code
Codex
$ npx skills add ruvnet/ruflo --skill create-plugin -a codex -y
Cursor
$ npx skills add ruvnet/ruflo --skill create-plugin -a cursor -y
Gemini CLI
$ npx skills add ruvnet/ruflo --skill create-plugin -a gemini-cli -y
GitHub Copilot
$ npx skills add ruvnet/ruflo --skill create-plugin -a github-copilot -y
OpenCode
$ npx skills add ruvnet/ruflo --skill create-plugin -a opencode -y
Windsurf
$ npx skills add ruvnet/ruflo --skill create-plugin -a windsurf -y
SKILL.md
create-plugin.SKILL.mdname: create-plugin
description: Scaffold a new Claude Code plugin with proper directory structure, plugin.json, skills, commands, and agents
argument-hint: "<plugin-name>"
allowed-tools: mcp__plugin_ruflo-core_ruflo__transfer_plugin-info mcp__plugin_ruflo-core_ruflo__transfer_plugin-search mcp__plugin_ruflo-core_ruflo__transfer_store-search Bash Read Write Edit
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
1. **Get plugin name and description** from the user 2. **Check for conflicts** — call `mcp__plugin_ruflo-core_ruflo__transfer_plugin-search` to ensure the name isn't taken 3. **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 (≥8 checks)
└── README.md # Compatibility + Namespace coordination + Verification + ADR sections
4. **Generate plugin.json** with name, description, version, repository (the repo URL the plugin ships from), author (do NOT include `skills`, `commands`, or `agents` arrays — Claude Code auto-discovers these from directory structure) 5. **Generate SKILL.md files** with proper frontmatter:
---
name: skill-name
description: What this skill does
allowed-tools: mcp__plugin_ruflo-core_ruflo__tool1 mcp__plugin_ruflo-core_ruflo__tool2 Bash
---
6. **Generate command files** with name and description frontmatter 7. **Generate agent files** with name, description, and `model: sonnet` 8. **Generate README.md** with install instructions, features, commands, skills, AND the canonical plugin-contract sections:
- **Compatibility** — pin to `@claude-flow/cli` v3.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
9. **Generate ADR-0001 (Proposed)** at `docs/adrs/0001-<name>-contract.md` documenting: pinning, namespace coordination, MCP-tool surface count if applicable, smoke contract scope. Status: `Proposed`. 10. **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. 11. **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_embed` does not exist.** Real tool is `embeddings_generate`. Don't reference `embeddings_embed` in any `allowed-tools` line.
- **`agentdb_hierarchical-*` does NOT route by namespace.** It routes by tier (`working|episodic|semantic`). Pass `tier`, not `namespace`. For namespaced reads/writes, use `memory_*` instead.
- **`agentdb_pattern-*` does NOT route by namespace.** It routes through ReasoningBank. Don't pass a `namespace` arg — fallback writes to the reserved `pattern` namespace via `memory-store-fallback`.
- **`pattern` (singular) and `patterns` (plural) are different namespaces.** ReasoningBank fallback writes to `pattern`; `hooks_pretrain` writes to `patterns`. Don't conflate them.
Plugin.json schema
Required fields (the repo gate `scripts/audit-plugin-manifest.mjs` fails without them):
- `name` — plugin identifier (kebab-case, must equal the directory name)
- `description` — what the plugin does
- `version` — semver (`X.Y.Z`, optional pre-release suffix); bump it on every change, because marketplace users only receive a plugin when its version changes
- `keywords` — non-empty array of strings
- `repository` — the repo URL the plugin ships from (`https://github.com/ruvnet/ruflo` for plugins in this repo), as a string or an object's `url`
Recommended fields:
- `author` — `{ "name": "...", "url": "..." }`
- `homepage`, `license`
Optional fields:
- `graph_adapter` — ADR-130 graph intelligence contract (commented out by default in generated output):
// "graph_adapter": {
// "edgeRelations": ["my-relation-type"],
// "nodeTypes": ["entity"],
// "autoRegister": true
// }When `autoRegister: true`, the plugin's edges are automatically included in `graph_edges` writes by the core graph layer. Declare `edgeRelations` — 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__plugin_ruflo-core_ruflo__transfer_plugin-info`
Common tool categories:
- `memory_*` — storage, search, retrieval
- `agentdb_*` — 20 controller-bridge tools (the count grows) (do NOT pass `namespace` arg — they route by tier or ReasoningBank); call `agentdb_controllers` at runtime for the canonical list
- `neural_*` — neural training and prediction
- `hooks_*` — lifecycle hooks and intelligence
- `browser_*` — browser automation
- `workflow_*` — workflow management
- `aidefence_*` — safety scanning
- `embeddings_*` — 10 vector-embedding tools (use `embeddings_generate`, NOT `embeddings_embed` which does not exist)
Read more
name: create-plugin description: Scaffold a new Claude Code plugin with proper directory structure, plugin.json, skills, commands, and agents argument-hint: "<plugin-name>" allowed-tools: mcp__plugin_ruflo-core_ruflo__transfer_plugin-info mcp__plugin_ruflo-core_ruflo__transfer_plugin-search mcp__plugin_ruflo-core_ruflo__transfer_store-search Bash Read Write Edit
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
1. **Get plugin name and description** from the user 2. **Check for conflicts** — call `mcp__plugin_ruflo-core_ruflo__transfer_plugin-search` to ensure the name isn't taken 3. **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 (≥8 checks) └── README.md # Compatibility + Namespace coordination + Verification + ADR sections
4. **Generate plugin.json** with name, description, version, repository (the repo URL the plugin ships from), author (do NOT include `skills`, `commands`, or `agents` arrays — Claude Code auto-discovers these from directory structure) 5. **Generate SKILL.md files** with proper frontmatter:
--- name: skill-name description: What this skill does allowed-tools: mcp__plugin_ruflo-core_ruflo__tool1 mcp__plugin_ruflo-core_ruflo__tool2 Bash ---
6. **Generate command files** with name and description frontmatter 7. **Generate agent files** with name, description, and `model: sonnet` 8. **Generate README.md** with install instructions, features, commands, skills, AND the canonical plugin-contract sections:
- **Compatibility** — pin to `@claude-flow/cli` v3.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
9. **Generate ADR-0001 (Proposed)** at `docs/adrs/0001-<name>-contract.md` documenting: pinning, namespace coordination, MCP-tool surface count if applicable, smoke contract scope. Status: `Proposed`. 10. **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. 11. **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_embed` does not exist.** Real tool is `embeddings_generate`. Don't reference `embeddings_embed` in any `allowed-tools` line.
- **`agentdb_hierarchical-*` does NOT route by namespace.** It routes by tier (`working|episodic|semantic`). Pass `tier`, not `namespace`. For namespaced reads/writes, use `memory_*` instead.
- **`agentdb_pattern-*` does NOT route by namespace.** It routes through ReasoningBank. Don't pass a `namespace` arg — fallback writes to the reserved `pattern` namespace via `memory-store-fallback`.
- **`pattern` (singular) and `patterns` (plural) are different namespaces.** ReasoningBank fallback writes to `pattern`; `hooks_pretrain` writes to `patterns`. Don't conflate them.
Plugin.json schema
Required fields (the repo gate `scripts/audit-plugin-manifest.mjs` fails without them):
- `name` — plugin identifier (kebab-case, must equal the directory name)
- `description` — what the plugin does
- `version` — semver (`X.Y.Z`, optional pre-release suffix); bump it on every change, because marketplace users only receive a plugin when its version changes
- `keywords` — non-empty array of strings
- `repository` — the repo URL the plugin ships from (`https://github.com/ruvnet/ruflo` for plugins in this repo), as a string or an object's `url`
Recommended fields:
- `author` — `{ "name": "...", "url": "..." }`
- `homepage`, `license`
Optional fields:
- `graph_adapter` — ADR-130 graph intelligence contract (commented out by default in generated output):
// "graph_adapter": {
// "edgeRelations": ["my-relation-type"],
// "nodeTypes": ["entity"],
// "autoRegister": true
// }When `autoRegister: true`, the plugin's edges are automatically included in `graph_edges` writes by the core graph layer. Declare `edgeRelations` — 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__plugin_ruflo-core_ruflo__transfer_plugin-info`
Common tool categories:
- `memory_*` — storage, search, retrieval
- `agentdb_*` — 20 controller-bridge tools (the count grows) (do NOT pass `namespace` arg — they route by tier or ReasoningBank); call `agentdb_controllers` at runtime for the canonical list
- `neural_*` — neural training and prediction
- `hooks_*` — lifecycle hooks and intelligence
- `browser_*` — browser automation
- `workflow_*` — workflow management
- `aidefence_*` — safety scanning
- `embeddings_*` — 10 vector-embedding tools (use `embeddings_generate`, NOT `embeddings_embed` which does not exist)
📖 RuFlo Explained — Build an AI Team That Plans, Remembers, Tests, and Improves A 14-chapter guide: from the basic idea to a first useful task, then memory, agent teams, plugins, cost and verification. Agent = Model + Harness.
Other skills on ruflo.
More skills from other plugins.
agentmail
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
bmad
Answers BMad questions and recommends the next skill from what is installed. Use when the user asks bmad for help, what to do…
Questions about create-plugin.
- Which coding agents can use create-plugin?
- create-plugin installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

