Agent skill
claude-plugins
Install this agent skill to your Project
npx add-skill https://github.com/bfollington/terma/tree/main/plugins/tsal/skills/claude-plugins
SKILL.md
Claude Code Plugins Quick Reference
Full docs:
Plugins vs Standalone
| Approach | Skill names | Best for |
|---|---|---|
Standalone (.claude/) |
/hello |
Personal workflows, project-specific, quick experiments |
Plugins (.claude-plugin/plugin.json) |
/plugin-name:hello |
Sharing with teams, community distribution, versioned releases |
Plugin Structure
my-plugin/
├── .claude-plugin/
│ └── plugin.json # Required manifest
├── commands/ # Slash commands (Markdown files)
├── skills/ # Agent skills (SKILL.md files)
├── agents/ # Custom agent definitions
├── hooks/
│ └── hooks.json # Event handlers
├── .mcp.json # MCP server configs
└── .lsp.json # LSP server configs
Common mistake: Don't put commands/, skills/, etc. inside .claude-plugin/. Only plugin.json goes there.
Manifest (plugin.json)
{
"name": "my-plugin",
"description": "What the plugin does",
"version": "1.0.0",
"author": {
"name": "Your Name"
},
"homepage": "https://github.com/you/my-plugin",
"repository": "https://github.com/you/my-plugin",
"license": "MIT"
}
The name field becomes the skill namespace prefix (e.g., /my-plugin:hello).
Quick Commands
Marketplace Management
# Add marketplaces
/plugin marketplace add owner/repo # GitHub
/plugin marketplace add https://gitlab.com/org/repo.git # Other Git
/plugin marketplace add ./local-path # Local directory
/plugin marketplace add https://example.com/marketplace.json # URL
# Add specific branch/tag
/plugin marketplace add owner/repo#v1.0.0
# List, update, remove
/plugin marketplace list
/plugin marketplace update marketplace-name
/plugin marketplace remove marketplace-name
Shortcuts: /plugin market works, rm instead of remove
Plugin Installation
# Install (defaults to user scope)
/plugin install plugin-name@marketplace-name
# Install with specific scope
claude plugin install plugin-name@marketplace-name --scope project
claude plugin install plugin-name@marketplace-name --scope local
# Enable/disable without uninstalling
/plugin disable plugin-name@marketplace-name
/plugin enable plugin-name@marketplace-name
# Uninstall
/plugin uninstall plugin-name@marketplace-name
Interactive UI
/plugin # Opens plugin manager with tabs:
# - Discover: browse available plugins
# - Installed: manage your plugins
# - Marketplaces: add/remove marketplaces
# - Errors: view loading errors
Navigate tabs with Tab / Shift+Tab
Installation Scopes
| Scope | Who sees it | Stored in |
|---|---|---|
| User | You, all projects | ~/.claude/settings.json |
| Project | All collaborators | .claude/settings.json |
| Local | You, this repo only | .claude/settings.local.json |
| Managed | All org users | Admin-controlled |
Testing During Development
# Load plugin from local directory
claude --plugin-dir ./my-plugin
# Load multiple plugins
claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two
Restart Claude Code after making changes.
Official Marketplace Plugins
Code Intelligence (LSP)
| Language | Plugin | Binary required |
|---|---|---|
| TypeScript | typescript-lsp |
typescript-language-server |
| Python | pyright-lsp |
pyright-langserver |
| Rust | rust-analyzer-lsp |
rust-analyzer |
| Go | gopls-lsp |
gopls |
| C/C++ | clangd-lsp |
clangd |
Install: /plugin install typescript-lsp@claude-plugins-official
External Integrations (MCP)
github, gitlab, atlassian, asana, linear, notion, figma, vercel, firebase, supabase, slack, sentry
Development Workflows
commit-commands, pr-review-toolkit, agent-sdk-dev, plugin-dev
Creating a Skill in a Plugin
Create skills/my-skill/SKILL.md:
---
name: my-skill
description: What the skill does. Use when [context].
---
Instructions for Claude when this skill is invoked...
Creating a Command in a Plugin
Create commands/hello.md:
---
description: Greet the user
disable-model-invocation: true
---
Greet the user named "$ARGUMENTS" warmly.
Use as: /my-plugin:hello Alex
Hooks in Plugins
Create hooks/hooks.json:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [{
"type": "command",
"command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix"
}]
}
]
}
}
LSP Configuration
Create .lsp.json at plugin root:
{
"go": {
"command": "gopls",
"args": ["serve"],
"extensionToLanguage": {
".go": "go"
}
}
}
Auto-Updates
- Official marketplaces: auto-update enabled by default
- Third-party/local: disabled by default
- Toggle per-marketplace in
/plugin> Marketplaces - Disable all:
export DISABLE_AUTOUPDATER=true - Plugins only:
DISABLE_AUTOUPDATER=true FORCE_AUTOUPDATE_PLUGINS=true
Team Setup
Add to .claude/settings.json for automatic marketplace prompts:
{
"extraKnownMarketplaces": ["your-org/team-plugins"],
"enabledPlugins": ["plugin-name@your-org-team-plugins"]
}
Troubleshooting
/pluginnot recognized: Requires Claude Code 1.0.33+. Runclaude --version- Plugin skills not appearing:
rm -rf ~/.claude/plugins/cache, restart, reinstall - LSP binary not found: Check
/pluginErrors tab, install required binary - Marketplace not loading: Verify
.claude-plugin/marketplace.jsonexists at path - Files not found: Plugins are cached; paths outside plugin directory won't work
Convert Standalone to Plugin
- Create
my-plugin/.claude-plugin/plugin.json - Copy
.claude/commandstomy-plugin/commands/ - Copy
.claude/skillstomy-plugin/skills/ - Move hooks from
settings.jsontomy-plugin/hooks/hooks.json - Test:
claude --plugin-dir ./my-plugin
Didn't find tool you were looking for?