Ariff-claude-plugins plugin-creator
install
source · Clone the upstream repo
git clone https://github.com/a-ariff/ariff-claude-plugins
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/a-ariff/ariff-claude-plugins "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/plugin-creator/skills/plugin-creator" ~/.claude/skills/a-ariff-ariff-claude-plugins-plugin-creator && rm -rf "$T"
manifest:
plugins/plugin-creator/skills/plugin-creator/SKILL.mdsource content
Plugin Creator Skill
This skill provides comprehensive guidance for creating Claude Code plugins with proper structure, following official patterns from the Anthropic claude-code repository.
Plugin Directory Structure
A complete Claude Code plugin follows this structure:
plugin-name/ ├── .claude-plugin/ │ └── plugin.json # Required: Plugin metadata manifest ├── agents/ # Optional: Agent definitions (.md files) │ └── agent-name.md ├── skills/ # Optional: Skill directories │ └── skill-name/ │ └── SKILL.md ├── commands/ # Optional: Slash commands (.md files) │ └── command-name.md ├── hooks/ # Optional: Event handlers │ └── hooks.json # Hook configuration └── README.md # Plugin documentation
Plugin Manifest (plugin.json)
Required fields:
: Plugin identifier (kebab-case, 3-50 chars)name
Optional fields:
: Semantic version (X.Y.Z)version
: Brief descriptiondescription
: Object withauthor
and optionalnameemail
: MCP server configurationsmcpServers
Example:
{ "name": "my-plugin", "version": "1.0.0", "description": "What the plugin does", "author": { "name": "Your Name", "email": "email@example.com" } }
Creating Agents
Agent files go in
agents/ directory with .md extension.
Agent frontmatter fields:
: Agent identifier (required)name
: Triggering conditions withdescription
blocks<example>
:model
(default),inherit
,sonnet
, oropushaiku
:color
,blue
,cyan
,green
,yellow
,magentared
: Array of allowed tools (optional, all tools if omitted)tools
Agent template:
--- name: my-agent description: >- Use this agent when the user asks to "do something", "perform action", or mentions specific keywords. <example> Context: User wants to perform specific task user: "Please do the thing" assistant: "I'll use the my-agent agent to help with this." <commentary> User explicitly requested the functionality this agent provides. </commentary> </example> model: inherit color: green tools: ["Read", "Write", "Bash"] --- You are an expert [role] specializing in [domain]. **Core Responsibilities:** 1. First responsibility 2. Second responsibility 3. Third responsibility **Process:** 1. Analyze the request 2. Plan the approach 3. Execute the solution 4. Verify the results **Quality Standards:** - Standard one - Standard two **Output Format:** Describe expected output format here.
Creating Skills
Skills go in
skills/ directory, each in its own subdirectory with a SKILL.md file.
Skill frontmatter:
: Skill identifier (required)name
: When to trigger (with strong trigger phrases)description
Skill template:
--- name: my-skill description: >- Use this skill when asked to "specific action", "related task", "keyword phrase", or when dealing with [domain]. --- # Skill Name Brief description of what this skill provides. ## When to Use - Trigger condition 1 - Trigger condition 2 - Trigger condition 3 ## Core Concepts Explain the main concepts and techniques. ## Best Practices 1. Practice one 2. Practice two 3. Practice three ## Examples ### Example 1: Basic Usage ```code example code here
Example 2: Advanced Usage
more complex example
## Creating Commands Commands go in `commands/` directory with `.md` extension. Command frontmatter: - `description`: What the command does (shown in `/` menu) - `argument-hint`: Placeholder text for arguments (optional) - `allowed-tools`: Array of tools command can use (optional) Command template: ```markdown --- description: Brief description of what command does argument-hint: <optional argument> allowed-tools: ["Read", "Write", "Bash"] --- Instructions for Claude when this command is invoked. You should: 1. Step one 2. Step two 3. Step three
Creating Hooks
Hooks go in
hooks/hooks.json and execute on specific events.
Hook events:
: Before tool execution (validate/block)PreToolUse
: After tool execution (audit/react)PostToolUse
: When Claude stops (force continue)Stop
: When subagent stopsSubagentStop
: When session begins (load context)SessionStart
: When session ends (cleanup)SessionEnd
: When user submits promptUserPromptSubmit
: Before context compactionPreCompact
: On notificationsNotification
hooks.json template:
{ "description": "Plugin hooks description", "hooks": { "PreToolUse": [ { "matcher": "Write|Edit", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate-write.sh", "timeout": 30 } ] } ], "SessionStart": [ { "matcher": "startup", "hooks": [ { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/scripts/load-context.sh" } ] } ] } }
Hook types:
: Execute bash scriptcommand
: LLM-based evaluation (for Stop, SubagentStop)prompt
Important: Use
${CLAUDE_PLUGIN_ROOT} for portable paths within plugin.
Hook Scripts
Create executable scripts in
scripts/ directory:
#!/usr/bin/env bash # scripts/validate-write.sh # Read JSON input from stdin INPUT=$(cat) # Extract fields TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name') FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty') # Validation logic if [[ "$FILE_PATH" == *.env* ]]; then echo "Cannot write to .env files" >&2 exit 2 # Exit 2 = block with message to Claude fi exit 0 # Exit 0 = allow
Exit codes:
: Success, allow action0
: Block action, stderr shown to Claude2- Other: Non-blocking error, stderr shown to user
Plugin Creation Workflow
- Plan - Determine needed components (agents, skills, commands, hooks)
- Create structure - Set up directories and plugin.json
- Implement components - Create each component file
- Add hooks - If automation needed
- Document - Write README.md
- Test - Use
claude --plugin-dir /path/to/plugin - Validate - Check structure matches specification
Quick Start Commands
Create minimal plugin:
mkdir -p my-plugin/.claude-plugin echo '{"name":"my-plugin","version":"1.0.0"}' > my-plugin/.claude-plugin/plugin.json
Add an agent:
mkdir -p my-plugin/agents # Create agents/my-agent.md with frontmatter
Add a skill:
mkdir -p my-plugin/skills/my-skill # Create skills/my-skill/SKILL.md
Add hooks:
mkdir -p my-plugin/hooks my-plugin/scripts # Create hooks/hooks.json and scripts/*.sh
References
- Official plugins: https://github.com/anthropics/claude-code/tree/main/plugins
- Plugin documentation: https://code.claude.com/docs/en/plugins
- Hooks reference: https://code.claude.com/docs/en/hooks