馃悰 Fix plugin load failure from the duplicate hooks declaration (0.1.5) - #99
Merged
Merged
Conversation
Claude Code and Codex both load hooks/hooks.json from the plugin root on their own, so naming that path in .claude-plugin/plugin.json registered it twice. Claude Code 2.0.60 and later reject the plugin with "Duplicate hooks file detected" and drop it with hook-load-failed, which made Rudder 0.1.4 fail to load on current Claude Code; releases before 2.0.60 instead ran every Rudder hook twice per event. Verified against real Claude Code releases 2.1.21, 2.1.22, 2.1.50, 2.1.100, and 2.1.220: installing the 0.1.4 manifest from a local marketplace reports the duplicate hook-load error in `claude plugin list --json`, while the same plugin without the manifest field installs clean with both UserPromptSubmit and Stop still registered. Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Ship the plugin-load fix: 0.1.4 is unusable on Claude Code 2.1.x, so users need a new published version rather than a re-tag. Synchronizes the version across package.json, package-lock.json, both plugin manifests, and both marketplace version fields. Co-authored-by: Cursor Agent <cursoragent@cursor.com>
|
Ready to review this PR? Stage has broken it down into 4 individual chapters for you:
Chapters generated by Stage for commit f07f75b on Jul 31, 2026 6:28pm UTC. |
馃攲 Merging this PR will release the Rudder pluginPublish The release runs through |
Vivekyy
marked this pull request as ready for review
July 31, 2026 18:29
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.
What
Rudder 0.1.4 fails to load on current Claude Code.
.claude-plugin/plugin.jsondeclared"hooks": "./hooks/hooks.json", but that path is the standard location both Claude Code and Codex load on their own, so the file was registered twice.Claude Code 2.0.60 and later detect the second registration and reject it:
That surfaces as
hook-load-failedand the plugin becomes unavailable. Releases before 2.0.60 accept the manifest but merge both copies, so every Rudder hook ran twice per event.Changes
hooksfield from.claude-plugin/plugin.json.hooks/hooks.jsonstays where it is and both hosts keep discovering it; the Codex manifest never declared it, so provider parity is unchanged.claude plugin validatepasses either way, so it cannot catch this regression on its own.package.json,package-lock.json, both plugin manifests, and both marketplace version fields, since 0.1.4 is unusable and needs a new published version.Verification
Installed both manifest variants from a local marketplace using real Claude Code releases and read
claude plugin list --json:Duplicate hooks file detectedDuplicate hooks file detectedReading the bundled loader across 2.0.0 through 2.1.100 confirms the older behavior: every release from 2.0.0 loads
<plugin root>/hooks/hooks.jsonwhen it exists, and the duplicate check plus its error message first appear in 2.0.60. Removing the declaration is therefore correct on every version that supports plugins, not only current ones.Finally,
npm packof this branch installed on 2.1.220 witherrors=noneand a component inventory showing both hook events, the skill, and the MCP server.npm run check:agent-layout,npm run typecheck,npm test,npm run build, andnpm run format:markdown:checkall pass.Note
almanac/architecture/tooling/plugin-package.mdstill says the Claude manifest points at./hooks/hooks.json, which is now stale. Left untouched so the CodeAlmanac ingest/garden run can reconcile it.Greptile Summary
Removes the redundant Claude hooks manifest declaration, synchronizes the 0.1.5 release metadata, and adds regression coverage for standard hook discovery.
hooks/hooks.jsonat the host-discovered plugin-root path.Confidence Score: 5/5
The PR appears safe to merge, with the duplicate hook registration removed and release metadata kept consistent.
The standard hooks file remains included at the plugin root, the manifests no longer redundantly register it, and all active release-version locations are synchronized.
Important Files Changed
Reviews (1): Last reviewed commit: "馃敄 Bump Rudder plugin to 0.1.5" | Re-trigger Greptile