Summary
Four of the five vertical plugins in this marketplace ship a hooks/hooks.json file containing a bare JSON array ([]), but the Claude Code plugin loader validates that file against a schema expecting an object with a hooks record property. As a result, those plugins install successfully (claude plugin install ... returns success) but immediately fail to load on subsequent claude plugin list, with status × failed to load.
Affected files (paths relative to repo root)
| Plugin |
Version |
plugins/vertical-plugins/<plugin>/hooks/hooks.json |
financial-analysis |
0.1.0 |
[] — broken |
equity-research |
0.1.0 |
[] — broken |
private-equity |
current |
[] — broken |
wealth-management |
current |
[] — broken |
investment-banking |
0.2.0 |
{"hooks": {}} — correct (canonical example) |
Reproduction
claude plugin marketplace add anthropics/financial-services
claude plugin install financial-analysis@claude-for-financial-services
claude plugin list
Observed:
> financial-analysis@claude-for-financial-services
Status: × failed to load
Error: Hook load failed: [
{
"expected": "record",
"code": "invalid_type",
"path": ["hooks"],
"message": "Invalid input: expected record, received undefined"
}
]
A first patch from [] to {} produced a different error (expected record at path ["hooks"]), confirming the loader requires the top-level object and a hooks key whose value is itself a record. Patching to {"hooks": {}} resolved the load.
Root cause
Empty-hooks placeholder file does not match the required minimum shape. The canonical valid example already exists in the same repo at plugins/vertical-plugins/investment-banking/hooks/hooks.json.
Proposed fix
Replace the contents of the four broken hooks.json files with:
A four-line patch. Also consider:
- Adding a
check.py rule (the repo's existing pre-commit linter) that validates every hooks/hooks.json against the loader schema, so this can't regress.
- Patch-bumping the
version of the four affected plugin manifests so installed users pull the fix.
Environment
- OS: Windows 11 Pro (10.0.26200)
- Shell: PowerShell 7.6.1
claude CLI: current as of 2026-05-16
- Marketplace source:
https://github.com/anthropics/financial-services.git (HTTPS, fresh clone today)
Summary
Four of the five vertical plugins in this marketplace ship a
hooks/hooks.jsonfile containing a bare JSON array ([]), but the Claude Code plugin loader validates that file against a schema expecting an object with ahooksrecord property. As a result, those plugins install successfully (claude plugin install ...returns success) but immediately fail to load on subsequentclaude plugin list, with status× failed to load.Affected files (paths relative to repo root)
plugins/vertical-plugins/<plugin>/hooks/hooks.jsonfinancial-analysis[]— brokenequity-research[]— brokenprivate-equity[]— brokenwealth-management[]— brokeninvestment-banking{"hooks": {}}— correct (canonical example)Reproduction
Observed:
A first patch from
[]to{}produced a different error (expected record at path ["hooks"]), confirming the loader requires the top-level object and ahookskey whose value is itself a record. Patching to{"hooks": {}}resolved the load.Root cause
Empty-hooks placeholder file does not match the required minimum shape. The canonical valid example already exists in the same repo at
plugins/vertical-plugins/investment-banking/hooks/hooks.json.Proposed fix
Replace the contents of the four broken
hooks.jsonfiles with:{ "hooks": {} }A four-line patch. Also consider:
check.pyrule (the repo's existing pre-commit linter) that validates everyhooks/hooks.jsonagainst the loader schema, so this can't regress.versionof the four affected plugin manifests so installed users pull the fix.Environment
claudeCLI: current as of 2026-05-16https://github.com/anthropics/financial-services.git(HTTPS, fresh clone today)