Skip to main content

Plugins

~/.config/dotfiles/claude-plugins.tsv lists every plugin; a run_after_ script (runs on every apply) keeps each installed and current across Code on macOS and Linux:

tobi/qmd qmd@qmd
joestump/claude-plugin-sdd sdd@claude-plugin-sdd
joestump/claude-skills claude-skills@joestump
~/.config/claude-marketplaces/claude-personal personal@claude-personal

GitHub marketplaces add by owner/repo. The private Gitea one (claude-personal) can't be HTTP-fetched, so a chezmoi external clones it locally (refreshed every 24h) and it's added as a local-path marketplace.

That external is credential-guarded: it's only declared on a node that has Gitea credentials (a rendered OpenBao secrets file, or a stored git credential). A git-repo external that can't authenticate aborts the whole chezmoi apply, so a credential-less node skips the private marketplace instead of bricking its apply — it reappears automatically once the node is provisioned.

Propagation

Local-path marketplaces (claude-personal) auto-reinstall when the clone's git HEAD moves — so newly-pushed skills appear without bumping the plugin version (which claude plugin update otherwise requires, and which is easy to forget). The last-installed HEAD is tracked per plugin in ~/.config/dotfiles/.claude-plugin-state/. For an immediate pull + propagate:

chezmoi apply --refresh-externals

Updating

Remote (GitHub) marketplaces are install-once. There is no bulk updateclaude plugin update requires a plugin argument in <plugin>@<marketplace> form, e.g.:

claude plugin update qmd@qmd
claude plugin update sdd@claude-plugin-sdd
claude plugin update claude-skills@joestump

In practice you rarely run these by hand: the run_after_ script already updates remote plugins and reinstalls the local-path one on every chezmoi apply.