Claude Code plugin monorepo. Three plugins published as a single marketplace.
| Plugin | Role |
|---|---|
netdust-core |
Cross-stack discipline (memory conventions, skills, agents, MCP — live hooks in netdust-agent). Stack-agnostic. |
netdust-wp |
WordPress framework knowledge (NTDST/Bedrock). Layers on core. |
netdust-statamic |
Statamic 6 + Peak. Layers on core. |
Add the marketplace once:
claude plugin marketplace add netdust/netdust-pluginsInstall the plugins you want:
claude plugin install netdust-core@netdust-plugins
claude plugin install netdust-wp@netdust-plugins # only on WP machines
claude plugin install netdust-statamic@netdust-plugins # only on Statamic machinesRestart Claude Code to pick up newly-installed plugins.
claude plugin update netdust-core(Restart required to apply.)
This repo IS the source of truth. Edit in plugins/<name>/ and commit. To
test changes locally before pushing:
claude plugin marketplace add ./ # if not already added from a local clone
# then re-install from the local pathReleases are tagged per-plugin via claude plugin tag plugins/<name> which
creates a <name>--v<version> git tag (validated against plugin.json).
Claude Code keeps two separate caches for an installed plugin:
~/.claude/plugins/marketplaces/netdust-plugins/— git clone of this repo~/.claude/plugins/cache/netdust-plugins/<plugin>/<version>/— extracted install
claude plugin marketplace update refreshes #1. claude plugin update refreshes
#2 — but only when the plugin's version bumps. During heavy iteration we ship
many commits at the same version, so the install cache silently stays stale
and active sessions read the old content.
./scripts/sync.sh refreshes both caches from the working tree in one shot.
Run it after every git push. Idempotent. Verifies the sync at the end.
Restart Claude Code (or open a fresh session) to pick up SKILL/command changes.
The wp-new-project command historically emitted @~/.claude/plugins/netdust-wp/CLAUDE.md
into generated project CLAUDE.md files. With the marketplace install, plugins
live at versioned cache paths (~/.claude/plugins/cache/netdust-plugins/netdust-wp/<version>/CLAUDE.md),
which would break on every plugin update.
Resolution (2026-05-28): dropped the @import from the template. Skills are
the long-term answer — they're invoked explicitly when needed and don't depend
on a stable filesystem path. If future-us decides we DO need always-on context
in project CLAUDE.md from the plugin, options to revisit:
- Have plugin install/post-install create a stable symlink at
~/.claude/plugins/netdust-wp→ currently-installed cache version. - Replace
@importwith a slash-command snippet (/netdust-wp:context) that loads the same content on demand. - Move always-on context into a top-level skill that auto-activates on project-dir match.
This note exists so the question gets revisited deliberately.