Hi Paul — first off, thanks for impeccable. The skills themselves are fantastic and I rely on several of them daily. This is a packaging observation, not a complaint about the content.
What I noticed
When Claude Code installs the plugin from this marketplace, the resulting cache directory is 291 MB. For comparison, my other Claude Code plugins are in the 0.3–15 MB range. I got curious and audited the install.
Install location on my machine: ~/.claude/plugins/cache/impeccable/impeccable/2.1.1/
Size breakdown
| Size |
Path |
Used by Claude Code at runtime? |
| 280 MB |
node_modules/ (209 packages — @cloudflare 101 MB, wrangler, miniflare, puppeteer-core, playwright, jsdom, framer-motion, esbuild, zod, lodash, …) |
No |
| 6.4 MB |
public/ (impeccable.style static assets) |
No |
| ~3 MB |
.gemini/ .cursor/ .codex/ .kiro/ .opencode/ .trae/ .trae-cn/ .rovodev/ .pi/ .agents/ (pre-transformed skill copies for other harnesses) |
No |
| 464 KB |
tests/ |
No |
| 296 KB |
.claude/skills/ + .claude/agents/ — the 18 skills |
Yes |
| 276 KB |
source/skills/ (source-of-truth before transforming) |
No |
| 240 KB |
src/ (npm CLI source) |
No |
| 156 KB |
scripts/ (build scripts) |
No |
| 148 KB |
extension/ |
No |
| 136 KB |
content/ (website article source) |
No |
| 28 KB |
bin/ (npx impeccable CLI) |
No |
| 20 KB |
server/ (dev server for website) |
No |
| 8 KB |
.claude-plugin/ (manifest) |
Yes |
| various |
AGENTS.md, CLAUDE.md, HARNESSES.md, DEVELOP.md, README.md, README.npm.md, LICENSE, NOTICE.md, package.json, bun.lock, biome.json, wrangler.toml, skills-lock.json, .github/, functions/, lib/, impeccable/ (empty) |
No |
plugin.json only declares "skills": "./.claude/skills" — so effectively ~300 KB is the runtime payload and the other 290+ MB is bystander content from the monorepo.
About that node_modules/
There's no .git in the installed tree (so Claude Code is unpacking a tarball at the recorded gitCommitSha, not cloning), and your .gitignore correctly excludes node_modules/. Yet node_modules/ is fully populated, including binaries in node_modules/.bin/. So Claude Code's installer appears to be running bun install/npm install whenever it finds a package.json + lockfile. That means every Claude Code user is paying the cost of your dev dependencies even though package.json#files declares ["bin/", "src/", "LICENSE"] for npm.
Also worth a look
impeccable/ at the repo root is an empty 0-byte directory. Looks like a stray publish artifact.
- In the Claude Code plugin install path, the outer
cache/impeccable/ (marketplace slot) collides with the installer's retry logic and produces ENOTEMPTY: directory not empty, rename '…/temp_local_…' → '…/cache/impeccable' when users reinstall. That's likely a Claude Code bug rather than yours, but your plugin's large tree makes it more noticeable.
Possible ways to slim this down
Pick whichever fits your release workflow — these aren't either/or:
-
Dedicated plugin subtree or branch. Publish the Claude Code plugin from a plugin/ subdirectory (or a claude-plugin branch) containing only .claude-plugin/, .claude/skills/, .claude/agents/, README.md, LICENSE. Point marketplace.json at that source. Keeps this repo untouched.
-
Add a .claudeignore / installer allowlist. If Claude Code honors files in package.json or a plugin-level ignore file (worth checking the plugin docs), list only the runtime payload. Not sure this is supported today, but raising the same feedback with the Claude team would help.
-
Drop the other-harness dirs from the release. .gemini/, .cursor/, .codex/, .kiro/, .opencode/, .trae/, .trae-cn/, .rovodev/, .pi/, .agents/ are all dead weight to a Claude Code user. Maybe generate them at install-time via npx impeccable skills install (which the npm README already documents) rather than pre-bundling all 10 copies.
-
Make sure the packed tarball doesn't include node_modules/ or lockfiles that trigger the installer's bun install. If Claude Code's installer is in fact running bun install on plugin extraction, the easiest win is to not have a bun.lock present — move build-time deps to a separate tooling/ subpackage or have the release tarball strip it.
Rough back-of-envelope: options (1) or (3)+(4) would take the install from 291 MB to ~0.3–1 MB — a ~300× reduction — without any functional change for Claude Code users.
Happy to send a PR for option (1) if it's a direction you'd entertain. Thanks again for the great work.
Hi Paul — first off, thanks for impeccable. The skills themselves are fantastic and I rely on several of them daily. This is a packaging observation, not a complaint about the content.
What I noticed
When Claude Code installs the plugin from this marketplace, the resulting cache directory is 291 MB. For comparison, my other Claude Code plugins are in the 0.3–15 MB range. I got curious and audited the install.
Install location on my machine:
~/.claude/plugins/cache/impeccable/impeccable/2.1.1/Size breakdown
node_modules/(209 packages — @cloudflare 101 MB, wrangler, miniflare, puppeteer-core, playwright, jsdom, framer-motion, esbuild, zod, lodash, …)public/(impeccable.style static assets).gemini/ .cursor/ .codex/ .kiro/ .opencode/ .trae/ .trae-cn/ .rovodev/ .pi/ .agents/(pre-transformed skill copies for other harnesses)tests/.claude/skills/+.claude/agents/— the 18 skillssource/skills/(source-of-truth before transforming)src/(npm CLI source)scripts/(build scripts)extension/content/(website article source)bin/(npx impeccableCLI)server/(dev server for website).claude-plugin/(manifest)AGENTS.md,CLAUDE.md,HARNESSES.md,DEVELOP.md,README.md,README.npm.md,LICENSE,NOTICE.md,package.json,bun.lock,biome.json,wrangler.toml,skills-lock.json,.github/,functions/,lib/,impeccable/(empty)plugin.jsononly declares"skills": "./.claude/skills"— so effectively ~300 KB is the runtime payload and the other 290+ MB is bystander content from the monorepo.About that
node_modules/There's no
.gitin the installed tree (so Claude Code is unpacking a tarball at the recordedgitCommitSha, not cloning), and your.gitignorecorrectly excludesnode_modules/. Yetnode_modules/is fully populated, including binaries innode_modules/.bin/. So Claude Code's installer appears to be runningbun install/npm installwhenever it finds apackage.json+ lockfile. That means every Claude Code user is paying the cost of your dev dependencies even thoughpackage.json#filesdeclares["bin/", "src/", "LICENSE"]for npm.Also worth a look
impeccable/at the repo root is an empty 0-byte directory. Looks like a stray publish artifact.cache/impeccable/(marketplace slot) collides with the installer's retry logic and producesENOTEMPTY: directory not empty, rename '…/temp_local_…' → '…/cache/impeccable'when users reinstall. That's likely a Claude Code bug rather than yours, but your plugin's large tree makes it more noticeable.Possible ways to slim this down
Pick whichever fits your release workflow — these aren't either/or:
Dedicated plugin subtree or branch. Publish the Claude Code plugin from a
plugin/subdirectory (or aclaude-pluginbranch) containing only.claude-plugin/,.claude/skills/,.claude/agents/,README.md,LICENSE. Pointmarketplace.jsonat that source. Keeps this repo untouched.Add a
.claudeignore/ installer allowlist. If Claude Code honorsfilesinpackage.jsonor a plugin-level ignore file (worth checking the plugin docs), list only the runtime payload. Not sure this is supported today, but raising the same feedback with the Claude team would help.Drop the other-harness dirs from the release.
.gemini/,.cursor/,.codex/,.kiro/,.opencode/,.trae/,.trae-cn/,.rovodev/,.pi/,.agents/are all dead weight to a Claude Code user. Maybe generate them at install-time vianpx impeccable skills install(which the npm README already documents) rather than pre-bundling all 10 copies.Make sure the packed tarball doesn't include
node_modules/or lockfiles that trigger the installer'sbun install. If Claude Code's installer is in fact runningbun installon plugin extraction, the easiest win is to not have abun.lockpresent — move build-time deps to a separatetooling/subpackage or have the release tarball strip it.Rough back-of-envelope: options (1) or (3)+(4) would take the install from 291 MB to ~0.3–1 MB — a ~300× reduction — without any functional change for Claude Code users.
Happy to send a PR for option (1) if it's a direction you'd entertain. Thanks again for the great work.