Ecosystems and repository mode
plugin-scanner can work against one plugin package or auto-detect multiple supported ecosystems inside a repository root.
Supported ecosystemsDirect link to Supported ecosystems
| Ecosystem | Detection surfaces |
|---|---|
| Codex | .codex-plugin/plugin.json, marketplace.json, .agents/plugins/marketplace.json |
| Claude Code | .claude-plugin/plugin.json, .claude-plugin/marketplace.json |
| Gemini CLI | gemini-extension.json, commands/**/*.toml |
| OpenCode | opencode.json, opencode.jsonc, .opencode/commands, .opencode/plugins |
Use --ecosystem auto to scan all detected packages in a repository, or select a single ecosystem explicitly when you only want one family.
Repository modeDirect link to Repository mode
Repository mode matters most for marketplace roots:
plugin-scanner scan . --format json
plugin-scanner lint . --format json
plugin-scanner verify . --format json
plugin-scanner doctor . --component mcp --bundle dist/doctor.zip
If your repository uses a Codex marketplace root like .agents/plugins/marketplace.json, keep plugin_dir: ".". The scanner will discover local ./plugins/... entries automatically, scan each local plugin manifest, and skip remote marketplace entries instead of treating the repository root as one plugin.
Codex packaging alignmentDirect link to Codex packaging alignment
The scanner follows the current Codex packaging conventions more closely:
- local manifest paths should use
./prefixes .agents/plugins/marketplace.jsonis the preferred marketplace manifest location- root
marketplace.jsonis still supported in compatibility mode interfacemetadata no longer requires an undocumentedtypefieldverifyperforms an MCP initialize handshake before probing declared capabilities
submit remains intentionally single-plugin so the emitted artifact always points at one concrete plugin package.
Useful discovery commandsDirect link to Useful discovery commands
plugin-scanner --list-ecosystems
plugin-scanner . --ecosystem auto
plugin-scanner . --ecosystem claude