136 lines
2.8 KiB
Markdown
136 lines
2.8 KiB
Markdown
# Example: Simple Plugin
|
|
|
|
This example shows a minimal but complete Claude Code plugin.
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
my-greeting-plugin/
|
|
├── .claude-plugin/
|
|
│ └── plugin.json
|
|
├── commands/
|
|
│ └── greet.md
|
|
└── README.md
|
|
```
|
|
|
|
## plugin.json
|
|
|
|
```json
|
|
{
|
|
"name": "my-greeting-plugin",
|
|
"version": "1.0.0",
|
|
"description": "A simple greeting plugin",
|
|
"author": {
|
|
"name": "Your Name"
|
|
},
|
|
"license": "MIT",
|
|
"keywords": ["greeting", "example"]
|
|
}
|
|
```
|
|
|
|
**Note**: No `commands` field needed since we're using the standard `commands/` directory.
|
|
|
|
## commands/greet.md
|
|
|
|
```markdown
|
|
---
|
|
description: Greet the user with a personalized message
|
|
argument-hint: [name]
|
|
---
|
|
|
|
# Greet Command
|
|
|
|
Provide a warm, friendly greeting to the user.
|
|
|
|
## Instructions
|
|
|
|
1. If the user provided a name via `$ARGUMENTS`, greet them personally
|
|
2. If no name provided, use a generic friendly greeting
|
|
3. Add a fun emoji to make it welcoming
|
|
|
|
## Examples
|
|
|
|
**Input**: `/my-greeting-plugin:greet Alice`
|
|
**Output**: "Hello, Alice! 👋 Great to see you!"
|
|
|
|
**Input**: `/my-greeting-plugin:greet`
|
|
**Output**: "Hello there! 👋 How can I help you today?"
|
|
```
|
|
|
|
## README.md
|
|
|
|
```markdown
|
|
# My Greeting Plugin
|
|
|
|
A simple example plugin that demonstrates Claude Code plugin basics.
|
|
|
|
## Installation
|
|
|
|
From a marketplace:
|
|
```bash
|
|
/plugin install my-greeting-plugin@marketplace-name
|
|
```
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
/my-greeting-plugin:greet [name]
|
|
```
|
|
|
|
## Examples
|
|
|
|
- `/my-greeting-plugin:greet World` - Greet with a name
|
|
- `/my-greeting-plugin:greet` - Generic greeting
|
|
```
|
|
|
|
## Adding to a Marketplace
|
|
|
|
In your marketplace's `.claude-plugin/marketplace.json`:
|
|
|
|
```json
|
|
{
|
|
"plugins": [
|
|
{
|
|
"name": "my-greeting-plugin",
|
|
"description": "A simple greeting plugin",
|
|
"version": "1.0.0",
|
|
"author": {
|
|
"name": "Your Name"
|
|
},
|
|
"source": "./plugins/my-greeting-plugin",
|
|
"category": "examples",
|
|
"tags": ["greeting", "example"]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Testing Locally
|
|
|
|
1. Create the plugin structure
|
|
2. Create a dev marketplace:
|
|
```bash
|
|
mkdir -p dev-marketplace/.claude-plugin
|
|
```
|
|
3. Create `dev-marketplace/.claude-plugin/marketplace.json` (see above)
|
|
4. Add marketplace:
|
|
```bash
|
|
/plugin marketplace add ./dev-marketplace
|
|
```
|
|
5. Install plugin:
|
|
```bash
|
|
/plugin install my-greeting-plugin@dev-marketplace
|
|
```
|
|
6. Test command:
|
|
```bash
|
|
/my-greeting-plugin:greet World
|
|
```
|
|
|
|
## Key Takeaways
|
|
|
|
- **Minimal structure**: Only `.claude-plugin/plugin.json` and `commands/` are required
|
|
- **Frontmatter**: Commands need `description` (and optionally `argument-hint`)
|
|
- **Namespacing**: Commands are called with `/plugin-name:command-name`
|
|
- **Arguments**: Access via `$ARGUMENTS` or `$1`, `$2`, etc.
|
|
- **Standard paths**: No need to specify component fields in `plugin.json` when using standard directories
|