anthropics / anthropics/claude-code
[BUG] Skills declared inline in `marketplace.json` under `strict: false` are not registered (2.1.112 works, 2.1.270 broken)
- Dominant language
- Python
- Stars
- 145k
- Forks
- 23.1k
- PR merge metrics
- PR metrics pending
Description
### Preflight Checklist
- [x] I have searched [existing issues](https://github.com/anthropics/claude-code/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug) and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
### What's Wrong?
- [x] I have searched existing issues. This appears to be the same root-cause class as #93474, #15148, #15235 and #16291, but for `skills` rather than `lspServers` — those reports cover LSP plugins, this one covers a skills-only plugin. Filing separately in case they are tracked apart.
- [x] This is a single bug report.
- [ ] Using the latest version — tested on **2.1.270**; 2.1.273 was the latest at time of writing, untested.
- [ ] The `document-skills` plugin from the official `anthropics/skills` marketplace installs successfully and reports as enabled, and both manifests pass `claude plugin validate`, but **none of its four skills (`docx`, `pdf`, `pptx`, `xlsx`) are registered with the Skill tool**. Invoking any of them returns `Unknown skill`, and they are absent from the skill list given to the model.
The same plugin on the same machine **does register all four skills on 2.1.112**.
### What Should Happen?
The `skills` entries declared inline in the `marketplace.json` plugin entry should be registered at runtime after install, and the four skills should be invokable as `document-skills:docx`, `document-skills:pdf`, `document-skills:pptx`, `document-skills:xlsx` — as they are on 2.1.112.
### Error Messages/Logs
```shell
Same machine, same config, same plugin, two versions, both invoked as a plain CLI `-p` session (so this is not an extension-vs-CLI difference):
| Runtime | Version | `document-skills:*` in skill list |
| --- | --- | --- |
| `/usr/local/bin/claude` | 2.1.112 | **present** — `document-skills:docx`, `document-skills:pdf`, `document-skills:pptx`, `document-skills:xlsx` |
| extension-bundled CLI | 2.1.270 | **absent** — returns `Unknown skill: document-skills:docx` |
Sanity checks that pass on 2.1.270, so the plugin is installed and visible to the CLI:
$ claude plugin list
❯ document-skills@anthropic-agent-skills
Version: da20c92503b2
Scope: user
Status: ✔ enabled
$ claude plugin validate
✔ Validation passed
$ claude plugin validate
✔ Validation passed
```
### Steps to Reproduce
1. Add the marketplace (`anthropics/skills`, either as a git source or a local directory).
2. Install the plugin:
```
claude plugin install document-skills@anthropic-agent-skills
```
3. In a fresh non-interactive session, ask for the available skills:
```
claude -p "List ONLY the exact skill names you can invoke with the Skill tool right now, comma-separated, no commentary."
```
### Claude Model
Sonnet (default)
### Is this a regression?
Yes, this worked in a previous version
### Last Working Version
2.1.112 Verified by running the same probe on both binaries: - 2.1.112 -> document-skills:docx / pdf / pptx / xlsx all registered - 2.1.270 -> none registered, `Unknown skill: document-skills:docx` The exact version that introduced the regression is not bisected; 2.1.113–2.1.269 untested.
### Claude Code Version
2.1.270 (VSCode extension bundled CLI) 2.1.112 (/usr/local/bin/claude — this is the version that still works)
### Platform
Other
### Operating System
macOS
### Terminal/Shell
VS Code integrated terminal
### Additional Information
## Relevant configuration
The marketplace entry (`anthropics/skills` → `.claude-plugin/marketplace.json`):
```json
{
"name": "document-skills",
"source": "./",
"strict": false,
"skills": [
"./skills/xlsx",
"./skills/docx",
"./skills/pptx",
"./skills/pdf"
]
}
```
- Installed to `~/.claude/plugins/cache/anthropic-agent-skills/document-skills/da20c92503b2/`.
- That installed directory contains `.claude-plugin/marketplace.json`, `README.md`, `THIRD_PARTY_NOTICES.md` and `skills/` — **but no `plugin.json`**. (`plugin.json` is not gitignored upstream; the plugin genuinely ships without one, per the `strict: false` + inline-`skills` design.)
- All four skill directories exist and contain a `SKILL.md` with valid frontmatter (`name`, `description`, `license`), plus their `scripts/` and reference files.
- Note: three plugin entries in this marketplace share `"source": "./"` — `document-skills`, `example-skills`, and `claude-api`.
## Control case — same mechanism, works
`humanizer-zh@humanizer-zh-marketplace` uses the **identical declaration mechanism** (`"strict": false` with an inline `skills` array) and **does load correctly on 2.1.270**, appearing as `humanizer-zh:humanizer-zh`. The only structural difference is the declared path:
| Plugin | `skills` value | Layout | 2.1.270 |
| --- | --- | --- | --- |
| `humanizer-zh` | `["./"]` | `SKILL.md` at plugin root | ✅ loads |
| `document-skills` | `["./skills/docx", …]` | `SKILL.md` in subdirectories | ❌ does not load |
This suggests the failure is specific to enumerated **subdirectory** skill paths, rather than to `strict: false` as such — or possibly to the three entries sharing `"source": "./"`. I have not been able to narrow it further.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with the inline skills declaration in `.claude-plugin/marketplace.json` and trace the plugin installation and skill discovery exercised by `claude plugin install` and `claude -p`. Compare the working `humanizer-zh` root path with the failing `document-skills` subdirectory paths in the installed plugin cache. Done means the four document skills appear in the skill list and can be invoked by their names.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- json, python
- Domain
- cli, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100