Skip to content
claudewheel.plugins
Edit
On this page

Reads what a profile's plugin tree holds -- the marketplace clone and the plugins installed from it -- and removes the whole tree when asked.

#claudewheel.plugins

#claudewheel.plugins

Claude Code's plugin tree inside a profile: inventory it, and remove it.

Left alone, Claude Code clones the official plugin marketplace into a profile on first launch and installs three language-server plugins from it -- six to ten megabytes per profile, the clone being nearly all of it, for something no claudewheel profile asked for. New launches no longer collect it (the launch environment suppresses the auto-install), but a profile that already has the tree keeps it.

Removing those is deliberately NOT part of the canonical settings reconciliation. That reconciliation is exact by design -- it rewrites each managed target to the canonical model on every run -- so folding a plugin purge into it would mean deleting plugin state every time anyone reconciled anything, including state a user installed on purpose. This is a separate opt-in operation instead, and it names what it is about to remove first.

The layout, as observed on real profiles::

/plugins/ marketplaces// the git clone -- the megabytes cache/// the installed plugin data/-/ per-plugin state installed_plugins.json, known_marketplaces.json, ...

A plugins entry that is a symlink is not this tree: it points at something the profile does not own, and neither the size nor the removal follows it.

#PluginInventory

What one profile's plugin tree holds, read without touching it.

#path

python
def path(self) -> Path

The plugin tree's path, whether or not it exists.

#_names

python
def _names(directory: Path) -> tuple[str, ...]

The sorted names of the subdirectories of directory, or nothing.

#_tree_size

python
def _tree_size(root: Path) -> int

The bytes of every regular file under root, symlinks not followed.

#inventory

python
def inventory(config_dir: Path) -> PluginInventory

Read config_dir's plugin tree. Changes nothing.

A missing tree, and a plugins entry that is a symlink, both answer "no tree here": the second is a pointer at data the profile does not own, and reporting its size as the profile's would be reporting someone else's.

#purge

python
def purge(config_dir: Path) -> bool

Remove config_dir's plugin tree. True when there was one to remove.

A symlinked plugins entry is left exactly as it is: following it would delete a tree belonging to whatever it points at.

More tools from this site

  • claudestream Drive Claude Code from Python: run it as a subprocess and read its output as typed events, with async and sync sessions, sandbox policies, and tools you define in Python
  • dirstat Fast, single-binary directory statistics CLI: every file under a tree grouped by format, with counts, sizes, and lines of code, as a colored terminal table or as JSON
  • fastware A batteries-included ASGI framework: msgspec JSON, a managed Granian server, dependency injection, SSE, WebSockets, auth, and a test client
  • go-toml-edit Zero-dep TOML editing library for Go with comment preservation
  • howmuchleft The fastest Claude Code statusline: context window, 5-hour, and weekly limit usage as three customizable gradient bars, rendering in about 6 ms
  • orxtra
  • pgdesign
  • predraw Declarative rendering pipeline: describe a scene in JSON and get SVG, PNG and WebP out, with light and dark style tokens, reusable components and text converted to path outlines
  • reposummary Turn a git repository's history into a Markdown journal: pick a time window or revision range and get a readable digest of what changed, optionally narrated by an LLM
  • rlsbl Release orchestration and project scaffolding CLI that bumps versions, validates a structured JSONL changelog, tags only the commit CI verified, and publishes to npm, PyPI, Go and more
  • safegit git wrapper CLI that gives each commit its own temporary index and retries ref updates on conflict, so concurrent agents share one repository
  • saferm Command-line replacement for rm that archives every deletion with a mandatory reason and the context it ran in, so deleted files can be listed, inspected and restored
  • selfdoc Static Site Generator that builds a project's documentation site directly from its source code, so the docs can never drift from the code they describe, with SEO/AEO, first-class blog, search, and cross-project linking built in
  • strictcli
  • stricttest An always-on test-isolation floor: a pytest plugin and a Go env-hygiene module that make a test suite structurally unable to reach real credentials, the real HOME, the network, or the development repository.
  • wesktop A Python framework that turns an ASGI web app into a desktop application, serving it from a local Granian server and displaying it in a native OS window via pywebview
Search