Replace CLAUDE.md's paragraph-length plugin table with a one-line-per-plugin table plus a pointer to README.md's generated table, cutting the repo's always-loaded context from 1,656 words to under 800.
Every session pays for CLAUDE.md before a single word of the task is read. Its 13-row plugin table is a hand-maintained third copy of data that marketplace.json owns and README.md already generates. Cutting it back to one line per plugin frees roughly 900 words of always-loaded context, and we will know it worked when CLAUDE.md drops under 800 words with every plugin still listed.
Read and implement all steps in the plan at docs/plans/replace-claude-md-plugin-table.md — Stop paying for a plugin catalog in every session. Verify against the plan's Tests, Verification, and Acceptance Criteria before reporting done. If everything passed, mark completion in docs/plans/replace-claude-md-plugin-table.md — tick each step's [x] marker and each criterion's - [x], set status: completed — and re-render the HTML from the spec. If any check failed, leave status: in-progress and say which.
More ways to run this plan — goal & workflow prompts, file path
Achieve this goal: Stop paying for a plugin catalog in every session. The plan at docs/plans/replace-claude-md-plugin-table.md describes one approach — use it as reference, but optimize for the outcome. Fan out across parallel subagents where that serves the outcome. Verify against the plan's Tests, Verification, and Acceptance Criteria before reporting done. If everything passed, mark completion in docs/plans/replace-claude-md-plugin-table.md — tick each step's [x] marker and each criterion's - [x], set status: completed — and re-render the HTML from the spec. If any check failed, leave status: in-progress and say which.
Run a workflow to implement the plan at docs/plans/replace-claude-md-plugin-table.md — Stop paying for a plugin catalog in every session. Brief subagents with the plan file at docs/plans/replace-claude-md-plugin-table.md. Reserve a final verification phase for the lead agent, not a subagent. Verify against the plan's Tests, Verification, and Acceptance Criteria before reporting done. If everything passed, mark completion in docs/plans/replace-claude-md-plugin-table.md — tick each step's [x] marker and each criterion's - [x], set status: completed — and re-render the HTML from the spec. If any check failed, leave status: in-progress and say which.
replace-claude-md-plugin-table.html
docs/plans/replace-claude-md-plugin-table.html
docs/plans/replace-claude-md-plugin-table.md
Context
The story behind this plan — what prompted the work and why it matters now.
The Claude 5 context-engineering guidance is explicit that CLAUDE.md should
carry repository gotchas, not obvious facts, and that detail belongs behind
progressive disclosure rather than in the always-loaded layer. This repo's
CLAUDE.md is 1,656 words and the 13-row plugin table is the bulk of it — theartifact-tools row alone runs about 250 words describing every skill's
internals.
That detail is not unique. .claude-plugin/marketplace.json is the source of
truth for plugin metadata, scripts/build-readme-table.mjs already
regenerates a plugin table into README.md from it (with a --check mode), and
all 13 plugins carry their own README.md averaging 1,800 words. The CLAUDE.md
table is a hand-maintained third copy, which is exactly why its rows have
drifted into essays while the generated one stayed terse.
Risk: a row may describe a genuine gotcha that exists nowhere else — a
non-obvious constraint rather than a feature list. Mitigated by Step 1, which
audits every row against its plugin README before anything is cut, and Step 2,
which ports orphaned detail into the owning README first.
One wrinkle on version bumps. changedPlugins() inscripts/check-plugin-versions.mjs matches on ^kit/plugins/([^/]+)/ — it
counts any path under a plugin directory as a plugin change, README files
included. So if Step 2 finds orphaned detail and moves it into a plugin'sREADME.md, that plugin needs a marketplace.json version bump (patch, docs
only) and a CHANGELOG.md entry, or CI fails. Step 2b handles this
conditionally: zero orphans means zero bumps, which is the likely case since
all 13 READMEs already average 1,800 words.
CLAUDE.md itself lives at the repo root and never triggers a bump.
Files that change
Every file this plan touches, and what happens to each one.
CLAUDE.mdmodified collapse the plugin table, add the README pointerkit/plugins/*/README.mdmodified receive any detail found only in CLAUDE.mdtests/plugins/test-claude-md-budget.shnew objective test.github/workflows/check-plugin-versions.ymlmodified wire the new test
Steps
The step-by-step work, in order — each step says what to do, why it matters, and how to check it worked.
kit/plugins/<name>/README.md, writing the orphan list to a scratch file.
.claude-plugin/marketplace.json by a patch level and add a CHANGELOG.md entry noting the migrated documentation; if Step 2 modified no README, skip this step entirely. Why: changedPlugins() treats any path under kit/plugins/<name>/ as a plugin change, so an unbumped README edit fails the version guard in CI. Verify: BASE_REF=main node scripts/check-plugin-versions.mjs exits 0, and git diff --name-only main -- 'kit/plugins/*/README.md' lists exactly the plugins bumped.| Plugin | Type | Purpose | with the purpose held to one line under 15 words, and replace the removed prose with a single sentence pointing at README.md's generated Plugin Reference Table and at kit/plugins/<name>/README.md for detail.
wc -w CLAUDE.md reports under 800, and every plugin in .claude-plugin/marketplace.json still appears in the table.tests/plugins/test-claude-md-budget.sh asserting CLAUDE.md is under 800 words, that every plugin name in marketplace.json appears in CLAUDE.md, and that no table row exceeds 25 words.
bash tests/plugins/test-claude-md-budget.sh exits 0; temporarily padding a row to 40 words makes it exit 1..github/workflows/check-plugin-versions.yml alongside the existing tests/plugins/test-build-skill.sh step.
test-claude-md-budget.sh and yamllint or a YAML parse of the file succeeds.Tests
The tests that prove the change does what it promises.
Definition of done
The plan counts as done when every statement below is true — check each one off as you verify it.
Final check
One last pass to confirm the whole change works end to end.
Run wc -w CLAUDE.md and confirm the count is under 800, down from 1,656.
Run bash tests/plugins/test-claude-md-budget.sh and confirm exit 0, then
pad one table row past 25 words, re-run, and confirm exit 1 before reverting
the padding — this proves the check is not a tautology.
Then confirm no information was lost: for three plugins picked at random, take
a capability that the old CLAUDE.md row described and grep for it in that
plugin's README.md. All three must be found. Finally rungit diff --stat and confirm the only changed paths are CLAUDE.md, pluginREADME.md files, the new test, and the workflow.
Wrapping up
Three gates that must all pass before this plan is marked completed.
Completion Report
No items to report — all requirements met.