Plugin Conventions
Each plugin lives under plugins/<name>/ and must contain:
README.md— purpose, slash commands exposed, install instructionsPLUGIN.mdorplugin.json— machine-readable manifesttests/— at least one test file appropriate to the plugin's language
Directory Rules
- Python-heavy plugins:
pyproject.tomlat plugin root, tests run viauv run pytest plugins/<name>/tests/ - Shell-heavy plugins: tests use bats (
*.bats), run viabats plugins/<name>/tests/ - JS plugins: test file at
test.js, run vianode plugins/<name>/test.js - Multi-language: Makefile with
testandlinttargets; run viamake -C plugins/<name> test
Manifest Fields
Required in plugin manifest:
name— matches directory name exactlyversion— semverdescription— one sentence, no trailing periodcommands— list of slash commands this plugin provides
Naming
- Plugin directory:
kebab-case - Exposed slash commands:
/kebab-case - Python modules inside plugin:
snake_case.py - Hook scripts:
snake_case.{py,sh,js}
Validation
Run after any plugin change:
uv tool run "claudelint@0.3.3" --strict plugins/<name>/
node plugins/plugin-validator/test.js