A Claude Code plugin marketplace for Whaly engineering.
| Plugin | Contents |
|---|---|
whaly-tools |
Skills for the Whaly platform monorepo: using-wlyctl (the wlyctl resource-management workflow) and whaly-dbt-models (dbt model architecture & SQL style for client projects). |
/plugin marketplace add whalyapp/claude-plugins
/plugin install whaly-tools@whaly
Skills are namespaced under the plugin, e.g. /whaly-tools:using-wlyctl,
/whaly-tools:whaly-dbt-models.
Install with user scope if you work across several client repos — a project-scoped install only activates inside that one directory.
Commit this into a repo's .claude/settings.json and everyone who opens the repo gets the plugin automatically:
{
"extraKnownMarketplaces": {
"whaly": {
"source": { "source": "github", "repo": "whalyapp/claude-plugins" },
"autoUpdate": true
}
},
"enabledPlugins": {
"whaly-tools@whaly": true
}
}.claude-plugin/marketplace.json # marketplace manifest (lists plugins)
plugins/whaly-tools/
.claude-plugin/plugin.json # plugin manifest
skills/<name>/SKILL.md # one folder per skill
skills/<name>/references/ # optional: progressive-disclosure docs
skills/<name>/templates/ # optional: files to copy from
skills/<name>/scripts/ # optional: helper scripts
Drop a new skills/<name>/SKILL.md into plugins/whaly-tools/skills/, bump version
in plugins/whaly-tools/.claude-plugin/plugin.json, and push. Installed users pick it
up on the next update — no re-install needed.
Use ${CLAUDE_PLUGIN_ROOT} for every path to a bundled file. An installed plugin lives under
~/.claude/plugins/cache/whaly/whaly-tools/<version>/, so a hardcoded ~/.claude/skills/... path
(fine while you develop the skill locally) breaks for everyone else:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/<name>/scripts/foo.py" # ✅ portable
python3 ~/.claude/skills/<name>/scripts/foo.py # ❌ local-onlyIf you developed the skill in ~/.claude/skills/<name>/, delete that copy once it ships here —
otherwise you keep editing the personal one while everybody else consumes the plugin.