/reload-plugins re-injects full skill roster without evicting the session-start copy (+~7.5k tokens per reload)
Summary
Running /reload-plugins mid-session injects a complete second copy of the skills roster (and related listings) into the conversation context without evicting the copy injected at session start. Both copies then persist for the remainder of the session, and every subsequent turn reprocesses both.
Reproduction
- Start a session with a meaningful number of plugins/skills enabled (observed with ~40 plugins / ~150 skills).
- Note the session-start skills listing in the transcript.
- Run
/reload-plugins. - Inspect the transcript JSONL: a byte-equivalent full roster block appears again after the reload, while the session-start block remains in context.
Measured impact
In a transcript with ~150 skills, the duplicated roster block measured ~30KB (~7.5k tokens at chars/4). Sessions that reload more than once pay this repeatedly. In multi-session/orchestration setups where subagents inherit or re-receive listings, the duplication multiplies.
Expected behavior
/reload-plugins should replace (evict or supersede) the previously injected roster rather than appending a second copy — the stale listing is not merely redundant, it can disagree with the fresh one after the reload.
Environment
- Claude Code CLI (recent build, macOS/darwin)
- Observed via transcript inspection (
~/.claude/projects/<dir>/<session>.jsonl)
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗