358 lines
8.8 KiB
Markdown
358 lines
8.8 KiB
Markdown
---
|
|
name: marketplace-update
|
|
description: Updates the .claude-plugin/marketplace.json file when plugins are added, modified, or removed. Use when creating or updating plugin entries in the marketplace catalog.
|
|
---
|
|
|
|
# Marketplace Update Skill
|
|
|
|
This skill provides functionality to update the `.claude-plugin/marketplace.json` file when plugins are added, modified, or removed from the marketplace.
|
|
|
|
## Purpose
|
|
|
|
Maintain the marketplace catalog by:
|
|
|
|
- Adding new plugin entries
|
|
- Updating existing plugin metadata
|
|
- Removing obsolete plugins
|
|
- Validating marketplace structure
|
|
- Ensuring consistency across the catalog
|
|
|
|
## When to Use
|
|
|
|
Use this skill when:
|
|
|
|
- A new plugin is created and needs to be registered
|
|
- An existing plugin's components change (agents, commands, skills added/removed)
|
|
- Plugin metadata needs updating (version, description, keywords, etc.)
|
|
- A plugin is being removed from the marketplace
|
|
- Validating marketplace.json structure
|
|
|
|
## Marketplace Structure
|
|
|
|
The marketplace.json file follows this schema:
|
|
|
|
```json
|
|
{
|
|
"name": "marketplace-name",
|
|
"owner": {
|
|
"name": "Owner Name",
|
|
"email": "email@example.com",
|
|
"url": "https://github.com/username"
|
|
},
|
|
"metadata": {
|
|
"description": "Marketplace description",
|
|
"version": "1.0.0"
|
|
},
|
|
"plugins": [
|
|
{
|
|
"name": "plugin-name",
|
|
"source": "./plugins/plugin-name",
|
|
"description": "Plugin description",
|
|
"version": "1.0.0",
|
|
"author": {
|
|
"name": "Author Name",
|
|
"url": "https://github.com/username"
|
|
},
|
|
"homepage": "https://github.com/username/repo",
|
|
"repository": "https://github.com/username/repo",
|
|
"license": "MIT",
|
|
"keywords": ["keyword1", "keyword2"],
|
|
"category": "category-name",
|
|
"strict": false,
|
|
"commands": ["./commands/command-name.md"],
|
|
"agents": ["./agents/agent-name.md"],
|
|
"skills": ["./skills/skill-name"]
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## Operations
|
|
|
|
### Add Plugin
|
|
|
|
Add a new plugin entry to the marketplace:
|
|
|
|
```python
|
|
# Use the provided Python script
|
|
python marketplace_update.py add \
|
|
--name "plugin-name" \
|
|
--description "Plugin description" \
|
|
--version "1.0.0" \
|
|
--category "category-name" \
|
|
--agents "agent1.md,agent2.md" \
|
|
--commands "command1.md,command2.md" \
|
|
--skills "skill1,skill2"
|
|
```
|
|
|
|
**Required Fields:**
|
|
|
|
- `name` - Plugin name (hyphen-case)
|
|
- `description` - Brief plugin description
|
|
- `version` - Semantic version (e.g., "1.0.0")
|
|
|
|
**Optional Fields:**
|
|
|
|
- `category` - Plugin category (default: "general")
|
|
- `agents` - Comma-separated list of agent files
|
|
- `commands` - Comma-separated list of command files
|
|
- `skills` - Comma-separated list of skill directories
|
|
- `keywords` - Comma-separated list of keywords
|
|
- `license` - License type (default: "MIT")
|
|
- `strict` - Strict mode flag (default: false)
|
|
|
|
### Update Plugin
|
|
|
|
Update an existing plugin entry:
|
|
|
|
```python
|
|
python marketplace_update.py update \
|
|
--name "plugin-name" \
|
|
--description "Updated description" \
|
|
--version "1.1.0" \
|
|
--add-agent "new-agent.md" \
|
|
--remove-command "old-command.md"
|
|
```
|
|
|
|
**Update Operations:**
|
|
|
|
- `--description` - Update description
|
|
- `--version` - Update version
|
|
- `--category` - Update category
|
|
- `--keywords` - Update keywords (replaces all)
|
|
- `--add-agent` - Add agent file
|
|
- `--remove-agent` - Remove agent file
|
|
- `--add-command` - Add command file
|
|
- `--remove-command` - Remove command file
|
|
- `--add-skill` - Add skill directory
|
|
- `--remove-skill` - Remove skill directory
|
|
|
|
### Remove Plugin
|
|
|
|
Remove a plugin from the marketplace:
|
|
|
|
```python
|
|
python marketplace_update.py remove --name "plugin-name"
|
|
```
|
|
|
|
### Validate Marketplace
|
|
|
|
Validate the marketplace.json structure:
|
|
|
|
```python
|
|
python marketplace_update.py validate
|
|
```
|
|
|
|
This checks:
|
|
|
|
- JSON syntax validity
|
|
- Required fields presence
|
|
- File path existence
|
|
- Component reference validity
|
|
- Duplicate plugin names
|
|
|
|
## Python Script
|
|
|
|
The skill includes a Python script at `marketplace_update.py` that provides command-line interface for all operations.
|
|
|
|
### Usage from Claude Code
|
|
|
|
When invoked as a skill:
|
|
|
|
1. **Read Plugin Structure**
|
|
|
|
- Scan plugin directory for components
|
|
- Extract metadata from frontmatter
|
|
- Build component lists
|
|
|
|
2. **Execute Python Script**
|
|
|
|
- Call marketplace_update.py with appropriate arguments
|
|
- Pass plugin details
|
|
- Handle success/error responses
|
|
|
|
3. **Validate Result**
|
|
- Verify marketplace.json is valid
|
|
- Confirm plugin entry is correct
|
|
- Report success or errors
|
|
|
|
## Examples
|
|
|
|
### Example 1: Add New Plugin
|
|
|
|
```python
|
|
# Plugin: golang-development
|
|
# Components: 3 agents, 1 command, 4 skills
|
|
|
|
python marketplace_update.py add \
|
|
--name "golang-development" \
|
|
--description "Go language development tools" \
|
|
--version "1.0.0" \
|
|
--category "languages" \
|
|
--keywords "golang,go,development" \
|
|
--agents "golang-pro.md,gin-pro.md,charm-pro.md" \
|
|
--commands "golang-scaffold.md" \
|
|
--skills "async-golang-patterns,golang-testing-patterns,golang-packaging,golang-performance-optimization"
|
|
```
|
|
|
|
### Example 2: Update Plugin Version
|
|
|
|
```python
|
|
# Update version and add new agent
|
|
|
|
python marketplace_update.py update \
|
|
--name "golang-development" \
|
|
--version "1.1.0" \
|
|
--add-agent "gorm-pro.md"
|
|
```
|
|
|
|
### Example 3: Remove Plugin
|
|
|
|
```python
|
|
python marketplace_update.py remove --name "obsolete-plugin"
|
|
```
|
|
|
|
## Integration with Commands
|
|
|
|
The `/claude-plugin:create` and `/claude-plugin:update` commands should invoke this skill automatically:
|
|
|
|
### From /claude-plugin:create Command
|
|
|
|
After creating a new plugin:
|
|
|
|
```
|
|
1. Scan plugin directory for components
|
|
2. Extract metadata from agent/command frontmatter
|
|
3. Invoke marketplace-update skill:
|
|
- Operation: add
|
|
- Plugin name: [from user input]
|
|
- Components: [scanned from directory]
|
|
- Metadata: [extracted from frontmatter]
|
|
```
|
|
|
|
### From /claude-plugin:update Command
|
|
|
|
After updating a plugin:
|
|
|
|
```
|
|
1. Determine what changed (added/removed/modified)
|
|
2. Invoke marketplace-update skill:
|
|
- Operation: update
|
|
- Plugin name: [from user input]
|
|
- Changes: [specific updates]
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
### Plugin Already Exists (Add)
|
|
|
|
```
|
|
Error: Plugin 'plugin-name' already exists in marketplace.
|
|
Suggestion: Use 'update' operation instead.
|
|
```
|
|
|
|
### Plugin Not Found (Update/Remove)
|
|
|
|
```
|
|
Error: Plugin 'plugin-name' not found in marketplace.
|
|
Suggestion: Use 'add' operation to create it.
|
|
```
|
|
|
|
### Invalid JSON
|
|
|
|
```
|
|
Error: marketplace.json contains invalid JSON.
|
|
Suggestion: Fix JSON syntax before proceeding.
|
|
```
|
|
|
|
### Component File Missing
|
|
|
|
```
|
|
Warning: Component file './agents/agent-name.md' not found.
|
|
Suggestion: Create the file or remove from plugin entry.
|
|
```
|
|
|
|
### Validation Failure
|
|
|
|
```
|
|
Error: Marketplace validation failed:
|
|
- Plugin 'plugin-a' missing required field 'description'
|
|
- Plugin 'plugin-b' references non-existent agent 'missing.md'
|
|
Suggestion: Fix errors and validate again.
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Always Validate After Changes**
|
|
|
|
- Run validate after add/update/remove
|
|
- Fix any warnings or errors
|
|
- Ensure all referenced files exist
|
|
|
|
2. **Scan Plugin Directory**
|
|
|
|
- Don't manually list components
|
|
- Scan directory to detect agents/commands/skills
|
|
- Extract metadata from frontmatter
|
|
|
|
3. **Semantic Versioning**
|
|
|
|
- Patch: Bug fixes, documentation updates (1.0.0 → 1.0.1)
|
|
- Minor: New components, enhancements (1.0.0 → 1.1.0)
|
|
- Major: Breaking changes, removals (1.0.0 → 2.0.0)
|
|
|
|
4. **Consistent Metadata**
|
|
|
|
- Keep descriptions concise (< 100 chars)
|
|
- Use relevant keywords
|
|
- Maintain consistent author information
|
|
- Use appropriate categories
|
|
|
|
5. **Backup Before Changes**
|
|
- Create backup of marketplace.json
|
|
- Test changes in development first
|
|
- Validate before committing
|
|
|
|
## Categories
|
|
|
|
Common plugin categories:
|
|
|
|
- `languages` - Language-specific tools (Python, Go, Rust, etc.)
|
|
- `development` - General development tools
|
|
- `security` - Security scanning and analysis
|
|
- `testing` - Test generation and automation
|
|
- `operations` - DevOps and operations tools
|
|
- `infrastructure` - Cloud and infrastructure tools
|
|
- `documentation` - Documentation generation
|
|
- `architecture` - Architecture and design tools
|
|
- `workflow` - Workflow orchestration
|
|
- `general` - General purpose tools
|
|
|
|
## File Structure
|
|
|
|
```
|
|
plugins/claude-plugin/skills/marketplace-update/
|
|
├── SKILL.md # This file
|
|
├── marketplace_update.py # Python implementation
|
|
└── references/ # Optional examples
|
|
└── examples.md
|
|
```
|
|
|
|
## Requirements
|
|
|
|
- Python 3.8+
|
|
- No external dependencies (uses standard library only)
|
|
- Access to `.claude-plugin/marketplace.json`
|
|
- Read/write permissions on marketplace file
|
|
|
|
## Success Criteria
|
|
|
|
After running this skill:
|
|
|
|
- ✓ marketplace.json is valid JSON
|
|
- ✓ Plugin entry is correct and complete
|
|
- ✓ All referenced files exist
|
|
- ✓ No duplicate plugin names
|
|
- ✓ Required fields are present
|
|
- ✓ Validation passes without errors
|