Skip to content

Creating Plugins

How to create a department-specific plugin for the VisiTrans Claude Toolkit.

Plugin structure

A plugin is a directory inside plugins/ with this structure:

plugins/my-department/
├── .claude-plugin/
│   ├── plugin.json              # Plugin metadata
│   ├── skill-symlinks.manifest  # Skill mappings
│   └── command-symlinks.manifest # Command mappings (optional)
├── skills/
│   └── my-skill/
│       └── SKILL.md
├── agents/                      # Optional
│   └── my-agent.md
└── commands/                    # Optional
    └── my-command.md

Step 1: Create the directory

mkdir -p plugins/my-department/.claude-plugin
mkdir -p plugins/my-department/skills

Step 2: Create plugin.json

{
  "name": "my-department",
  "version": "1.0.0",
  "description": "Skills and agents for the My Department team",
  "depends_on": ["core-standards"],
  "author": {
    "name": "My Department"
  },
  "license": "MIT",
  "components": {
    "skills": 0,
    "agents": 0,
    "commands": 0
  }
}

Update the component counts as you add skills, agents, and commands.

Step 3: Add skills

Create a skill directory with a SKILL.md file:

mkdir -p plugins/my-department/skills/my-workflow

The SKILL.md file needs YAML frontmatter:

---
name: my-workflow
description: Description of what this skill does and when to use it.
---

# My Workflow

Instructions for Claude when this skill activates...

Use the skill creator

Run /skill-creator in Claude Code for an interactive guide to creating well-structured skills.

Step 4: Create the manifest

Create plugins/my-department/.claude-plugin/skill-symlinks.manifest:

my-workflow -> skills/my-workflow

Each line maps a skill name to its directory path (relative to the plugin root).

Step 5: Register in the registry

Add your plugin to plugins/registry.json:

{
  "plugins": {
    "core-standards": { "path": "plugins/core-standards", "required": true, "version": "3.0.0" },
    "my-department": { "path": "plugins/my-department", "required": false, "version": "1.0.0", "depends_on": ["core-standards"] }
  }
}

Step 6: Install

./scripts/setup.sh --full --plugins core-standards,my-department

Adding agents

Agents go in plugins/my-department/agents/:

---
name: my-specialist
description: Use this agent when...
tools:
  - Read
  - Grep
  - Glob
---

# My Specialist Agent

You are a specialist in...

Adding commands

Commands go in plugins/my-department/commands/:

---
name: my-command
description: What this command does
argument-hint: "[optional-args]"
---

# My Command

Instructions for what happens when the user runs /my-command...

Add command mappings to .claude-plugin/command-symlinks.manifest.

Best practices

  • Keep plugins focused — one plugin per department or domain
  • Depend on core-standards — don't duplicate what the core provides
  • Use consistent frontmattername and description are required
  • Test locally — run setup.sh --verify after installation
  • Update component counts — keep plugin.json accurate