Back to skills

Plugin Management

**Complete lifecycle management for Claude Code plugins in the Puerto marketplace**

3 stars
0 votes
0 copies
0 views
Added 12/19/2025
developmentjavascripttypescriptgojavabashreactnodegitapifrontend

Works with

claude codeapi

Install via CLI

$openskills install bandofai/puerto
Download Zip
Files
SKILL.md
# Puerto Plugin Management Skill

**Complete lifecycle management for Claude Code plugins in the Puerto marketplace**

## Core Principles

1. **Skills-First**: Agents MUST read skill documents before proceeding - patterns separate from workflow
2. **Validation-First**: All plugins must pass `scripts/validate-plugin.js` before publication
3. **Consistency**: Follow established Puerto conventions across all plugins
4. **Minimal Structure**: Only create directories that will contain files
5. **Pattern Learning**: Analyze similar plugins (5-10) to maintain consistency

---

## Operations Overview

The plugin manager supports five operations:

| Operation | Description |
|-----------|-------------|
| **Create** | Generate complete plugin structures with intelligent pattern learning |
| **Modify** | Update existing plugins while preserving architectural consistency |
| **Validate** | Check plugin compliance with Puerto standards |
| **Tune** | Optimize plugin configurations (model selection, tool permissions) |
| **Document** | Auto-generate comprehensive READMEs |

---

## Operation 1: Create New Plugin

### Step 1: Gather Requirements

Ask these questions one at a time:

1. **Plugin Name** (Required)
   - Format: `/^[a-z0-9-]+$/` (lowercase-hyphens only)
   - Check if `plugins/[name]/` already exists

2. **Description** (Required)
   - Brief, 1-2 sentences

3. **Version** (Default: 1.0.0)
   - Semver format

4. **Author Name** (Required)

5. **Keywords** (Recommended)
   - Comma-separated for discovery

6. **Number of Agents** (Required, >= 0)

7. **For Each Agent**:
   - Name (lowercase-hyphens)
   - Description (starts with "PROACTIVELY use when..." or "Use when...")
   - Model (haiku/sonnet/opus)
   - Tools (comma-separated)

8. **Number of Skills** (Optional, >= 0)

9. **For Each Skill**:
   - Name (lowercase-hyphens)
   - Description

10. **Templates Needed?** (Optional)

### Step 2: Pattern Learning

Find similar plugins via keywords:

```bash
for dir in plugins/*/; do
  plugin_json="$dir/.claude-plugin/plugin.json"
  if [ -f "$plugin_json" ] && grep -qi "keyword1\|keyword2" "$plugin_json"; then
    echo "$dir"
  fi
done | head -10
```

Extract patterns from 5-10 similar plugins:
- Agent count and structure
- Model selection rationale
- Tool permission patterns
- Skill organization

### Step 3: In-Memory Validation

Before creating files, validate:

```javascript
// Name format
if (!/^[a-z0-9-]+$/.test(pluginName)) {
  error("Plugin name must be lowercase alphanumeric with hyphens only");
}

// Version format
if (!/^\d+\.\d+\.\d+/.test(version)) {
  warn("Version should follow semver format");
}

// Author format
if (typeof author === 'string') {
  error("Author must be object with 'name' property, not string");
}

// Duplicate check
if (fs.existsSync(`plugins/${pluginName}`)) {
  error(`Plugin 'plugins/${pluginName}/' already exists`);
}
```

### Step 4: Present Plan for Approval

Show user what will be created:

```
Plugin Creation Plan
====================

Plugin: my-plugin (v1.0.0)
Description: Brief description here
Author: John Doe
Keywords: frontend, react, typescript

Directory Structure:
--------------------
plugins/my-plugin/
├── .claude-plugin/
│   └── plugin.json
├── agents/
│   ├── agent-1.md
│   └── agent-2.md
├── skills/
│   └── skill-1/
│       └── SKILL.md
└── README.md

Patterns applied from similar plugins:
- Skills-first approach in all agents
- Model selection: Haiku for CRUD, Sonnet for analysis

Does this plan look good? (yes/no):
```

### Step 5: Create Plugin Structure

```bash
# Create directories
mkdir -p "plugins/${plugin_name}/.claude-plugin"
[ $agent_count -gt 0 ] && mkdir -p "plugins/${plugin_name}/agents"
[ $skill_count -gt 0 ] && mkdir -p "plugins/${plugin_name}/skills"
[ $template_count -gt 0 ] && mkdir -p "plugins/${plugin_name}/templates"
```

### Step 6: Validate and Update Catalog

```bash
node scripts/validate-plugin.js "plugins/${plugin_name}"
node scripts/generate-catalog.js
```

### Step 7: Report Completion

```
✅ Plugin Created Successfully!

Location: plugins/my-plugin/

Files Created:
- plugins/my-plugin/.claude-plugin/plugin.json
- plugins/my-plugin/README.md
- plugins/my-plugin/agents/agent-1.md

Validation: ✅ Passed (0 errors, 0 warnings)
Catalog: ✅ Updated

Next Steps:
1. Review generated files and customize
2. Add implementation details to agents
3. Expand skill documents with domain-specific patterns
4. Commit changes: git add plugins/my-plugin .claude-plugin/marketplace.json

Installation Command:
/plugin install my-plugin@puerto
```

---

## Operation 2: Modify Existing Plugin

### Workflow

1. **List plugins**: `ls -d plugins/*/ | sed 's|plugins/||' | sed 's|/$||'`
2. **Select plugin** to modify
3. **Show components** (plugin.json, README, agents, skills, templates)
4. **Select component** to modify
5. **Perform modification** (preserve skills-first approach in agents)
6. **Re-validate**: `node scripts/validate-plugin.js "plugins/${plugin_name}"`
7. **Update catalog** if metadata changed
8. **Report completion**

---

## Operation 3: Validate Plugin

### Prerequisites Check

```bash
# Check Node.js
node_version=$(node --version 2>/dev/null)
if [ -z "$node_version" ]; then
  echo "❌ Error: Node.js not found. Required: >= v18.0.0"
  exit 1
fi

# Check validation script
if [ ! -f scripts/validate-plugin.js ]; then
  echo "❌ Error: scripts/validate-plugin.js not found"
  exit 1
fi
```

### Run Validation

```bash
node scripts/validate-plugin.js "plugins/${plugin_name}"
```

### Present Results with Fix Suggestions

```
Plugin Validation Report
========================

❌ ERRORS (must fix):
  - Missing required field: name
  - author must be object with "name" property

Suggested Fixes:
----------------
Error: "author must be an object..."
Fix: Change in plugin.json:
     Before: "author": "John Doe"
     After:  "author": { "name": "John Doe" }

Would you like me to apply these fixes automatically? (yes/no):
```

---

## Operation 4: Tune/Optimize Plugin

### Analysis Areas

1. **Model Selection**
   - Haiku for CRUD (cost-effective)
   - Sonnet for analysis (balanced)
   - Opus for architecture (deep reasoning)

2. **Tool Permissions**
   - Remove unused tools
   - Follow principle of least privilege

3. **Skills-First Approach**
   - Ensure all agents read skills first

4. **Documentation Quality**
   - Installation command format
   - Feature descriptions
   - Usage examples

### Optimization Report

```
Plugin Optimization Report
==========================

Model Selection:
----------------
✅ agent-1.md: haiku (appropriate for CRUD)
⚠️  agent-2.md: opus (may be overkill)
   Suggestion: Consider 'sonnet' (12x cost savings)

Tool Permissions:
-----------------
⚠️  agent-2.md: Has WebSearch but never uses it
   Suggestion: Remove unused tools

Skills-First:
-------------
❌ agent-1.md: Missing skills-first section
   Suggestion: Add mandatory skill reading step

Overall Score: 7/10
```

---

## Operation 5: Generate Documentation

### README Structure

```markdown
# Plugin Name

[Description from plugin.json]

## Installation

\`\`\`bash
/plugin install plugin-name@puerto
\`\`\`

## Features

- **[Agent 1 Name]**: [Agent 1 description]
- **[Agent 2 Name]**: [Agent 2 description]

## Usage

### [Agent Name]

[Description and examples]

## License

MIT
```

---

## Plugin Structure Reference

### Required Files

```
plugins/[plugin-name]/
├── .claude-plugin/
│   └── plugin.json          # REQUIRED
└── README.md                # HIGHLY RECOMMENDED
```

### Optional Directories (create only when needed)

```
plugins/[plugin-name]/
├── agents/                  # Agent definitions (.md)
├── skills/                  # Skill documents (subdirs with SKILL.md)
├── templates/               # Data templates (.json)
├── commands/                # Slash commands (.md)
└── hooks/                   # Lifecycle hooks (rarely used)
```

---

## plugin.json Format

### Complete Structure

```json
{
  "name": "plugin-name",
  "version": "1.0.0",
  "description": "Brief, clear description",
  "author": {
    "name": "Author Name"
  },
  "keywords": ["tag1", "tag2"],
  "agents": ["./agents/agent-name.md"],
  "skills": ["./skills/skill-name/SKILL.md"],
  "templates": ["./templates/template-name.json"]
}
```

### Validation Rules

| Field | Required | Format |
|-------|----------|--------|
| name | ✅ | `/^[a-z0-9-]+$/` |
| version | ✅ | Semver (e.g., `1.0.0`) |
| description | ✅ | Non-empty string |
| author | Recommended | Object with `name` property |
| keywords | Recommended | Array of strings |

### Common Mistakes

```json
// ❌ BAD: Author as string
{ "author": "John Doe" }

// ✅ GOOD: Author as object
{ "author": { "name": "John Doe" } }

// ❌ BAD: Uppercase name
{ "name": "MyPlugin" }

// ✅ GOOD: Lowercase with hyphens
{ "name": "my-plugin" }
```

---

## Agent Definition Format

### Complete Structure

```markdown
---
name: agent-name
description: PROACTIVELY use when [trigger]. [What it does].
tools: Read, Write, Edit, Bash, Grep, Glob
model: haiku
---

You are a [role] specializing in [domain].

## CRITICAL: Skills-First Approach

**MANDATORY FIRST STEP**: Read skill before proceeding.

\`\`\`bash
if [ -f ~/.claude/skills/skill-name/SKILL.md ]; then
    cat ~/.claude/skills/skill-name/SKILL.md
elif [ -f .claude/skills/skill-name/SKILL.md ]; then
    cat .claude/skills/skill-name/SKILL.md
elif [ -f plugins/[plugin-name]/skills/skill-name/SKILL.md ]; then
    cat plugins/[plugin-name]/skills/skill-name/SKILL.md
fi
\`\`\`

This is NON-NEGOTIABLE.

## When Invoked

1. **Read skill** (mandatory, non-skippable)
2. [Step 2]
3. [Step 3]
```

### Model Selection Guidelines

| Model | Use For | Cost |
|-------|---------|------|
| **Haiku** | CRUD, fast processing, templates | ~$0.25/1M tokens |
| **Sonnet** | Analysis, domain expertise, code review | ~$3/1M tokens |
| **Opus** | Architecture, deep reasoning, planning | ~$15/1M tokens |

### Tool Permission Sets

```yaml
# Read-only
tools: Read, Grep, Glob, Bash

# File creator
tools: Read, Write, Bash, Grep, Glob

# File editor
tools: Read, Edit, Bash, Grep, Glob

# Full file operations
tools: Read, Write, Edit, Bash, Grep, Glob

# With web research
tools: Read, Write, Edit, Bash, Grep, Glob, WebSearch, WebFetch
```

---

## Skill Document Format

### Directory Structure

```
skills/
└── skill-name/
    └── SKILL.md    # One SKILL.md per subdirectory
```

### Content Pattern

```markdown
# Skill Name

**Production patterns for [domain]**

## Core Principles

1. Principle 1
2. Principle 2

---

## Pattern 1

### Description

[Explanation]

### Example

\`\`\`[language]
// ✅ GOOD
[good example]

// ❌ BAD
[bad example]
\`\`\`

---

## Best Practices Checklist

- [ ] Item 1
- [ ] Item 2

---

**Version**: 1.0
**Last Updated**: [Date]
```

---

## Naming Conventions

| Type | Format | Examples |
|------|--------|----------|
| Plugin | `lowercase-hyphens` | `data-analyst`, `web-performance` |
| Agent | `action-noun` | `component-builder`, `progress-analyzer` |
| Skill | `noun-domain` | `component-development`, `api-implementation` |

---

## Validation Commands

```bash
# Validate single plugin
node scripts/validate-plugin.js plugins/my-plugin

# Validate all plugins
for dir in plugins/*/; do
  node scripts/validate-plugin.js "$dir"
done

# Update catalog after changes
node scripts/generate-catalog.js
```

---

## Edge Case Handling

### Duplicate Plugin Names

```
❌ Error: Plugin 'plugins/my-plugin/' already exists

Options:
1. Choose a different name
2. Overwrite existing plugin (WARNING: destructive!)
3. Cancel operation
```

### Invalid Plugin Names

```
❌ Error: Plugin name 'MyPlugin' is invalid

Plugin names must be lowercase alphanumeric with hyphens only.

✅ my-plugin, data-analyst, engineering
❌ MyPlugin, my_plugin, my plugin
```

### Validation Failures

```
❌ Plugin validation failed

Options:
1. Fix errors manually
2. Let me fix automatically (if possible)
3. Cancel operation
```

---

## Best Practices Checklist

### Plugin Structure
- [ ] plugin.json has all required fields
- [ ] Plugin name follows lowercase-hyphens convention
- [ ] Author is object with "name" property
- [ ] Version follows semver format
- [ ] README.md exists and is complete
- [ ] Only needed directories created

### Agent Definition
- [ ] YAML frontmatter complete (name, description, tools, model)
- [ ] Description starts with "PROACTIVELY use when..." or "Use when..."
- [ ] Skills-first approach implemented
- [ ] Model selection appropriate for task
- [ ] Tool permissions follow least privilege
- [ ] Clear numbered workflow steps

### Skill Document
- [ ] Located in `skills/[name]/SKILL.md`
- [ ] Contains production-tested patterns
- [ ] Includes ✅ GOOD / ❌ BAD examples
- [ ] Has core principles section
- [ ] Includes best practices checklist

### Documentation
- [ ] README has `/plugin install name@puerto`
- [ ] Features section lists clear benefits
- [ ] Usage section has examples
- [ ] License section included

### Validation
- [ ] Passes validate-plugin.js with no errors
- [ ] Warnings addressed
- [ ] Catalog regenerated
- [ ] Plugin appears in marketplace.json

---

## Quick Reference

### Create Plugin (Minimal)

```bash
mkdir -p plugins/my-plugin/.claude-plugin

cat > plugins/my-plugin/.claude-plugin/plugin.json <<EOF
{
  "name": "my-plugin",
  "version": "1.0.0",
  "description": "Brief description",
  "author": { "name": "Your Name" },
  "keywords": ["keyword1"]
}
EOF

cat > plugins/my-plugin/README.md <<EOF
# My Plugin

Description

## Installation

\`\`\`bash
/plugin install my-plugin@puerto
\`\`\`

## License

MIT
EOF

node scripts/validate-plugin.js plugins/my-plugin
node scripts/generate-catalog.js
```

---

## Important Reminders

- **NO GIT AUTOMATION**: Creates/modifies files only. User handles git.
- **INTERACTIVE ONLY**: Gather requirements via Q&A before implementing.
- **SKILLS-FIRST**: Read this skill at the start of EVERY invocation.
- **VALIDATE ALWAYS**: Run validation before presenting results.
- **PATTERN LEARNING**: Analyze 5-10 similar plugins for consistency.

---

**Version**: 2.0
**Last Updated**: January 2025
**Use Cases**: Puerto plugin creation, modification, validation, tuning, documentation

Comments (0)

No comments yet. Be the first to comment!