This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
A Claude Code plugin marketplace — a catalog of staff-contributed plugins (skills, agents, hooks) that Mattermost engineers install into their own projects. There is no application code, build system, or test suite. The repo is purely declarative: JSON manifests + Markdown skill definitions.
claude plugin validate .This is the only "build/test" command. Run it after any structural change.
.claude-plugin/marketplace.json # Central catalog — lists every plugin
plugins/<name>/ # One directory per plugin
.claude-plugin/plugin.json # Plugin manifest (name, version, author, keywords)
skills/<skill-name>/SKILL.md # Skill prompt with YAML frontmatter
README.md # Plugin-level docs
templates/ # Starter templates for new plugins/skills
marketplace.json has "pluginRoot": "./plugins", so each plugin's "source" field is just its directory name (e.g., "source": "code-simplifier" resolves to ./plugins/code-simplifier).
Every change follows the same pattern — there is no variation:
- Create
plugins/<name>/.claude-plugin/plugin.json - Create
plugins/<name>/skills/<skill-name>/SKILL.mdwith YAML frontmatter (name,description) - Create
plugins/<name>/README.md - Append an entry to
.claude-plugin/marketplace.jsonpluginsarray - Append a row to the "Available Plugins" table in
README.md
Use templates/plugin/ as a starting point. Plugin and skill names use kebab-case.
- SKILL.md frontmatter: Must include
nameanddescription. Usedisable-model-invocation: truefor skills with side effects. Useallowed-toolsto restrict tool access for read-only skills. - plugin.json fields:
name,description,version(semver),author.name,keywords(array). - marketplace.json entry fields:
name,source,description,version,category,tags,author.name. - Categories:
code-quality,conventions,testing,devops,git,docs,security,productivity. - Skill invocation pattern:
/plugin-name:skill-name(skills are namespaced by plugin). - Keep SKILL.md under 500 lines — move reference material to separate files loaded on demand.
${CLAUDE_PLUGIN_ROOT}— use this env var in hooks/scripts to reference files within the plugin (plugins are copied to a cache on install).