Repository navigation
fix: MCP startup no longer duplicates the plugin's hooks (0.52.1) - #68
Merged
Merged
Conversation
With token-pilot installed as a plugin and also registered as an npm MCP server, every start of the npm copy wrote its hooks into the project's .claude/settings.json next to the plugin's, so every hook ran twice. install-hook has refused this since v0.33.0, but the refusal lived in the CLI; startServer calls installHook directly and never saw it. The check now sits in installHook, so every caller gets it. Installer tests point HOME at an empty dir so the machine's own ~/.claude/settings.json cannot leak into them.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem — with token-pilot installed as a plugin and also registered as an npm MCP
server, every start of the npm copy wrote its hooks into the project's
.claude/settings.json, beside the hooks the plugin already provides. Each hook thenran twice and the event log double-counted. On the machine this was found on, 28
project settings files had a duplicate set; eight of them had been committed to git by
stage-everything commits, carrying absolute paths that only exist on that machine.
install-hookhas refused this case since v0.33.0, but the check lives in the CLIcommand.
startServercallsinstallHookdirectly (src/index.ts:886), so therefusal never ran on the path that actually writes.
Fix — the
isTokenPilotPluginEnabledcheck moves intoinstallHook, next to theexisting
CLAUDE_PLUGIN_ROOTone, so every caller gets it. Existing duplicates are leftalone: an entry in a tracked settings file is the repo owner's call. The session-start
warning flags them in whichever project is open, and
uninstall-hookremoves them.Verified — a new installer test, red before the fix. Installer tests now point
HOMEatan empty dir, so the machine's own
~/.claude/settings.jsoncannot leak into them.Full suite green,
tsc --noEmitclean, build clean.