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¶
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:
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:
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¶
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 frontmatter —
nameanddescriptionare required - Test locally — run
setup.sh --verifyafter installation - Update component counts — keep
plugin.jsonaccurate